限制对云端分发背后的 s3 静态网站的访问

Posted

技术标签:

【中文标题】限制对云端分发背后的 s3 静态网站的访问【英文标题】:Restrict access to s3 static website behind a cloudfront distribution 【发布时间】:2019-08-25 06:58:30 【问题描述】:

我想暂时限制用户访问我在 s3 中托管的静态网站,该网站位于云端发行版后面。

这可能吗?如果可以,我可以用什么方法来实现它?

我已经能够通过使用存储桶策略中的条件来限制对我的 s3 存储桶的特定访问,如下所示:


  "Version": "2012-10-17",
  "Statement": [
      
          "Sid": "VisualEditor0",
          "Effect": "Allow",
          "Principal": 
              "AWS": "*"
          ,
          "Action": "s3:GetObject",
          "Resource": "arn:aws:s3:::my-bucket/*",
          "Condition": 
              "IpAddress": 
                  "aws:SourceIp": "12.34.56.73/32"
              
          
      
  ]

它可以工作并将我的 s3 存储桶限制为我的 ip,但这意味着云端 url 获取 403 forbidden: access denied

阅读 AWS 文档时,建议使用 Origin Access Identity 限制对 s3 资源的特定访问。但是他们指定了以下内容:

如果您没有看到 Restrict Bucket Access 选项,您的 Amazon S3 源可能被配置为网站终端节点。在该配置中,必须使用 CloudFront 将 S3 存储桶设置为自定义源,并且您不能对它们使用源访问身份。

这表明我不能在这种情况下使用它。理想情况下,我想强制我的分发或存储桶策略使用特定的安全组并以这种方式控制它,以便我可以轻松添加/删除批准的 IP。

【问题讨论】:

您只想限制他们直接访问 S3 还是同时访问 S3 和 CloudFront? @kichik 都理想 【参考方案1】:

您可以在 CloudFront 上允许 CloudFront IP 地址,因为静态网站端点不支持源访问身份。 以下是 CloudFront IP 地址列表: http://d7uri8nf7uskq.cloudfront.net/tools/list-cloudfront-ips

【讨论】:

【参考方案2】:

此链接还说明了如何通过引荐标头限制访问 https://aws.amazon.com/premiumsupport/knowledge-center/cloudfront-serve-static-website/

您可以告诉 CloudFront 为每个请求添加一个标头,然后修改您的 S3 存储桶策略以要求该标头。

例如


  "Version":"2012-10-17",
  "Id":"http referer policy example",
  "Statement":[
    
      "Sid":"Allow get requests originating from www.example.com and example.com.",
      "Effect":"Allow",
      "Principal":"*",
      "Action":"s3:GetObject",
      "Resource":"arn:aws:s3:::examplebucket/*",
      "Condition":
        "StringLike":"aws:Referer":"mysecretvalue"
      
    
  ]

【讨论】:

以上是关于限制对云端分发背后的 s3 静态网站的访问的主要内容,如果未能解决你的问题,请参考以下文章

静态 S3 网站端点未通过 HTTPS 重定向

如何将 S3 网站的访问限制为 Cloudfront?

在不将 ip 列入白名单的情况下限制对 S3 托管网站的访问

CloudFront 支持的网站被重定向到 s3 存储桶 url

授予对 s3 存储桶的公共访问权限,而不是为 aws 无服务器应用程序提供静态网站

仅由 API Gateway 访问的私有 S3 静态网站