如何将 AWS WAF 与应用程序 ELB 结合使用

2024-04-01

我需要对 AWS 上托管的 Web 应用程序使用 AWS WAF,以为其提供额外的基于规则的安全性。我找不到任何方法直接将 WAF 与 ELB 结合使用,并且 WAF 需要 Cloudfront 添加 WEB ACL 以根据规则阻止操作。 因此,我将我的应用程序 ELB CNAME 添加到了 cloudfront,只有域名、具有 IP 阻止规则的 WebACL 和 HTTPS 协议已使用 cloudfront 进行了更新。其余全部保留默认值。添加带有 ELB CNAME 的 WAF 和 Cloudfront 后,我​​尝试从 WAF 中的阻止 ip 规则中的 IP 地址之一访问 CNAME ELB。我仍然可以从该 IP 地址访问我的 Web 应用程序。另外,我尝试检查创建的 Web ACL 的 cloudwatch 指标,发现它甚至没有被命中。 首先,有什么好的方法可以实现我正在做的事情,其次,是否有一种特定的方法可以在cloudfront上添加ELB CNAME。

感谢致敬, 杰伊


服务更新:下面的原始扩展答案在编写时是正确的,但现在主要适用于经典 ELB,因为 - 截至 2016 年 12 月 7 日 - 应用程序负载均衡器 (elbv2) 现在可以直接与 Web 应用程序集成防火墙(亚马逊 WAF)。

自 [2016-12-07] 起 AWS WAF(Web 应用程序防火墙)可在 Application Load Balancer (ALB) 上使用。您现在可以直接在 VPC 中的 Application Load Balancer(内部和外部)上使用 AWS WAF,以保护您的网站和 Web 服务。此次发布后,客户现在可以在 Amazon CloudFront 和 Application Load Balancer 上使用 AWS WAF。

https://aws.amazon.com/about-aws/whats-new/2016/12/AWS-WAF-now-available-on-Application-Load-Balancer/ https://aws.amazon.com/about-aws/whats-new/2016/12/AWS-WAF-now-available-on-Application-Load-Balancer/


看来您确实需要澄清这些部分如何组合在一起。

假设您想要保护的实际网站是app.example.com.

听起来好像您有一个 CNAME elb.example.com 指向 ELB 的分配主机名,类似于 example-123456789.us-west-2.elb.amazonaws.com。如果您访问这些主机名中的任何一个,您将直接连接到 ELB - 无论 CloudFront 或 WAF 中的配置如何。这些机器仍然可以通过互联网访问。

这里的技巧是将流量路由到 CloudFront,在那里可以通过 WAF 进行防火墙,这意味着必须发生一些额外的事情:首先,这意味着需要额外的主机名,因此您在 DNS 中配置 app.example.com作为指向分配给您的分配的 dxxxexample.cloudfront.net 主机名的 CNAME(或别名,如果您使用的是 Route 53)。

您还可以使用分配的 CloudFront 主机名直接访问 SITR 进行测试。访问this来自被阻止 IP 地址的端点现在确实应该导致请求被拒绝。

因此,CloudFront 端点是您需要发送流量的地方,而不是直接发送到 ELB。

这不会让你的 ELB 仍然暴露在外吗?

是的,确实如此……所以下一步就是堵住这个漏洞。

如果您使用自定义源,则可以使用自定义标头来防止用户绕过 CloudFront 并直接从您的源请求内容。

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/forward-custom-headers.html http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/forward-custom-headers.html

这里的想法是,您将建立一个只有您的服务器和 CloudFront 知道的秘密值。 CloudFront 会在每个请求的标头中发送此值,并且您的服务器将要求存在该值,否则它们会表现得愚蠢并抛出错误 - 例如 503 Service Unavailable 或 403 Forbidden 甚至 404 Not Found。

因此,您可以编写一个标头名称,例如X-My-CloudFront-Secret-String和一个随机字符串,比如o+mJeNieamgKKS0Uu0A1Fqk7sOqa6Mlc3并将其配置为 CloudFront 中的自定义源标头。此处显示的值是任意示例——可以是任何值。

