

# AWS WAF によるゲートウェイの保護
<a name="gateway-waf"></a>

Amazon Bedrock AgentCore Gateway で AWS WAF を使用すると、ウェブエクスプロイト、ボットトラフィック、ボリューメトリック攻撃からゲートウェイを保護できます。 AWS WAF は、ターゲットに到達する前にすべてのインバウンドリクエストを評価するインラインセキュリティレイヤーを提供します。

 AWS WAF ウェブアクセスコントロールリスト (ウェブ ACL) をゲートウェイに関連付けると、 AWS WAF はすべてのインバウンドリクエストを検査し、設定したルールを適用します。ブロックルールに一致するリクエストは、ターゲットに到達する前に拒否されます。ゲートウェイレベルでウェブ ACL をゲートウェイごとに 1 つのウェブ ACL に関連付けます。

## AWS WAF とゲートウェイの連携方法
<a name="gateway-waf-how-it-works"></a>

ウェブ ACL をゲートウェイに関連付けると、次のリクエストフローが発生します。

1. クライアントはゲートウェイエンドポイントにリクエストを送信します。

1.  AWS WAF は、関連するウェブ ACL のルールに対してリクエストを評価します。

1. リクエストが許可されている場合、ゲートウェイはそれを適切なターゲットにルーティングします。

1. リクエストがブロックされている場合、ゲートウェイはリクエストを転送せずにクライアントにエラーを返します。

 AWS WAF は、すべてのインバウンドリクエストをインラインで評価します。ウェブ ACL がゲートウェイに関連付けられていない場合、オーバーヘッドはゼロになり、 AWS WAF 評価は行われません。

## 前提条件
<a name="gateway-waf-prerequisites"></a>

ウェブ ACL をゲートウェイに関連付ける前に、次の要件を満たしていることを確認してください。
+  AWS WAF ウェブ ACL は、ゲートウェイと同じ AWS リージョンに存在する必要があります。
+ リージョンウェブ ACL を使用する必要があります。CloudFront (グローバル) ウェブ ACLs はサポートされていません。
+ ゲートウェイは `READY`状態である必要があります。
+ IAM ID には、次のアクセス許可が必要です。
  +  `wafv2:AssociateWebACL` 
  +  `wafv2:DisassociateWebACL` 
  +  `wafv2:GetWebACLForResource` 
  +  `wafv2:ListResourcesForWebACL` 
  +  `bedrock-agentcore:GatewayAssociateWebACL` 
  +  `bedrock-agentcore:GatewayDisassociateWebACL` 
  +  `bedrock-agentcore:GatewayGetWebACLForResource` 
  +  `bedrock-agentcore:GatewayListResourcesForWebACL` 

## ウェブ ACL とゲートウェイの関連付け
<a name="gateway-waf-associate"></a>

 AWS WAF コンソールまたは CLI を使用して、ウェブ ACL AWS をゲートウェイに関連付けることができます。1 つのゲートウェイは、最大 1 つのウェブ ACL を持つことができます。ただし、1 つのウェブ ACL を複数のゲートウェイに関連付けることができます。ゲートウェイに関連付けられたウェブ ACL を変更するには、新しいウェブ ACL を関連付けます。新しい関連付けは、既存の関連付けを置き換えます。

CLI を使用してウェブ ACL AWS をゲートウェイに関連付けるには、次のコマンドを実行します。

```
aws wafv2 associate-web-acl \
    --web-acl-arn arn:aws:wafv2:us-east-1:123456789012:regional/webacl/my-web-acl/a1b2c3d4-5678-90ab-cdef-example11111 \
    --resource-arn arn:aws:bedrock-agentcore:us-east-1:123456789012:gateway/my-gateway-id
```

ARN 値をウェブ ACL ARN とゲートウェイ ARN に置き換えます。

## ゲートウェイからウェブ ACL の関連付けを解除する
<a name="gateway-waf-disassociate"></a>

ゲートウェイから AWS WAF 保護を削除するには、ウェブ ACL の関連付けを解除します。ゲートウェイを削除する前に、ゲートウェイからウェブ ACL の関連付けを解除する必要があります。

CLI を使用してゲートウェイからウェブ ACL AWS の関連付けを解除するには、次のコマンドを実行します。

```
aws wafv2 disassociate-web-acl \
    --resource-arn arn:aws:bedrock-agentcore:us-east-1:123456789012:gateway/my-gateway-id
```

ARN 値をゲートウェイ ARN に置き換えます。

## AWS WAF 失敗モードの設定
<a name="gateway-waf-failure-mode"></a>

 AWS WAF に到達できない場合、またはリクエストの評価中にタイムアウトした場合、ゲートウェイは設定された障害モードを使用してリクエストをブロックするか許可するかを決定します。

 `FAIL_CLOSE`   
