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

上次更新日期:2021 年 9 月 15 日

我想限制对 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.    在 S3 bucket access(S3 存储桶访问)部分,选择 Yes use OAI (bucket can restrict access to only CloudFront)(是,使用OAI (存储桶可以仅限对 CloudFront 的访问))。

6.    对于 Origin access identity(来源访问标识 (OAI)),请从下拉列表中选择现有身份或选择 Create new OAI(创建新 OAI)。

7.    对于 Bucket policy(存储桶策略),选择 Yes, update the bucket policy(是,更新存储桶策略)。
注意:此步骤会将 S3 源的存储桶策略更新为授予对 s3:GetObject 的 OAI 访问权限。

8.    选择保存更改

查看存储桶策略

1.    打开 Amazon S3 控制台

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

3.    选择Permissions (权限)选项卡。

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

{
 "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 会将该语句添加到您的存储桶策略。

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

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

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

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