然后配置您的应用程序 Web 服务器以拒绝任何不存在此标头和匹配值的请求 - 因为这是您知道请求来自特定 CloudFront 分配的方式。任何其他内容(除了 ELB 运行状况检查,您需要对其进行例外处理)都不是来自您的 CloudFront 发行版,因此根据定义未经授权,因此您的服务器需要以错误的方式拒绝它,但无需在错误信息。

此标头及其预期值仍然是秘密,因为 CloudFront 不会将其发送回浏览器 - 它仅在 CloudFront 发送到 ELB 的请求中向前发送。

请注意,您应该为您的 ELB(针对 elb.example.com 主机名)获取 SSL 证书,并将 CloudFront 配置为使用 HTTPS 将所有请求转发到您的 ELB。 CloudFront 和 ELB 之间的流量被拦截的可能性很低,但您应该考虑实施这种保护。

您可以选择also通过仅允许 ELB 安全组中的 CloudFront IP 地址范围来阻止所有不是来自 CloudFront 的请求,从而减少(但不是消除)大多数未经授权的访问 - CloudFront 地址范围是有记录的 http://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html(在 JSON 中搜索指定为的块CLOUDFRONT,并仅允许 ELB 安全组中的这些),但请注意,如果您这样做,您仍然需要设置上面讨论的自定义源标头配置,因为如果您仅在 IP 级别进行阻止,那么从技术上讲您仍然允许任何人的用于访问您的 ELB 的 CloudFront 分配。您的 CloudFront 分配与其他 CloudFront 分配共享池中的 IP 地址,因此请求从 CloudFront 到达这一事实并不能充分保证它来自yourCloudFront 分发。另请注意,您需要注册更改通知,以便在将新地址范围添加到 CloudFront 时,您会知道将它们添加到您的安全组中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 AWS WAF 与应用程序 ELB 结合使用 的相关文章

