

# Conditions de stratégie
<a name="policy-conditions"></a>

Les conditions ajoutent une logique fine aux politiques en utilisant des clauses `when` et `unless` :

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

## Types de conditions
<a name="policy-condition-types"></a>
+  `when { …​ }`- La politique ne s'applique que si la condition est vraie
+  `unless { …​ }`- La politique ne s'applique que si la condition est fausse
+  `when guardrails { …​ }`- La politique ne s'applique que si la condition affirmée sur la ou les sorties d'un ou de plusieurs garde-corps s'avère vraie
+  `unless guardrails { …​ }`- La politique ne s'applique que si la condition affirmée sur la ou les sorties d'un ou de plusieurs garde-corps s'avère fausse

## Arguments des outils
<a name="policy-tool-arguments"></a>

 `context.input`contient les arguments passés à l'appel de l'outil :

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

Lorsqu'un utilisateur appelle `RefundTool___process_refund` avec des arguments tels que :

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

La politique peut accéder aux valeurs suivantes :
+  `context.input.orderId`→ « 12345 »
+  `context.input.amount`→ 450
+  `context.input.reason`→ « Produit défectueux »

Les politiques peuvent prendre des décisions en fonction de paramètres d'appel d'outils spécifiques.

## Attributs principaux
<a name="policy-principal-attributes"></a>

Les principaux attributs varient en fonction du type d'authentification configuré pour votre AgentCore passerelle.

### Réclamations OAuth (balises)
<a name="policy-oauth-claims"></a>

Pour les OAuth-authenticated passerelles, les demandes JWT provenant du jeton OAuth sont stockées sous forme de balises sur l'entité. OAuthUser Exemple de réclamations de JWT :

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

Ces allégations deviennent des étiquettes sur l'entité principale. Vérifiez si un tag existe :

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

Obtenez une valeur de balise :

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

Correspondance des motifs :

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

### Attributs de l'entité IAM
<a name="policy-iam-attributes"></a>

Pour les IAM-authenticated passerelles, le principal possède un `id` attribut contenant l'ARN IAM de l'appelant. Les principes IAM ne prennent pas en charge les balises.

#### Format de l'entité principale
<a name="policy-iam-principal-format"></a>

Le principe de Cedar pour les IAM-authenticated passerelles est`AgentCore::IamEntity`. L'`principal.id`attribut contient l'ARN IAM de l'appelant.

Pour les appelants s'authentifiant via un rôle IAM supposé, l'ID d'entité `principal.id` et Cedar utilise le format suivant :

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

Par exemple, si un appelant assume le rôle`MyServiceRole`, l'identifiant de l'entité Cedar est le suivant :

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

Ce format est stable d'un appel à l'autre, vous pouvez donc l'utiliser `principal ==` pour une correspondance exacte des rôles.

#### Motif correspondant à un objet `similaire`
<a name="policy-iam-pattern-matching"></a>

Vous pouvez également utiliser l'`like`opérateur avec des caractères génériques pour une correspondance plus large :

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

## Opérateurs logiques
<a name="policy-logical-operators"></a>

Combinez plusieurs conditions à l'aide d'opérateurs logiques :
+  `&&`- ET (toutes les conditions doivent être vraies)
+  `||`- OU (au moins une condition doit être vraie)
+  `!`- NON (annule une condition)

Exemple :

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