

# ポリシー条件
<a name="policy-conditions"></a>

条件は、 `when`および `unless`句を使用してポリシーにきめ細かなロジックを追加します。

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

## 条件の種類
<a name="policy-condition-types"></a>
+  `when { …​ }` - ポリシーは、条件が true の場合にのみ適用されます
+  `unless { …​ }` - ポリシーは、条件が false の場合にのみ適用されます
+  `when guardrails { …​ }` - ポリシーは、1 つ以上のガードレールの出力でアサートされた条件が true (複数可) と評価される場合にのみ適用されます。
+  `unless guardrails { …​ }` - ポリシーは、1 つ以上のガードレールの出力 (複数可) でアサートされた条件が false と評価される場合にのみ適用されます。

## ツール引数
<a name="policy-tool-arguments"></a>

 `context.input` には、ツール呼び出しに渡された引数が含まれています。

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

ユーザーが次のような引数`RefundTool___process_refund`で を呼び出す場合:

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

ポリシーは次の値にアクセスできます。
+  `context.input.orderId` →「12345」
+  `context.input.amount` → 450
+  `context.input.reason` →「欠陥製品」

ポリシーは、特定のツール呼び出しパラメータに基づいて決定を行うことができます。

## プリンシパル属性
<a name="policy-principal-attributes"></a>

プリンシパル属性は、AgentCore Gateway 用に設定された認証タイプによって異なります。

### OAuth クレーム (タグ)
<a name="policy-oauth-claims"></a>

OAuth 認証ゲートウェイの場合、OAuth トークンからの JWT クレームは OAuthUser エンティティにタグとして保存されます。JWT クレームの例:

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

これらのクレームは、プリンシパルエンティティのタグになります。タグが存在するかどうかを確認します。

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

タグ値を取得します。

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

パターンマッチング:

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

### IAM エンティティ属性
<a name="policy-iam-attributes"></a>

IAM 認証ゲートウェイの場合、プリンシパルには発信者の IAM ARN を含む `id` 属性があります。IAM プリンシパルはタグをサポートしていません。

#### プリンシパルエンティティの形式
<a name="policy-iam-principal-format"></a>

IAM 認証ゲートウェイの Cedar プリンシパルは です`AgentCore::IamEntity`。`principal.id` 属性には、呼び出し元の IAM ARN が含まれます。

引き受けた IAM ロールを介して認証する発信者の場合、 `principal.id`および Cedar エンティティ ID は次の形式を使用します。

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

たとえば、呼び出し元がロール を引き受ける場合`MyServiceRole`、Cedar エンティティ ID は次のようになります。

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

この形式は呼び出し間で安定しているため、 を使用して`principal ==`正確なロールマッチングを行うことができます。

#### とのパターンマッチング `like`
<a name="policy-iam-pattern-matching"></a>

ワイルドカードで `like`演算子を使用して、より広範なマッチングを行うこともできます。

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

## 論理演算子
<a name="policy-logical-operators"></a>

論理演算子を使用して複数の条件を結合します。
+  `&&` - AND (すべての条件が true である必要があります)
+  `||` - OR (少なくとも 1 つの条件が true である必要があります)
+  `!` - NOT (条件を無効にします)

例:

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