View a markdown version of this page

使用以下方法保护您的网关 AWS WAF - Amazon Bedrock AgentCore

使用以下方法保护您的网关 AWS WAF

您可以将 AWS WAF 与 Amazon Bedrock AgentCore Gateway 配合使用,以保护您的网关免受网络漏洞、机器人流量和容量攻击。 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 ACL。

  • 您的网关必须处于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 控制台或 CL AWS I 将 Web ACL 与您的网关关联。一个网关最多可以有一个 Web ACL。但是,一个 Web ACL 可以与多个网关关联。要更改与您的网关关联的 Web ACL,请关联一个新的 Web ACL。新的关联取代了现有的关联。

要使用 CL AWS I 将 Web ACL 与您的网关关联,请运行以下命令:

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 与网关的关联,然后才能删除网关。

要使用 CL AWS I 解除 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 评估的情况下将请求传送到目标。

要配置故障模式,请使用带有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 响应处理

当 AWS WAF 阻止请求时,错误响应取决于您的目标类型:

MCP 目标

被阻止的请求会返回包含代码-32002和消息的 JSON-RPC 错误"Authorization error - Request forbidden"

HTTP 和直通目标

被阻止的请求会返回 HTTP 403。

如果FAIL_CLOSE配置了 AWS WAF 超时,网关会返回与被阻止请求相同的错误。如果 AWS WAF 返回 5xx 错误,则 MCP 目标会收到包含代码-32603和 JSON-RPC 消息的错误。"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 网关的 AWS 区域。

最佳实践

在网关上使用 AWS WAF 时,我们建议您采取以下做法:

  • 使用 AWS 托管规则规则组来获得针对已知威胁的常见防护。

  • 实施基于速率的规则以防范容量攻击。

  • 使用 IP-based 规则将已知来源列入许可名单或拒绝名单。

  • 在切换到COUNT模式之前,先在模式下测试 AWS WAF 规则,BLOCK以了解其对流量的影响。

  • 监控WafBlocksWafFailOpens、和WafFailCloses指标以调整规则并发现问题。

  • 对安全敏感型工作负载使用默认FAIL_CLOSE模式。FAIL_OPEN仅在可用性至关重要且您有其他安全控制措施时使用。