

# 使用 AWS WAF 保護您的閘道
<a name="gateway-waf"></a>

您可以搭配 Amazon Bedrock AgentCore Gateway 使用 AWS WAF 來保護閘道免受 Web 入侵、機器人流量和磁碟區攻擊。 AWS WAF 提供內嵌安全層，可在所有傳入請求到達目標之前對其進行評估。

當您將 AWS WAF Web 存取控制清單 (Web ACL) 與閘道建立關聯時， AWS WAF 會檢查每個傳入請求，並套用您設定的規則。符合封鎖規則的請求會在到達任何目標之前遭到拒絕。您可以將閘道層級的 Web ACL 與每個閘道的一個 Web ACL 建立關聯。

## AWS WAF 如何與您的閘道搭配使用
<a name="gateway-waf-how-it-works"></a>

當您將 Web ACL 與閘道建立關聯時，會發生下列請求流程：

1. 用戶端傳送請求到您的閘道端點。

1.  AWS WAF 會根據相關聯 Web ACL 中的規則評估請求。

1. 如果允許請求，閘道會將其路由到適當的目標。

1. 如果請求遭到封鎖，閘道會將錯誤傳回給用戶端，而不轉送請求。

 AWS WAF 會評估內嵌的每個傳入請求。當沒有 Web ACL 與您的閘道相關聯時，不會產生額外負荷，也不會發生 AWS WAF 評估。

## 先決條件
<a name="gateway-waf-prerequisites"></a>

將 Web ACL 與閘道建立關聯之前，請確定您符合下列要求：
+ 您的 AWS WAF Web ACL 必須與閘道位於相同的 AWS 區域中。
+ 您必須使用區域 Web ACL。不支援 CloudFront （全域） Web ACLs。
+ 您的閘道必須處於 `READY` 狀態。
+ 您的 IAM 身分必須具有下列許可：
  +  `wafv2:AssociateWebACL` 
  +  `wafv2:DisassociateWebACL` 
  +  `wafv2:GetWebACLForResource` 
  +  `wafv2:ListResourcesForWebACL` 
  +  `bedrock-agentcore:GatewayAssociateWebACL` 
  +  `bedrock-agentcore:GatewayDisassociateWebACL` 
  +  `bedrock-agentcore:GatewayGetWebACLForResource` 
  +  `bedrock-agentcore:GatewayListResourcesForWebACL` 

## 將 Web ACL 與您的閘道建立關聯
<a name="gateway-waf-associate"></a>

您可以使用 AWS WAF 主控台或 CLI 將 Web ACL AWS 與閘道建立關聯。一個閘道最多可以有一個 Web ACL。不過，一個 Web ACL 可以與多個閘道建立關聯。若要變更與閘道相關聯的 Web ACL，請關聯新的 Web ACL。新的關聯會取代現有的關聯。

若要使用 CLI 將 Web 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 值取代為您的 Web ACL ARN 和閘道 ARN。

## 取消 Web ACL 與閘道的關聯
<a name="gateway-waf-disassociate"></a>

若要從閘道移除 AWS WAF 保護，請取消 Web ACL 的關聯。您必須先取消任何 Web ACL 與閘道的關聯，才能刪除閘道。

若要使用 AWS CLI 取消 Web ACL 與閘道的關聯，請執行下列命令：

```
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 評估。

若要設定失敗模式，請使用 `UpdateGateway` API 搭配 `wafConfiguration` 參數：

```
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 目標  
封鎖的請求會傳回 JSON-RPC 錯誤，其中包含程式碼 `-32002`和訊息 `"Authorization error - Request forbidden"`。

HTTP 和傳遞目標  
封鎖的請求會傳回 HTTP 403。

如果已`FAIL_CLOSE`設定 AWS WAF 逾時，閘道會傳回與封鎖請求相同的錯誤。如果 AWS WAF 傳回 5xx 錯誤，MCP 目標會收到 JSON-RPC 錯誤，其中包含程式碼`-32603`和訊息 `"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`，因此請求遭拒。持續的非零值表示您的閘道由於 AWS WAF 無法連線而捨棄流量。 | 

若要取得有關封鎖請求的規則層級詳細資訊，請使用 AWS WAF 記錄。您可以將閘道日誌中的請求 ID 與 AWS WAF 日誌建立關聯。

## 限制和配額
<a name="gateway-waf-quotas"></a>

下列配額和限制適用於 AWS WAF 與您的閘道整合：
+ 每個帳戶最多 100 個 Web ACL 關聯。
+  AWS WAF 關聯僅位於閘道層級，而非每個目標。若要將不同的規則套用至不同的目標，請使用 URI 路徑型 AWS WAF 規則。
+  AWS WAF 整合可在同時使用 AWS WAF 和 AgentCore Gateway 的 AWS 區域中使用。

## 最佳實務
<a name="gateway-waf-best-practices"></a>

將 AWS WAF 與閘道搭配使用時，我們建議您採用下列實務：
+ 使用 AWS 受管規則規則群組，針對已知威脅提供常見保護。
+ 實作以速率為基礎的規則，以防止容積攻擊。
+ 使用 IP 型規則來允許列出或拒絕列出已知來源。
+ 在切換至 之前，在 `COUNT` 模式下測試 AWS WAF 規則`BLOCK`，以了解對流量的影響。
+ 監控 `WafBlocks`、 `WafFailOpens`和 `WafFailCloses`指標，以調整您的規則並識別問題。
+ 針對安全敏感工作負載使用預設`FAIL_CLOSE`模式。`FAIL_OPEN` 僅在可用性至關重要且您擁有其他安全控制時，才使用 。