

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 例のリソース設定
<a name="example-policies-reference"></a>

このセクションの例は、既存のゲートウェイではなく、1 つの説明的なゲートウェイに対して記述されています。アカウントには何も存在しません。`InsuranceAPI`、`ClaimsAgent`、および 3 つの`Claims*`推論ターゲットは、保険金請求アプリケーションの名前を考案され、すべての例が 1 セットのツール、パラメータタイプ、プリンシパルを共有できるように選択されています。例を適応させるときは、独自のゲートウェイ ARN、ターゲット名、ツール名を置き換えます。

すべての例では、このゲートウェイへのリクエストを承認します。

```
arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5
```

例を適応させるときは、この ARN を独自のゲートウェイの ARN に置き換えます。ゲートウェイは保険金請求アプリケーションに属し、AgentCore のポリシーが承認するすべてのターゲットタイプをカバーする 5 つのターゲットがあります。1 つのモデルコンテキストプロトコル (MCP) ターゲット、1 つの AgentCore ランタイムターゲット、3 つの推論ターゲットです。

このページでは、例が参照するアクション名、ツールスキーマ、リクエスト本文、プリンシパルについて説明します。これを 1 回読み取ると、残りの例ではそれ以上セットアップする必要はありません。

## アクション名
<a name="example-policies-reference-actions"></a>

ポリシーに書き込むアクション名は、リクエストを処理するターゲットのタイプによって異なります。MCP を除くすべてについては、呼び出し元が使用したメソッドとパスにも依存します。


| ターゲット | タイプ | [Action name (アクション名)] | 
| --- | --- | --- | 
|  `InsuranceAPI`  | MCP |  `AgentCore::Action::"InsuranceAPI___file_claim"` (ツールごとに 1 つのアクション) | 
|  `ClaimsAgent`  | AgentCore ランタイム |  `AgentCore::Action::"ClaimsAgent___POST:/invocations"`  | 
|  `ClaimsChat`  | 推測 |  `AgentCore::Action::"ClaimsChat___POST:/v1/chat/completions"`  | 
|  `ClaimsResponses`  | 推測 |  `AgentCore::Action::"ClaimsResponses___POST:/v1/responses"`  | 
|  `ClaimsMessages`  | 推測 |  `AgentCore::Action::"ClaimsMessages___POST:/v1/messages"`  | 

MCP ターゲットはツールごとに 1 つのアクションを生成するため、ポリシーは 1 つのツールに名前を付けることができます。他のすべてのターゲットタイプは、メソッドとパスの組み合わせごとに 1 つのアクションを生成するため、ポリシーは個々の機能ではなくターゲットとパスに名前を付けます。

### 推論ターゲットと API パス
<a name="example-policies-reference-inference-paths"></a>

推論ターゲットは 1 つの API シェイプに設定されているため、複数の推論 API を提供するゲートウェイには、API ごとに 1 つのターゲットがあります。そのため、リファレンスゲートウェイには 3 つの があります。各 は異なるリクエスト本文を保持するため、あるポリシー用に記述されたポリシーは別のポリシーに引き継がれません。


| ターゲット | API パス | エンベロープ | 
| --- | --- | --- | 
|  `ClaimsChat`  |  `POST /v1/chat/completions`  | OpenAI チャットの完了 | 
|  `ClaimsResponses`  |  `POST /v1/responses`  | OpenAI レスポンス | 
|  `ClaimsMessages`  |  `POST /v1/messages`  | Anthropic メッセージ | 

ゲートウェイは`GET /v1/models`、使用可能なモデルを一覧表示する を公開することもできます。リクエスト本文がないため、 のポリシーはプリンシパル、アクション、リソースでのみ一致`ClaimsChat___GET:/v1/models`できます。

