在没有公共存储桶的情况下通过 Cloudfront 和 S3 提供网站服务

在没有公共存储桶的情况下通过 Cloudfront 和 S3 提供网站服务

当通过 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/*"
        }
    ]
}

但亚马逊最近开始显示此消息(粗体强调是我的):

我们强烈建议您绝不授予任何一种对您的 S3 存储桶的公共访问权限。

AWS 文档与此建议非常不一致,它表示只有写入权限才是问题所在。我正在为一个网站提供服务,因此显然我很乐意向公众提供对这些文件的访问权限,尤其是因为目录列表仍然不允许。

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

答案1

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

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

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

相关内容