View a markdown version of this page

使用 AWS WAF 保護您的閘道 - Amazon Bedrock AgentCore

使用 AWS WAF 保護您的閘道

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

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

AWS WAF 如何與您的閘道搭配使用

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

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

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

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

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

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

先決條件

將 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 與您的閘道建立關聯

您可以使用 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 與閘道的關聯

若要從閘道移除 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 失敗模式

如果 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 回應處理

當 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 活動

您可以使用 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 日誌建立關聯。

限制和配額

下列配額和限制適用於 AWS WAF 與您的閘道整合:

  • 每個帳戶最多 100 個 Web ACL 關聯。

  • AWS WAF 關聯僅位於閘道層級,而非每個目標。若要將不同的規則套用至不同的目標,請使用 URI 路徑型 AWS WAF 規則。

  • AWS WAF 整合可在同時使用 AWS WAF 和 AgentCore Gateway 的 AWS 區域中使用。

最佳實務

將 AWS WAF 與閘道搭配使用時,我們建議您採用下列實務:

  • 使用 AWS 受管規則規則群組,針對已知威脅提供常見保護。

  • 實作以速率為基礎的規則,以防止容積攻擊。

  • 使用 IP 型規則來允許列出或拒絕列出已知來源。

  • 在切換至 之前,在 COUNT 模式下測試 AWS WAF 規則BLOCK,以了解對流量的影響。

  • 監控 WafBlocksWafFailOpensWafFailCloses指標,以調整您的規則並識別問題。

  • 針對安全敏感工作負載使用預設FAIL_CLOSE模式。FAIL_OPEN 僅在可用性至關重要且您擁有其他安全控制時,才使用 。