ポリシー条件
条件は、 whenおよび unless句を使用してポリシーにきめ細かなロジックを追加します。
when { principal.hasTag("username") && principal.getTag("username") == "refund-agent" && context.input.amount < 500 }
条件の種類
-
when { … }- ポリシーは、条件が true の場合にのみ適用されます -
unless { … }- ポリシーは、条件が false の場合にのみ適用されます -
when guardrails { … }- ポリシーは、1 つ以上のガードレールの出力でアサートされた条件が true (複数可) と評価される場合にのみ適用されます。 -
unless guardrails { … }- ポリシーは、1 つ以上のガードレールの出力 (複数可) でアサートされた条件が false と評価される場合にのみ適用されます。
ツール引数
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→「欠陥製品」
ポリシーは、特定のツール呼び出しパラメータに基づいて決定を行うことができます。
プリンシパル属性
プリンシパル属性は、AgentCore Gateway 用に設定された認証タイプによって異なります。
OAuth クレーム (タグ)
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 エンティティ属性
IAM 認証ゲートウェイの場合、プリンシパルには発信者の IAM ARN を含む id 属性があります。IAM プリンシパルはタグをサポートしていません。
プリンシパルエンティティの形式
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
ワイルドカードで 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"
論理演算子
論理演算子を使用して複数の条件を結合します。
-
&&- 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