使用以下方法保护您的网关 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 与网关关联时,会出现以下请求流:
-
客户端向您的网关终端节点发送请求。
-
AWS WAF 会根据关联的 Web ACL 中的规则对请求进行评估。
-
如果请求被允许,网关会将其路由到相应的目标。
-
如果请求被阻止,网关会在不转发请求的情况下向客户端返回错误。
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命名空间中提供了以下指标:
| 指标 | 说明 |
|---|---|
|
|
被 AWS WAF 屏蔽的请求数,包括默认和自定义屏蔽响应。 |
|
|
无法访问 AWS WAF 且网关的故障模式为 |
|
|
无法访问 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仅在可用性至关重要且您有其他安全控制措施时使用。