如何使用我的 CloudFront 分配限制对 Amazon S3 存储桶的访问?

上次更新时间:2020 年 5 月 28 日

我想限制对 Amazon Simple Storage Service (Amazon S3) 存储桶的访问,以便只能通过我的 Amazon CloudFront 分配访问对象。该如何操作?

解决方法

重要提示:在开始之前,请确保将 CloudFront 分配的 Amazon S3 源配置为 REST API 终端节点 (AWSDOC-EXAMPLE-BUCKET.s3.amazonaws.com)。此解决方法不适用于配置为网站终端节点 (AWSDOC-EXAMPLE-BUCKET.s3-website-us-east-1.amazonaws.com) 的 S3 源。

创建 CloudFront 源访问身份 (OAI)

1.    打开 CloudFront 控制台

2.    从分配列表中,选择用于从要限制访问的 S3 存储桶中提供内容的分配。

3.    选择源和源组选项卡。

4.    选择 S3 源,然后选择编辑

5.    对于限制存储桶访问,请选择

6.    对于源访问身份,请选择创建新身份使用现有身份

7.    对于授予存储桶读取权限,请选择是,更新存储桶策略
注意:此步骤会将 S3 源的存储桶策略更新为授予对 s3:GetObject 的 OAI 访问权限。

8.    选择是,编辑

查看存储桶策略

1.    打开 Amazon S3 控制台

2.    从存储桶列表中,选择作为 CloudFront 分配源的存储桶。

3.    选择权限选项卡。

4.    选择存储桶策略

5.    在存储桶策略编辑器中,确认您看到类似于以下内容的语句:

{
	"Sid": "1",
	"Effect": "Allow",
	"Principal": {
		"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EAF5XXXXXXXXX"
		},
	"Action": "s3:GetObject",
	"Resource": "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET/*"
}

当您在 OAI 设置过程中选择是,更新存储桶策略时,CloudFront 会将该语句添加到您的存储桶策略。

6.    在您的存储桶策略中查看是否存在任何包含 "Effect": "Deny" 的语句,这些语句会阻止从 CloudFront OAI 访问存储桶。修改这些语句,以便 CloudFront OAI 能够访问存储桶中的对象。

7.    在您的存储桶策略中查看是否存在任何包含 "Effect": "Allow" 的语句,这些语句允许从除 CloudFront OAI 以外的其他源访问存储桶。根据使用案例的要求修改这些语句。

注意:如果您使用对象访问控制列表(对象 ACL)来管理权限,则还必须查看对象 ACL,以确保在 CloudFront OAI 之外无法访问这些文件。

使用 CloudFront OAI 限制对存储桶的访问后,可以选择通过集成 AWS WAF 来添加另一层安全性。