我需要将AWS WAF用于托管在AWS上的web应用程序,以便为其提供附加的基于规则的安全性。我找不到任何方法直接使用WAF与ELB和WAF需要Cloudfront添加WEB来阻止基于规则的操作。因此,我将我的应用程序ELB添加到cloudfront中,只有域名、带有IP块规则的WebACL和HTTPS协议使用cloudfront进行更新。Rest所有都是默认的。一旦添加了WAF和Cloudfront与ELB,我就尝试从WAF中块ip规则中的一个ip地址访问CNAME。我仍然能够从那个IP地址访问我的web应用程序。此外,我试图检查Web创建的cloudwatch指标,我发现它甚至没有被击中。第一,有什么好的方法来实现我正在做的事情吗?第二,是否有一种特殊的方式在cloudfront上增加ELB CNAME。
谢谢和问候,杰
发布于 2016-11-18 00:30:45
服务更新:在编写时,下面的原始、扩展的答案是正确的,但现在主要适用于经典ELB,因为--截至2016-12-07 --应用程序负载平衡器(elbv2)现在可以直接与(Amazon )集成。
从2016-12-07 AWS WAF (Web应用防火墙)可在应用程序负载均衡器(ALB)。现在,您可以在VPC中的应用程序负载平衡器(内部和外部)上直接使用AWS WAF,以保护您的网站和web服务。有了这个启动,客户现在可以在亚马逊的CloudFront和应用程序负载均衡器上使用AWS。 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进行防火墙,这意味着必须发生一些额外的事情:首先,这意味着需要一个额外的主机名,因此您在app.example.com中配置为CNAME (或者Alias,如果您使用的是路由53),指向分配给您的发行版的dxxxexample.cloudfront.net主机名。
您还可以使用指定的CloudFront主机名直接访问站点以进行测试。现在,从阻塞的IP地址访问此端点应该会导致请求被拒绝。
因此,CloudFront端点是您需要发送流量的地方--而不是直接发送到ELB。
那不是让你的ELB还暴露在外面吗?
是的,确实.下一步就是堵住那个洞。
如果使用的是自定义源,则可以使用自定义标头来防止用户绕过CloudFront并直接从源请求内容。 http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/forward-custom-headers.html
这里的想法是,您将建立一个只有服务器和CloudFront才知道的秘密值。CloudFront将与每个请求一起在标头中发送,您的服务器将要求该值存在,否则它们会装聋作哑并抛出一个错误--例如503服务不可用或403禁止,甚至404未找到。
因此,您可以创建一个标题名称,如X-My-CloudFront-Secret-String和一个随机字符串,如o+mJeNieamgKKS0Uu0A1Fqk7sOqa6Mlc3,并将其配置为CloudFront中的自定义源标头。这里显示的值是任意的例子--这可以是任何东西。
然后将应用程序web服务器配置为拒绝不存在此头和匹配值的任何请求--因为这是您知道请求来自特定CloudFront发行版的原因。除了您需要做异常的ELB健康检查之外,其他任何东西都不是来自您的CloudFront发行版,因此根据定义是未经授权的,因此您的服务器需要用错误来拒绝它,但是不需要在错误消息中解释太多。
这个标头和它的期望值仍然是一个秘密,因为它不会被CloudFront发送回浏览器--它只在CloudFront发送给你的电子束的请求中按前向发送。
请注意,您应该为您的ELB (对于elb.example.com主机名)获得一个SSL证书,并配置CloudFront来使用HTTPS将所有请求转发给您的ELB。CloudFront和ELB之间截获通信量的可能性很低,但这是一种您应该考虑的保护措施。
您还可以通过只允许ELB安全组中的CloudFront IP地址范围来减少(但不是消除)大多数未经授权的访问,从而阻止来自CloudFront的所有请求-- CloudFront地址范围是记录在案 (搜索指定为CLOUDFRONT的JSON块,并仅允许在ELB安全组中使用这些块),但请注意,如果这样做,仍然需要设置上面讨论的自定义源标头配置,因为如果您只在IP级别上阻塞,技术上仍然允许任何人的CloudFront发行版访问您的ELB。您的CloudFront发行版与其他CloudFront发行版共享池中的IP地址,因此来自CloudFront的请求并不足以保证它来自CloudFront发行版。还请注意,您需要注册更改通知,以便如果向CloudFront添加了新的地址范围,那么您将知道如何将它们添加到您的安全组中。
https://stackoverflow.com/questions/40642779
复制相似问题