我想使用 AWS WAF 限制用户直接访问应用程序负载均衡器(ALB),并仅允许通过 Amazon CloudFront 进行访问。如何使用 AWS WAF 做到这一点?
解决方法
要使用 AWS WAF 限制流向 ALB 的直接流量,并仅允许通过 CloudFront 的流量,请执行以下操作:
- 将 CloudFront 配置为在 CloudFront 发送给 ALB 的请求中添加带有密钥值的自定义 HTTP 标头。
- 在与 ALB 关联的 AWS WAF Web ACL 中创建规则,以阻止不包含自定义 HTTP 标头密钥值的请求。
将 CloudFront 配置为在 CloudFront 发送给 ALB 的请求中添加带有密钥值的自定义 HTTP 标头
- 打开 Amazon CloudFront 控制台。
- 在导航窗格中,选择 Distributions(分配)。
- 选择分配给您的 ID。
- 选择 Origins(来源)。
- 选择您的 ALB 来源,然后选择 Edit(编辑)。
**注意:**如果您没有 ALB 来源,请参阅创建分配或更新分配。
- 对于 Add custom header(添加自定义标头),添加 Header name(标头名称)和 Value(值)。例如,Header name(标头名称)是“自定义标头”,Value(值)为“随机 12345”。
重要信息:考虑将 Header name(标头名称)和 Value(值)作为安全凭证,例如用户名和密码。
- 选择 Save changes(保存更改)。
在与 ALB 关联的 AWS WAF Web ACL 中创建规则,以阻止不包含自定义 HTTP 标头密钥值的请求。
注意:如果您没有与 ALB 关联的现有 Web ACL,请按照创建 AWS WAF Web ACL 中的步骤进行操作。如果您有与 ALB 关联的现有 Web ACL,则继续创建规则。
创建 AWS WAF Web ACL
- 打开 AWS WAF 控制台。
- 在导航窗格中的 AWS WAF 下,选择 Web ACL。
- 对于 Region(区域),请选择您的 ALB 所在的 AWS 区域。
- 选择 Create web ACL(创建 Web ACL),然后输入 Name(名称)。
- 对于 Associated AWS resources(关联的 AWS 资源),关联您的 ALB,然后选择 Next(下一步)。
- 对于 Default web ACL action for requests that don't match any rules(不匹配任何规则的请求的默认 Web ACL 操作),请选择 Allow(允许),然后选择 Next(下一步)。
- 对于 Request sampling options(请求采样选项),选择 Enable sampled requests(启用采样请求),然后选择 Next(下一步)。
- 查看 Web ACL 配置。如果它符合您的规格,请选择 Create web ACL(创建 Web ACL)。
创建规则
- 打开 AWS WAF 控制台。
- 在导航窗格中的 AWS WAF 下,选择 Web ACL。
- 对于 Region(区域),请选择您的 ALB 所在的 AWS 区域。
- 选择您已将 ALB 关联到的 Web ACL。
- 选择 Rules(规则),然后选择 Add Rules(添加规则)、Add my own rules and rule groups(添加我自己的规则和规则组)。
- 对于 Name(名称),输入 rule name(规则名称),然后选择 Regular Rule(常规规则)。
- 对于 If a request(如果请求),选择 doesn’t match the statement(NOT)(与语句不匹配(NOT))。
- 在 Statement 1(语句 1)中:
对于 Inspect(检查),选择 Single Header(单标头)。
对于 Header field name(标头字段名称),输入在 CloudFront 中创建的 Header name(标头名称)的名称。例如,“自定义标头”。
对于 Match type(匹配类型),选择 Exactly matches string(完全匹配字符串)。
对于 String to match(要匹配的字符串),请输入在 CloudFront 中创建的 Value(值)。例如,“随机 12345”。
对于 Text transformation(文本转换),选择 None(无)。
- 对于 Action(操作),选择 Block(阻止)。
- 选择 Save rule(保存规则)。
- 对于 Set rule priority(设置规则优先级),如果您有多个规则,将此规则设置为最高优先级。
- 选择 Save(保存)。
相关信息
将自定义标头添加到源请求
AWS WAF 规则