尝试撤销 CloudFront S3 存储桶的公共访问权限

尝试撤销 CloudFront S3 存储桶的公共访问权限

所有 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 自动将其策略放在存储桶上,则之前的语句已经手动放在存储桶上。

相关内容