背景描述:
在需要低延迟,高可用性,扩展性的场景通常会用到Cloudfront和Elastic Load Balancing负载均衡器的组合使用。负载均衡器在后面的作用很重要比如说将流量合理分发到各个后端,自动扩展支持,单一入口点等,但是因为ELB也是可以面向互联网的拥有可以公开解析的DNS名称,用户是可以绕过Cloudfront进行访问的,这样Cloudfront可以缓存对象并将其直接提供给用户,从而减少应用程序负载均衡器的负载,帮助减少延迟,甚至吸收一些分布式拒绝服务 (DDoS) 攻击的作用就丧失了。所以需要阻止用户直接访问负载均衡器,仅允许客户通过Cloudfront访问。
官方链接Restrict access to Application Load Balancers - Amazon CloudFront
官方这里推荐了两个方式:1.配置自定义 HTTP 标头2.使用 CloudFront 的 AWS 托管前缀列表限制对源的访问
这里都会展示操作步骤
前置条件:
一个cloudfront和负载均衡器
配置自定义 HTTP 标头操作步骤:
第一步:进到相应Cloudfront内,点击源进行编辑
添加标头请使用随机生成的值。将标头名称和值视为安全凭证,如用户名和密码。
第二步:添加负载均衡器侦听器规则
选择一个目标组
设置优先级
然后修改原来规则,然后它返回403或者其它
第三步:修改完成后验证
访问ALB应该如图
再访问对应的Cloudfront
使用 CloudFront 的 AWS 托管前缀列表限制对源的访问:
这篇有提到CloudFront 的托管前缀列表计为安全组中的 55 条规则。安全组的默认配额为 60 条规则,如果您在入站规则中添加一个 CloudFront 托管前缀列表,则只剩下 5 条额外规则的空间。如果您想使用 CloudFront 的托管前缀列表限制 HTTP 和 HTTPS 请求,则必须添加两个单独的规则,这将计为 110 条规则。所以我们加http和https规则的CloudFront 的托管前缀列表将要安全组规则数量提升配额到110条以上,他这里有提供对应配额链接省的我们自己去找,但是要注意自己所在区域去申请。批准时间会在半个小时到几个小时不等甚至一天。
https://console.aws.amazon.com/servicequotas/home/services/vpc/quotas/L-0EA8095F
没改之前可以用负载均衡器的DNS地址访问
现在去修改负载均衡器的安全组规则,点击蓝色字体跳转到对应的安全组页面
编辑入站规则
先点击删除原来的规则,再添加新规则。在源这里找到global.cloudfront.origin-facing的前缀列表
重新访问负载均衡器的DNS地址
验证访问Cloudfront的域名