保护源站以实现专属CloudFront访问的最佳实践

0

【以下的问题经过翻译处理】 客户想要保护其 CloudFront 分发的源服务器 (ALB+ EC2),使其仅接收来自 CloudFront 分发的流量,防止其他可能绕过 CloudFront 的来源访问。客户可以考虑使用 WAF

我们讨论的方法基本上有三种:

  1. 鉴于 ALB 有其安全组(SG),使用 Lambda 函数更新 SG 规则,仅允许来自 CloudFront Edge 位置服务 IP 范围的请求。每次向全球 Amazon PoPs 添加/移除新边缘位置时,此 IP 范围都可以进行修改。因此,可以使用 SNS 主题通过 Lambda 函数自动编辑 SG 中的规则来触发规则更新(包括更新 IP 范围)。这在此 博客文章 中有很好的描述。
  2. 在 CloudFront 分发和 ALB(用户 -> CF - > WAF -> ALB -> 计算服务)之间使用 WAF 的相同设置,与解决方案 1 的不同之处在于,Lambda 函数将基于 IP Set 更新 WAF 规则,而不是更新 ALB 安全组规则。
  3. 仅在 CloudFront 分发(用户 -> CF -> WAF -> ALB -> 计算服务)之间使用 WAF,并配置 CF 以在源请求中 添加自定义加密头,以标识所有来自 CloudFront 的请求,并设置 WAF,只允许带有特定自定义头的请求,拒绝所有其他请求到源点 (ALB)。有一个 外部博客文章实际上使用了这种方法,但在 AWS 文档/博客中并没有很完整地记录这种可能的案例。 我的问题/疑惑是

就配置工作/运行效率而言,您认为以下哪种方法是最佳选择?我的想法是,第 1 种方法虽然具有成本效益高(因为不使用 WAF,而且 SG 是免费的)和经过充分验证的优点,但却比较老式。如果可能的话,我会转向第三种方法。

profile picture
专家
已提问 5 个月前12 查看次数
1 回答
0

【以下的回答经过翻译处理】 我认为安全组的问题(尽管最近可能有所改变)在于它无法处理所有 CloudFront IP 地址。因此,使用 WAF 是首选的解决方案。

无论您使用哪种方法来限制基于 IP 地址的访问,这些 IP 地址都会被所有 CloudFront 分配使用,因此仅靠这种保护是不够的,我可以创建自己的分配并将其指向您的 ALB。因此,您确实需要在自定义标头中使用共享密钥来访问源。由于 WAF 支持基于标头内容的保护功能,你也可以用它来限制 IP 地址的访问。如果使用自定义标头,是否需要 IP 保护?也许不需要,但最好还是进行深度防御。我之前写了一篇博客文章,虽然与使用MediaStore作为源有关,但讲述了使用共享密钥限制对CloudFront分发的访问。

此外,定期更换自定义标头中的共享密钥也是一种好的做法,但我不知道有特定的博客文章或文档来实现此操作。可以通过使用定时运行的Lambda函数来更新CloudFront配置和WAF来实现此操作(确保有一个合适的窗口同时接受新旧密文)。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则