ゲートウェイはリクエストをブロックします。これがデフォルトの動作です。

 `FAIL_OPEN`   
ゲートウェイは、 AWS WAF 評価なしでターゲットへのリクエストを許可します。

失敗モードを設定するには、 `wafConfiguration`パラメータで `UpdateGateway` API を使用します。

```
aws bedrock-agentcore-control update-gateway \
    --gateway-identifier my-gateway-id \
    --name my-gateway \
    --role-arn arn:aws:iam::123456789012:role/my-gateway-service-role \
    --authorizer-type CUSTOM_JWT \
    --authorizer-configuration '{
      "customJWTAuthorizer": {
        "discoveryUrl": "https://cognito-idp.us-east-1.amazonaws.com/my-user-pool/.well-known/openid-configuration",
        "allowedClients": ["clientId"]
      }
    }' \
    --waf-configuration '{"failureMode": "FAIL_OPEN"}'
```

**重要**  
デフォルトの障害モードは で`FAIL_CLOSE`、セキュリティファーストのアプローチを提供します。ワークロードのセキュリティよりも可用性が重要である`FAIL_OPEN`場合にのみ使用します。

## AWS WAF レスポンスの処理
<a name="gateway-waf-response-handling"></a>

 AWS WAF がリクエストをブロックする場合、エラーレスポンスはターゲットタイプによって異なります。

MCP ターゲット  
ブロックされたリクエストは、コード `-32002`とメッセージ を含む JSON-RPC エラーを返します`"Authorization error - Request forbidden"`。

HTTP およびパススルーターゲット  
ブロックされたリクエストは HTTP 403 を返します。

 AWS WAF が `FAIL_CLOSE` でタイムアウトした場合、ゲートウェイはブロックされたリクエストと同じエラーを返します。 AWS WAF が 5xx エラーを返した場合、MCP ターゲットはコード `-32603`とメッセージ を含む JSON-RPC エラーを受け取ります`"Internal error - Server error"`。

## AWS WAF アクティビティのモニタリング
<a name="gateway-waf-monitoring"></a>

Amazon CloudWatch メトリクスを使用して、ゲートウェイの AWS WAF アクティビティをモニタリングできます。

`AWS/Bedrock-AgentCore` 名前空間では、次のメトリクスを使用できます。


| メトリクス | 説明 | 
| --- | --- | 
|  `WafBlocks`  | デフォルトブロックレスポンスとカスタムブロックレスポンスの両方を含む、 AWS WAF によってブロックされたリクエストの数。 | 
|  `WafFailOpens`  |  AWS WAF に到達できず、ゲートウェイの障害モードが であるため`FAIL_OPEN`、リクエストは AWS WAF 評価なしでターゲットに転送されました。ゼロ以外の値が持続している場合は、ゲートウェイが AWS WAF 検査なしでトラフィックを経由させていることを示します。 | 
|  `WafFailCloses`  |  AWS WAF に到達できず、ゲートウェイの障害モードが であるため`FAIL_CLOSE`、リクエストが拒否されたリクエストの数。ゼロ以外の値が持続している場合は、WAF AWS に到達できないためにゲートウェイがトラフィックを削除していることを示します。 | 

ブロックされたリクエストに関するルールレベルの詳細を取得するには、WAF AWS ログ記録を使用します。ゲートウェイログのリクエスト ID を AWS WAF ログに関連付けることができます。

## クォータと制限事項
<a name="gateway-waf-quotas"></a>

ゲートウェイとの AWS WAF 統合には、次のクォータと制限が適用されます。
+ アカウントあたり最大 100 個のウェブ ACL 関連付け。
+  AWS WAF の関連付けはゲートウェイレベルのみで、ターゲットごとではありません。異なるターゲットに異なるルールを適用するには、URI パスベースの AWS WAF ルールを使用します。
+  AWS WAF 統合は、WAF と AgentCore Gateway AWS の両方が利用可能な AWS リージョンで使用できます。

## ベストプラクティス
<a name="gateway-waf-best-practices"></a>

ゲートウェイで AWS WAF を使用する場合は、次のプラクティスをお勧めします。
+ 既知の脅威に対する一般的な保護には、 AWS マネージドルールのルールグループを使用します。
+ ボリューム攻撃から保護するためのレートベースのルールを実装します。
+ IP ベースのルールを使用して、既知のソースを許可リストまたは拒否リストに登録します。
+ に切り替える前に AWS WAF ルールを `COUNT` モードでテスト`BLOCK`して、トラフィックへの影響を理解します。
+ `WafBlocks`、、および `WafFailCloses`メトリクスをモニタリングしてルールを調整し`WafFailOpens`、問題を特定します。
+ セキュリティ重視のワークロードには、デフォルト`FAIL_CLOSE`モードを使用します。可用性が重要で、他のセキュリティコントロールが設定されている`FAIL_OPEN`場合にのみ使用します。