

# 使用以下方法保护您的网关 AWS WAF
<a name="gateway-waf"></a>

您可以将 AWS WAF 与 Amazon Bedrock AgentCore Gateway 配合使用，以保护您的网关免受网络漏洞、机器人流量和容量攻击。 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 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 与您的网关关联
<a name="gateway-waf-associate"></a>

您可以使用 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 与网关的关联
<a name="gateway-waf-disassociate"></a>

要从网关中移除 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 故障模式
<a name="gateway-waf-failure-mode"></a>

如果 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 响应处理
<a name="gateway-waf-response-handling"></a>

当 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 活动
<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 网关的 AWS 区域。

## 最佳实践
<a name="gateway-waf-best-practices"></a>

在网关上使用 AWS WAF 时，我们建议您采取以下做法：
+ 使用 AWS 托管规则规则组来获得针对已知威胁的常见防护。
+ 实施基于速率的规则以防范容量攻击。
+ 使用 IP-based 规则将已知来源列入许可名单或拒绝名单。
+ 在切换到`COUNT`模式之前，先在模式下测试 AWS WAF 规则，`BLOCK`以了解其对流量的影响。
+ 监控`WafBlocks``WafFailOpens`、和`WafFailCloses`指标以调整规则并发现问题。
+ 对安全敏感型工作负载使用默认`FAIL_CLOSE`模式。`FAIL_OPEN`仅在可用性至关重要且您有其他安全控制措施时使用。