随机推荐

  • 在 Android 上的 PhoneGap 3.3 中打开系统浏览器中的链接

    我一直在寻找答案 但似乎我找到的大部分内容都是针对旧版本的 PhoneGap 这是我的链接代码 a href My Account a 这段代码完全没有任何作用 我点击链接但没有任何反应 是的 我在 HTML 页面上添加了phonegap
  • 如何在 Deno 中下载大文件?

    我试图下载一个 10GB 的文件 但只有 4GB 保存到磁盘上 而且内存增长了很多 const res await fetch https speed hetzner de 10GB bin const file await Deno op
  • Docker CentOS 映像不会自动启动 httpd

    我正在尝试使用 Apache 和 PHP 程序运行一个简单的 Docker 映像 如果我跑的话效果很好 docker run t i p 80 80 my httpd bin bash 然后手动启动Apache service httpd
  • curl: (60) SSL 证书问题:无法获取本地颁发者证书

    root sclrdev home sclr certs FreshCerts curl ftp ssl verbose ftp abc u trup trup cacert etc ssl certs ca certificates cr
  • 从交替的一侧循环列表

    给定一个列表 a 0 1 2 3 4 5 6 7 8 9 我怎样才能得到 b 0 9 1 8 2 7 3 6 4 5 也就是说 产生一个新列表 其中每个连续元素交替地从原始列表的两侧取出 gt gt gt a i 2 if i 2 else
  • 有没有办法让 R 脚本在收到错误消息后继续执行而不是停止执行?

    我目前正在为学校的一个项目运行方差分析 该项目有大量可能的运行 1400 次左右 但其中一些无法在 R 中运行方差分析 我编写了一个脚本来运行所有方差分析 但其中一些它们不会运行 并且 Rout 文件给了我 错误于contrasts lt
  • (设计支持库)CollapsingToolbarLayout - 工具栏未固定在折叠上

    我在将设计支持库集成到我的应用程序中时遇到问题 由于某种原因 工具栏会随 CollapsingToolbarLayout 一起折叠 并且不会像 Chris Banes 的 Cheesesquare 示例中那样将其固定 https githu
  • 将带有参数的视图组件渲染到名为outlet ember.js 中

    我的应用程序模板中有 2 个命名网点 slider area and pre footer 有没有一种方法可以传递带有参数的视图组件 如main slider索引模板中显示的组件是否连接到命名出口 所以我需要通过 main slider s
  • Xamarin iOS - HomeKit 集成

    我正在使用 Xamarin iOS 开发一个应用程序 我需要添加使用来自内部 API 的地址向 HomeKit 添加附件的可能性 基本上我使用 Web 请求检索设备的地址 一旦我有了配件的 setupCode 我就会尝试使用 HomeKit
  • 如何在 SWI-Prolog 中创建事实?

    我只想创建类似的东西 like x y 我已经尝试了很长时间了 真的很沮丧 谁能告诉我该怎么做 我假设您正在交互地使用 swi 并尝试输入事实会给您一个如下错误 1 like x y ERROR toplevel Undefined pro
  • ini_set、set_time_limit、(max_execution_time) - 不起作用

    If I do set time limit 50 or ini set max execution time 50 然后当我回声时ini get max execution time 在我的本地主机上我得到50 但是当我在另一台服务器上执
  • 保持 LDAP 会话

    在 PHP 中 假设我在第 1 页有一个 LDAP 连接 ldapconn ldap connect ldapserver if ldapconn binding to ldap server ldapbind ldap bind ldap
  • 如何在不加载整个文件的情况下向 CSV 添加标题行?

    我有一个console application我想添加一个header row到 CSV 文件 而不将数据加载到应用程序中 我需要什么代码来执行此操作 并且仅检查第一行以查看标题是否已存在 如果不存在则不添加标题行 我尝试了几种方法来执行此
  • Excel VBA 类型不匹配将范围传递给数组时出错[重复]

    这个问题在这里已经有答案了 我正在尝试检索工作表中单元格数组的值 存储为数组而不是简单单元格 但由于某种原因不断收到运行时错误 13 类型不匹配 我读过有关类似问题的帖子 但其中许多似乎与数组类型错误 即不是变体类型 或静态大小有关 这是调
  • 如何指定 xsi:type zeep python

    我使用 python 的 zeep SOAP 客户端 尝试将一些数据获取到某些 wsdl address 我现在有以下内容 ambCase data1 value1 data2 value2 client zeep Client wsdl
  • 如何访问Hadoop HDFS中的文件?

    我的 Hadoop HDFS 中有一个 jar 文件 包含我想要修改的 Java 项目 我想在 Eclipse 中打开它 当我打字时hdfs dfs ls user 我可以看到 jar 文件在那里 但是 当我打开 Eclipse 并尝试导入
  • 如何创建一个不会重新创建具有相同输入参数的对象的类

    我正在尝试创建一个不会重新创建具有相同输入参数的对象的类 当我尝试使用与创建已存在对象相同的参数实例化一个类时 我只希望我的新类返回指向已创建 昂贵创建的 对象的指针 这是我到目前为止所尝试过的 class myobject0 object
  • Laravel 4 无法运行整个 RAW 查询

    我想使用 laravel 的 DB 类来执行 mysql 查询 但 Laravel 提供的功能都不起作用 这些都不起作用 DB statement DB select DB raw DB update DB select DB raw 这是
  • 转义字符串以在 XML 中使用

    我正在使用Python的xml dom minidom创建 XML 文档 逻辑结构 gt XML 字符串 而不是相反 如何让它转义我提供的字符串 这样它们就不会弄乱 XML 像这样的东西吗 gt gt gt from xml sax sax
  • 如何将 AWS WAF 与应用程序 ELB 结合使用

    我需要对 AWS 上托管的 Web 应用程序使用 AWS WAF 以为其提供额外的基于规则的安全性 我找不到任何方法直接将 WAF 与 ELB 结合使用 并且 WAF 需要 Cloudfront 添加 WEB ACL 以根据规则阻止操作 因