【问题标题】:S3 static website with CloudFront restricted to specific IP range using custom header使用自定义标头将 CloudFront 限制为特定 IP 范围的 S3 静态网站
【发布时间】:2019-09-11 17:04:03
【问题描述】:

我想将网站部署到 S3 存储桶并使用静态网站托管。但是,我有一些严格的安全限制:

  1. 必须使用HTTPS
  2. 对网站的访问必须限制在特定的 IP 范围内

这是我的计划:

  • 使用 AWS WAF 限制可以访问网站的 IP
  • 使用 CloudFront 来利用 HTTPS
  • 格式化 CloudFront 分配以转发一个自定义标头,该标头将充当 S3 的访问密钥
  • 将 S3 存储桶安全策略限制为仅允许包含来自上述 CloudFront 的自定义标头的流量。

这是一个图表:

但我有一个大问题:在 CloudFront 之间转发自定义标头真的是最好的方法吗? AWS 文档说原始访问身份不能用于充当网站的 S3 存储桶 (https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html)。自定义标头似乎不如原始访问身份安全,并且更难维护。使用随机字符串作为防止有人绕过我的 CloudFront 分配并直接访问 S3 存储桶的唯一安全措施让我感到不舒服。如果恶意方猜到了

我的另一个选择是硬着头皮转移到我可以更好地控制大量安全性的服务器,但我想利用 S3 网站的便利性。

【问题讨论】:

    标签: amazon-web-services security amazon-s3 amazon-cloudfront


    【解决方案1】:

    您不能在 S3 上使用任何自定义标头,仅允许使用某些标头,例如:Referer、User-Agent 等。 最好的方法是使用带有 S3 Rest API 端点的 OAI,而不是网站端点。

    但是,您可以为网站端点选择替代方法: 1. 允许 CloudFront IP 范围访问 S3 存储桶。

    http://d7uri8nf7uskq.cloudfront.net/tools/list-cloudfront-ips

    与 2. 在 CloudFront 源配置中添加 Origin 客户标头,例如“Referer:一些随机值”,并创建存储桶策略以允许在 Referer 标头中使用该特定值。

    【讨论】:

      【解决方案2】:

      您应该从 S3 存储桶中删除网站配置并使用源访问身份。其余的设置都很好。

      您无需将 S3 存储桶配置为网站端点,因为您不会直接通过 S3 提供内容。使用原始访问身份,您的存储桶将只能从 CloudFront 获得(除非您在存储桶策略中添加其他内容),这就是您想要的。

      另见https://medium.com/@sanamsoodan/host-a-website-using-aws-cloudfront-origin-access-identity-s3-without-static-website-hosting-43995ae2a9bd

      【讨论】:

      • 感谢您的回复。也许我误解了为 S3 存储桶选择“静态网站托管”的含义。我的印象是,如果我不配置静态网站托管,该网站根本无法运行。当您选择静态网站托管时,您必须选择索引/错误页面以使您的存储桶作为网站工作。您的回答表明,配置静态网站托管只不过是让网站公开可用。我认为除非我配置为静态网站,否则路由之类的东西不会起作用。
      • 当您的存储桶配置为网站端点时,还有其他区别(请参阅docs.aws.amazon.com/AmazonS3/latest/dev/…)。请注意,将您的存储桶配置为网站端点不会将其公开,只有存储桶策略对此进行控制。基本上,当您要直接从 S3 提供静态网站时,您可以配置网站端点。
      【解决方案3】:

      【讨论】:

      • 这些文档说您不能将原始访问身份用于配置为静态网站的 S3 存储桶:docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/… “如果您使用配置为网站终端节点的 Amazon S3 存储桶,则必须使用 CloudFront 将其设置为自定义源,您不能使用本主题中描述的源访问身份功能。”
      • 是否必须使用静态网站托管,如果是,您也可以分享原因吗? :)
      猜你喜欢
      • 2019-11-17
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-01
      • 1970-01-01
      • 2017-05-14
      相关资源
      最近更新 更多