限制对Cloudfront发行版背后的s3静态网站的访问

时间:2019-04-03 16:51:55

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

我想暂时限制用户访问位于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,但这意味着cloudfront网址为403 forbidden: access denied

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

  

如果没有看到“限制存储桶访问”选项,则您的Amazon S3来源可能已配置为网站终端节点。在该配置中,必须使用CloudFront将S3存储桶设置为自定义来源,并且您不能将它们与来源访问标识一起使用。

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

此链接还说明了如何通过引荐标头限制访问 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"}
      }
    }
  ]
}