在没有公共存储桶的情况下从 Cloudfront 和 S3 服务网站

Ste*_*eve 8 amazon-s3 amazon-cloudfront amazon-web-services

当通过 CloudFront 从 S3 存储桶提供网站服务时,我通常会应用以下存储桶策略以允许访问我的文件:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Allow Public Access to All Objects",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::somewhere.example.com/*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

但亚马逊最近开始展示这条信息(我的粗体强调):

我们强烈建议您永远不要授予对 S3 存储桶的任何类型的公共访问权限。

AWS 文档与此建议非常不一致,表明只有写访问权限是一个问题。我正在为一个网站提供服务,因此显然我很高兴让公众访问这些文件,特别是因为仍然不允许目录列表。

截至 2017 年 11 月,在不提供任何公共访问权限的情况下,将 CloudFront 连接到 S3 存储桶的推荐方式是什么?

Joh*_*ley 6

您将需要设置原始访问身份。这允许您保持存储桶的私密性,并且只允许通过 CloudFront 进行访问。这非常容易设置。我提供了一个链接来引导您完成这些步骤并帮助您理解所有内容。设置 OAI 后,删除 S3 存储桶的策略。您的 S3 存储桶是私有的,仅通过 CloudFront 向用户提供访问权限。

使用源访问身份限制对您的 Amazon S3 内容的访问

通常,如果您使用 Amazon S3 存储桶作为 CloudFront 分配的源,则可以授予每个人读取存储桶中对象的权限。这允许任何人通过 CloudFront 或使用 Amazon S3 URL 访问您的对象。CloudFront 不会公开 Amazon S3 URL,但如果您的应用程序直接从 Amazon S3 提供任何对象,或者如果有人提供指向 Amazon S3 中特定对象的直接链接,您的用户可能会拥有这些 URL。