所有 AWS 安全工具整天都在烦我,为什么我打开了公共 S3 存储桶访问权限。所以我说没问题,我们唯一需要公共访问的存储桶是我们的 Cloudfront 存储桶,让我修复它,然后我就可以使用新的“不要将任何内容公开,你怎么了”设置。我按照 AWS 文档进行操作,https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html
因此,我进入了 cloudfront 发行版的源并将其设置为“限制存储桶访问”。我让它创建一个新的源访问标识,并将其应用于存储桶。它起作用了。我去检查存储桶权限/策略,现在它显示:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::cloudfront-mycompany-us-west-2/*"
},
{
"Sid": "2",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E22JXXXXXKYVK2"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::cloudfront-mycompany-us-west-2/*"
}
]
}
一切看起来都很好。但是当我“阻止对该 S3 存储桶的公共访问”时,我的网站就离线了。我查看了 cloudtrail 和 cloudwatch 日志,但没有看到任何似乎表明原因的东西。
有谁让 CloudFront 与非公共 S3 存储桶一起工作并且知道我错过了什么步骤?
答案1
您在其中有一个额外的语句(顶部的语句),允许“*”访问存储桶的对象。您只需要底部策略即可允许 CloudFront 使用 OAI 访问对象。当您“阻止所有公共访问”时,它会发现您有一个公共条目,并且它可能只会禁用整个策略,而不仅仅是顶部部分。删除第一个语句,确保 OAI 与与您的 CF 分发关联的 OAI 相同,然后打开“阻止所有公共访问”。如果 CloudFront 自动将其策略放在存储桶上,则之前的语句已经手动放在存储桶上。