

# Condições de políticas
<a name="policy-conditions"></a>

As condições adicionam uma lógica refinada ao uso `when` de políticas e cláusulas: `unless`

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

## Tipos de condição
<a name="policy-condition-types"></a>
+  `when { …​ }`- A política se aplica somente se a condição for verdadeira
+  `unless { …​ }`- A política se aplica somente se a condição for falsa
+  `when guardrails { …​ }`- A política se aplica somente se a condição declarada na (s) saída (s) de uma ou mais grades de proteção for avaliada como verdadeira
+  `unless guardrails { …​ }`- A política se aplica somente se a condição declarada na (s) saída (s) de uma ou mais grades de proteção for avaliada como falsa

## Argumentos da ferramenta
<a name="policy-tool-arguments"></a>

 `context.input`contém os argumentos passados para a chamada da ferramenta:

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

Quando um usuário liga `RefundTool___process_refund` com argumentos como:

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

A política pode acessar esses valores:
+  `context.input.orderId`→ “12345"
+  `context.input.amount`→ 450
+  `context.input.reason`→ “Produto defeituoso”

As políticas podem tomar decisões com base em parâmetros específicos de chamada de ferramentas.

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

Os atributos principais diferem com base no tipo de autenticação configurado para seu AgentCore Gateway.

### Reivindicações do OAuth (tags)
<a name="policy-oauth-claims"></a>

Para OAuth-authenticated gateways, as declarações JWT do token OAuth são armazenadas como tags na entidade. OAuthUser Exemplo de afirmações da JWT:

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

Essas reivindicações se tornam etiquetas na entidade principal. Verifique se existe uma tag:

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

Obtenha um valor de tag:

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

Correspondência de padrões:

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

### Atributos da entidade IAM
<a name="policy-iam-attributes"></a>

Para IAM-authenticated gateways, o principal tem um `id` atributo contendo o ARN do IAM do chamador. Os diretores do IAM não oferecem suporte a tags.

#### Formato da entidade principal
<a name="policy-iam-principal-format"></a>

O principal do Cedar para IAM-authenticated gateways é. `AgentCore::IamEntity` O `principal.id` atributo contém o ARN do IAM do chamador.

Para a autenticação de chamadores por meio de uma função presumida do IAM, o ID da entidade `principal.id` e do Cedar usa o formato:

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

Por exemplo, se um chamador assumir a função`MyServiceRole`, o ID da entidade Cedar será:

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

Esse formato é estável em todas as invocações, então você pode usá-lo `principal ==` para a correspondência exata de funções.

#### Correspondência de padrões com `semelhantes`
<a name="policy-iam-pattern-matching"></a>

Você também pode usar o `like` operador com curingas para uma correspondência mais ampla:

```
// 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"
```

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

Combine várias condições usando operadores lógicos:
+  `&&`- E (todas as condições devem ser verdadeiras)
+  `||`- OU (pelo menos uma condição deve ser verdadeira)
+  `!`- NÃO (nega uma condição)

Exemplo:

```
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
```