

# Condiciones de política
<a name="policy-conditions"></a>

Las condiciones añaden una lógica detallada a las políticas que utilizan `when` y a las cláusulas: `unless`

```
when {
  principal.hasTag("username") &&
  principal.getTag("username") == "refund-agent" &&
  context.input.amount < 500
}
```

## Tipos de condiciones
<a name="policy-condition-types"></a>
+  `when { …​ }`- La política se aplica solo si la condición es verdadera
+  `unless { …​ }`- La política se aplica solo si la condición es falsa
+  `when guardrails { …​ }`- La política solo se aplica si la condición declarada en las salidas de una o más barandillas se evalúa como verdadera
+  `unless guardrails { …​ }`- La política solo se aplica si la condición afirmada en las salidas de una o más barandillas se evalúa como falsa

## Argumentos de herramientas
<a name="policy-tool-arguments"></a>

 `context.input`contiene los argumentos pasados a la llamada a la herramienta:

```
context.input.amount < 500
```

Cuando un usuario llama `RefundTool___process_refund` con argumentos como:

```
{
  "orderId": "12345",
  "amount": 450,
  "reason": "Defective product"
}
```

La política puede acceder a estos valores:
+  `context.input.orderId`→ «12345"
+  `context.input.amount`→ 450
+  `context.input.reason`→ «Producto defectuoso»

Las políticas pueden tomar decisiones en función de parámetros específicos de uso de herramientas.

## Atributos principales
<a name="policy-principal-attributes"></a>

Los atributos principales difieren según el tipo de autenticación configurado para su AgentCore Gateway.

### Reclamaciones de OAuth (etiquetas)
<a name="policy-oauth-claims"></a>

En el OAuth-authenticated caso de las pasarelas, las reclamaciones de JWT del token de OAuth se almacenan como etiquetas en la entidad. OAuthUser Ejemplos de afirmaciones de JWT:

```
{
  "sub": "user-123",
  "username": "refund-agent",
  "scope": "refund:write admin:read",
  "role": "admin"
}
```

Estas afirmaciones se convierten en etiquetas para la entidad principal. Compruebe si existe una etiqueta:

```
principal.hasTag("username")
```

Obtenga un valor de etiqueta:

```
principal.getTag("username") == "refund-agent"
```

Coincidencia de patrones:

```
principal.getTag("scope") like "*refund:write*"
```

### Atributos de la entidad de IAM
<a name="policy-iam-attributes"></a>

En el IAM-authenticated caso de las pasarelas, el principal tiene un `id` atributo que contiene el ARN de IAM de la persona que llama. Los directores de IAM no admiten etiquetas.

#### Formato de entidad principal
<a name="policy-iam-principal-format"></a>

El principio de Cedar para IAM-authenticated las pasarelas es`AgentCore::IamEntity`. El `principal.id` atributo contiene el ARN de IAM de la persona que llama.

Para las personas que llaman y se autentican mediante una función de IAM asumida, el ID de la entidad de Cedar `principal.id` y el ID de la entidad utilizan el siguiente formato:

 `arn:aws:sts::<account-id>:assumed-role/<role-name>` 

Por ejemplo, si la persona que llama asume la función`MyServiceRole`, el ID de la entidad de Cedar es:

 `AgentCore::IamEntity::"arn:aws:sts::123456789012:assumed-role/MyServiceRole"` 

Este formato es estable en todas las invocaciones, por lo que se puede utilizar `principal ==` para hacer coincidir los roles de forma exacta.

#### `El patrón coincide con un patrón similar`
<a name="policy-iam-pattern-matching"></a>

También puede utilizar el `like` operador con caracteres comodín para lograr una mayor coincidencia:

```
// Match any role in a specific account
principal.id like "arn:aws:sts::123456789012:assumed-role/*"

// Match specific AWS account (any ARN format)
principal.id like "*:123456789012:*"

// Match a specific IAM role name across any account
principal.id like "arn:aws:sts::*:assumed-role/AdminRole"
```

## Logical operators (Operadores lógicos)
<a name="policy-logical-operators"></a>

Combine varias condiciones mediante operadores lógicos:
+  `&&`- AND (todas las condiciones deben ser verdaderas)
+  `||`- O (al menos una condición debe ser verdadera)
+  `!`- NO (niega una condición)

Ejemplo:

```
principal.hasTag("username") &&              // User must have username tag
principal.getTag("username") == "refund-agent" &&  // Username must be "refund-agent"
context.input.amount < 500                   // Amount must be less than $500
```