**重要**  
推論を完全に管理するには、ゲートウェイ上のすべての推論アクションのポリシーを記述します。ポリシーの命名では`ClaimsChat___POST:/v1/chat/completions`、 `/v1/responses`および `/v1/messages`ターゲットのみがアドレス指定されず、3 つのエンベロープはプロンプトを別の場所に配置するため、1 つのために記述された条件を別の場所に逐語的に再利用することはできません。詳細については、[「パス別の推論リクエスト本文](#example-policies-reference-inference-bodies)」を参照してください。

HTTP プロキシターゲットを含む完全なルールについては、[「ターゲットタイプ別のアクション名](policy-scope.md#policy-guardrails-action-naming)」を参照してください。

## InsuranceAPI ターゲットの MCP ツール
<a name="example-policies-reference-tools"></a>

`InsuranceAPI` ターゲットは 8 つのツールを公開します。各パラメータの Cedar タイプは、JSON スキーマタイプに従います。このタイプにより、条件の パラメータで使用できる演算子が決まります。詳細については、[「条件のパラメータタイプ](#example-policies-types)」を参照してください。

InsuranceAPI\_\_get\_contract  
カバレッジや期間日など、保険契約の詳細を取得します。  
 **パラメータ :**   
+  `contractId` (文字列、必須) - 保険契約識別子

InsuranceAPI\_\_\_file\_claim  
保険金請求を提出します。  
 **パラメータ :**   
+  `contractId` (文字列、必須) - 保険契約識別子
+  `claimType` (文字列、必須) - クレームのタイプ: `health`、`property`、または `auto` 
+  `amount` (数値、必須) - 請求額
+  `policyTermMonths` (整数、必須) - ポリシー期間の長さ、月単位
+  `description` (文字列、オプション) - クレームの説明

InsuranceAPI「update\_coverage」  
ポリシーカバレッジを更新します。  
 **パラメータ :**   
+  `contractId` (文字列、必須) - 保険契約識別子
+  `coverageType` (文字列、必須) - `liability`や などのカバレッジのタイプ `collision` 
+  `newLimit` (数値、必須) - 新しいカバレッジ制限

InsuranceAPI\_\_\_get\_claim\_status  
クレームのステータスを確認します。  
 **パラメータ :**   
+  `claimId` (文字列、必須) - クレーム識別子

   **戻り値:** `claimId` (文字列）、 `status` (文字列)

InsuranceAPI\_\_\_calculate\_premium  
保険プレミアムを計算します。  
 **パラメータ :**   
+  `coverageType` (文字列、必須) - カバレッジのタイプ
+  `coverageAmount` (数値、必須) - カバレッジ額
+  `riskFactors` (オブジェクト、オプション) - `region` (文字列) メンバーと `priorClaims` (整数) メンバーを含むリスク評価要因

InsuranceAPI\_\_\_approve\_claim  
提出されたクレームを承認します。一時的な例では、このツールを支払いの前に行う必要がある承認として使用します。  
 **パラメータ :**   
+  `claimId` (文字列、必須) - クレーム識別子
+  `approved` (ブール値、必須) - クレームが承認されるかどうか
+  `approvedAmountCents` (整数、必須) - 承認された金額、セント

   **戻り値:** `claimId` (文字列）、 `approved` (ブール値）、 `approvedAmountCents` (整数)

InsuranceAPI\_\_\_disburse\_payment  
承認されたクレームの支払い。  
 **パラメータ :**   
+  `claimId` (文字列、必須) - クレーム識別子
+  `amountCents` (整数、必須) - 支払い金額、セント

   **戻り値:** `claimId` (文字列）、 `status` (文字列）、 `amountCents` (整数)

InsuranceAPI\_\_\_delete\_claim  
クレームレコードを完全に削除します。例では、ほとんどのプリンシパルが到達できない機密性の高いオペレーションとしてこのツールを使用します。  
 **パラメータ :**   
+  `claimId` (文字列、必須) - クレーム識別子

## ランタイムターゲットのリクエスト本文
<a name="example-policies-reference-bodies"></a>

ランタイムターゲットは 1 つのアクションとして承認され、宣言された一連のツール引数ではなくリクエスト本文`context.input`を保持します。

 `ClaimsAgent___POST:/invocations`   
クレームアシスタントをホストする AgentCore ランタイムターゲット。  
 **リクエスト本文:**   
+  `prompt` (文字列) - エージェントへのユーザーのメッセージ
+  `sessionAttributes` (オブジェクト、オプション) - 発信者が提供する属性

   **レスポンス本文:** `completion` (文字列)

**重要**  
ランタイムターゲットの場合、ポリシーが読み取ることができるフィールドは、ランタイムが実際に送信するものではなく、**ゲートウェイターゲットで宣言された OpenAPI スキーマ**から取得されます。スキーマが宣言しないフィールドはアドレス指定できません。スキーマがリストするレスポンスプロパティに対してのみ`context.output.<field>`機能し、テンポラル述語`output.<field>`で同じことが適用されます。  
ランタイムフィールドの条件が未宣言として拒否された場合は、ランタイムのコードではなく、ターゲットのスキーマを確認します。

## パス別の推論リクエスト本文
<a name="example-policies-reference-inference-bodies"></a>

推論ターゲットの場合、 は呼び出し元が呼び出す API のリクエスト本文`context.input`を保持します。3 つのエンベロープは、会話テキストをさまざまな構造に配置します。これは、推論ターゲットに対して条件またはガードレールデータパスを記述する前に知っておくべき最も重要なことです。

 `ClaimsChat___POST:/v1/chat/completions`   
OpenAI チャットの完了。会話はメッセージオブジェクトの配列であり、システムプロンプトは を使用したメッセージです`role: system`。  

```
{
  "model": "openai.gpt-oss-120b-1:0",
  "messages": [
    { "role": "system", "content": "You are a claims assistant." },
    { "role": "user",   "content": "What is the status of claim C-1001?" }
  ]
}
```
 **レスポンス本文:** `choices` (配列）、`message`オブジェクトが `role`と を保持している各エントリ `content` 

 `ClaimsResponses___POST:/v1/responses`   
OpenAI レスポンス。プロンプトは 1 つの`input`メンバーで、それぞれが`content`配列を保持するベア文字列**または**項目のリストです。システムプロンプトは別の`instructions`メンバーです。  

```
{
  "model": "openai.gpt-oss-120b-1:0",
  "instructions": "You are a claims assistant.",
  "input": "What is the status of claim C-1001?"
}
```
 **レスポンス本文:** `output` (配列）、ブロックの`content`配列が保持されている各エントリ `text` 

 `ClaimsMessages___POST:/v1/messages`   
Anthropic メッセージ。会話は`messages`、文字列または型付きブロックの配列`content`である配列です。システムプロンプトは最上位`system`のメンバーであり、メッセージではありません。  

```
{
  "model": "anthropic.claude-sonnet-4-5-20250929-v1:0",
  "max_tokens": 1024,
  "system": "You are a claims assistant.",
  "messages": [
    { "role": "user", "content": "What is the status of claim C-1001?" }
  ]
}
```
 **レスポンス本文:** 保持するブロックの `content` (配列) `text` 

### 各パスのテキストの場所
<a name="example-policies-reference-inference-fields"></a>

次の表は、両方向の各パスの会話テキストの場所を示しています。発信者またはモデルが実際に言ったことをガードレールにポイントする必要がある場合に使用します。


| API パス | インバウンドテキスト | アウトバウンドテキスト | 
| --- | --- | --- | 
|  `/v1/chat/completions`  |  `messages[*].content`  |  `choices[*].message.content`  | 
|  `/v1/responses`  |  `input`, `input[*].content[*].text`, `instructions`  |  `output[*].content[*].text`  | 
|  `/v1/messages`  |  `messages[*].content`, `messages[*].content[*].text`, `system`  |  `content[*].text`  | 

ワイヤ形式が異なるため、2 つのパスに複数のインバウンドロケーションが一覧表示されます。では`/v1/responses`、 `input`はベア文字列または項目のリストであるため、テキストは 1 つのケース`input`では 、もう 1 つのケースでは `input[*].content[*].text`になります。では`/v1/messages`、メッセージの `content`は文字列または型付きブロックの配列です。両方のシェイプに名前を付けると、発信者が送信した内容を知ることなく、どちらのワイヤフォームもカバーされます。

**重要**  
これらの場所は配列とレコード内にあるため、ベア`context.input.<field>`パスでは到達**できません**。 `context.input.messages`はテキストではなく `Set<record>`であり、Dogwood には配列射影演算子がないため、 `messages[*].content` はフィールドパスの解析エラーです。ガードレールデータパスは、代わりに`$`プレフィックス付きの JSONPath 文字列で到達します。詳細については、[JSONPath を使用して配列内のテキストに到達する](example-policies-guardrails.md#example-policies-guardrails-jsonpath)」を参照してください。  
通常の Cedar 条件では、スカラーメンバーのみが使用できます。 `context.input.model`は `String`で機能しますが、比較やパターンマッチングはまったく`context.input.messages`できません。

## プリンシパル
<a name="example-policies-reference-principals"></a>

プリンシパルエンティティタイプは、ゲートウェイがインバウンド発信者を認証する方法によって異なります。この例では、パターンが呼び出す任意のタイプを使用し、ほとんどのパターンはどちらのパターンでも機能します。

AgentCore::OAuthUser  
ゲートウェイは JWT オーソライザーを使用します。エンティティ ID はトークンの`sub`クレームであり、トークンの他のクレームは `principal.hasTag("<claim>")`および を通じてタグとして使用できます`principal.getTag("<claim>")`。この例では、`username`、、 `role`の 3 つのクレームを使用します`scope`。

AgentCore::IamEntity  
ゲートウェイは を使用します`AWS_IAM`。エンティティ ID は、セッション名が削除された発信者の ARN であるため、引き受けたロールは として表示されます`arn:aws:sts::<account>:assumed-role/<role-name>`。この形式はセッション間で安定しているため、 と一致`principal ==`させたり、 とロールファミリーを一致させたりすることができます`principal.id like`。

プリンシパル属性の完全なリストとクレームがタグにどのようにマッピングされるかについては、[「プリンシパル](policy-scope.md#policy-principal)」を参照してください。

## 条件のパラメータタイプ
<a name="example-policies-types"></a>

ツールパラメータの JSON スキーマタイプによって Cedar タイプが決まり、Cedar タイプによって有効な演算子が決まります。このエラーが発生すると、検証に失敗するか、実行時にすべてのリクエストを拒否するポリシーが生成されるため、条件を記述する前にパラメータのタイプを確認してください。


| JSON スキーマタイプ | Cedar タイプ | 比較方法 | 
| --- | --- | --- | 
|  `string`  |  `String`  |  `==`、`!=`、`like`、および でメンバーシップを設定する `.contains()`  | 
|  `integer`  |  `Long`  |  `==`整数リテラル`>=`を持つ `<``⇐`、`>`、、 | 
|  `number`  |  `decimal`  | リ`decimal("…​")`テラルに対して `.lessThan()`、`==`、`.lessThanOrEqual()``.greaterThan()``.greaterThanOrEqual()`、、および のみ。Cedar には、 の `<` または `>`演算子はなく`decimal`、浮動小数点リテラルもありません。 | 
|  `boolean`  |  `Bool`  |  `==`、および条件内での直接使用 | 
|  `object`  |  `Record`  | を使用してメンバーにアクセスし`.`、 を使用してメンバーをテストする `has`  | 
|  `array`  |  `Set`  |  `.contains()`, `.containsAll()`, `.containsAny()`  | 
|  `null`  |  `Entity`  | 比較できません。引`null`数は から省略されるため`context.input`、 を使用してその不在をテストします。 `!(context.input has <field>)` | 

これらは Cedar 独自の型名であり、生成されたスキーマが使用する名前です。各変換に関する注意事項を含む完全なマッピングについては、[「コンテキスト](policy-schema-constraints.md#policy-context)」を参照してください。

### 数値パラメータ
<a name="example-policies-numeric"></a>

数値は、条件がサービスが拒否する形式で記述される可能性が最も高い場所です。比較を記述する前に、パラメータのタイプと、タイプがサポートする演算子を確認します。

 **は Cedar `integer`になります`Long`。**通常の演算子と整数リテラルと比較します。

```
context.input.policyTermMonths >= 12
```

 **は Cedar `number`になります`decimal`。**Cedar は、 `decimal`の `<`、`⇐`、`>`、または `>=`演算子を定義せず、浮動小数点リテラルがないため、比較メソッドと引用符で囲まれた`decimal("…​")`リテラルを使用します。

```
context.input.amount.greaterThan(decimal("1000.00"))
```

`context.input.amount > 1000.00` と の両方`context.input.amount < 1000`が無効です。1 つ目は タイプの演算子がなく、2 つ目は を `decimal`と比較します`Long`。

 **`temporal { }`ブロック内で注文するには、 が必要です`integer`。**`decimal` は順序比較で拒否され、 は です`string`。要約には同じ要件があります。 `integer` には 要約`sum`が必要です。両側が同じタイプであれば、等価 (`==`、`!=`) は無制限です。詳細については、[「一時ポリシーの例](example-policies-temporal.md)」を参照してください。

サービスは、ポリシーを作成するときに、これらの種類のタイプエラーを報告します。メッセージは、 `unexpected type: expected Long but saw decimal`や `temporal`ブロック`comparison requires numeric operands on both sides`内の行と列のポインタを使用して、想定型と実際の型に名前を付けます。

**ヒント**  
一時ポリシーが合計またはしきい値に必要とする値をツールスキーマ`integer`の としてモデル化します。これが、リファレンスゲートウェイが 2 つの方法でコストを計上する理由です。 `file_claim` は`number`、そのルールがpoint-in-time比較であるため、 を `amount`として扱います。 `approve_claim` は、一時的な例がそれらを集計するため`amountCents`、整数`approvedAmountCents`を受け取り、 `disburse_payment`を整数として受け取ります。金額を整数のマイナーユニットとして表すことは、一時ポリシーの合計値が必要なツールに採用する価値があります。

10 進精度制限およびその他のスキーマ制約については、[「制約とクォータ](policy-schema-constraints.md)」を参照してください。

オプションのパラメータは、呼び出し元がパラメータを省略`context.input`したときに に存在しないため、読み取る`has`前に でメンバーをテストします。

```
context.input has description && context.input.description != ""
```

ガードはアドバイザリではなく必須です。オプション属性を読み取ると、 でのポリシーの作成に失敗し`unable to guarantee safety of access to optional attribute`、失敗は非同期 - 202 の後に が続きます`CREATE_FAILED`。必須のスキーママークのパラメータにはガードは必要ありません。

型の不一致は同じ方法で失敗します。文字列の配列`.contains(1)`では`the types Long and String are not compatible`、行と列のポインタを使用して がレポートされます。