View a markdown version of this page

使用以下方法保护您的网关 AWS WAF - 亚马逊基岩 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 区域中。

  • 您必须使用区域性网页 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 目标

被屏蔽的请求会返回 JSON-RPC 错误的代码-32002和消息"Authorization error - Request forbidden"。

HTTP 和直通目标

被阻止的请求返回 HTTP 403。

如果 AWS WAF 在FAIL_CLOSE配置后超时,则网关会返回与被阻止的请求相同的错误。如果 AWS WAF 返回 5xx 错误,MCP 目标将收到包含代码-32603和 JSON-RPC 消息的错误。"Internal error - Server error"

监控 AWS WAF 活动

您可以使用亚马逊 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仅在可用性至关重要且有其他安全控制措施时使用。