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

2 分钟阅读
0

我想限制对 Amazon Simple Storage Service (Amazon S3) 存储桶的访问,以便用户只能通过我的 Amazon CloudFront 分配访问对象。

解决方法

**重要提示:**在开始之前,请确保将 CloudFront 分配的 Amazon S3 源配置为 REST API 端点。例如,AWSDOC-EXAMPLE-BUCKET.s3.amazonaws.com。此解决方法不适用于配置为网站端点的 S3 源。例如,AWSDOC-EXAMPLE-BUCKET.s3-website-us-east-1.amazonaws.com。有关更多信息,请参阅如何使用 CloudFront 来为在 Amazon S3 上托管的静态网站提供服务?

选项 1(最佳实践):创建 CloudFront 来源访问控制 (OAC)

  1. 打开 CloudFront 控制台
  2. 从分配列表中,选择用于从要限制访问的 S3 存储桶中提供内容的分配。
  3. 选择选项卡。
  4. 选择 S3 源,然后选择 Edit(编辑)。
  5. 对于 Origin Access(来源访问),选择 Origin access control settings (recommended)(来源访问控制设置(推荐))。
  6. 对于 Origin access control(来源访问控制),选择现有 OAC,或选择 Create Control(创建控制)设置。
  7. 在对话框中,命名您的控制设置。最佳实践是保留默认设置签署请求(推荐)。然后,选择创建
  8. 对于 S3 存储桶访问,在 S3 存储桶上应用存储桶策略。选择复制策略,然后选择保存
  9. 选择转至 S3 存储桶权限,将您带到 S3 存储桶控制台。
  10. 选择保存更改
  11. Amazon S3 控制台中,从您的存储桶列表中,选择作为 CloudFront 分配源的存储桶。
  12. 选择权限选项卡。
  13. 在存储桶策略下,确认您看到类似于以下内容的语句:
{
    "Version": "2012-10-17",
    "Statement": {
        "Sid": "AllowCloudFrontServicePrincipalReadOnly",
        "Effect": "Allow",
        "Principal": {
            "Service": "cloudfront.amazonaws.com"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
        "Condition": {
            "StringEquals": {
                "AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE"
            }
        }
    }
}

您必须添加上述语句才能允许 CloudFront OAC 从您的存储桶读取对象。

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

选项 2:创建原有 CloudFront 来源访问身份 (OAI)

  1. 打开 CloudFront 控制台
  2. 从分配列表中,选择用于从要限制访问的 S3 存储桶中提供内容的分配。
  3. 选择选项卡。
  4. 选择 S3 origin(S3 源),然后选择 Edit(编辑)。
  5. 对于来源访问,选择 Legacy access identities(遗留访问身份)。
  6. 在 Origin access identity(来源访问身份)下拉列表中,选择来源访问身份名称,或选择 Create new OAI(创建新的 OAI)。
  7. 在对话框中,命名新的来源访问身份,然后选择 Create(创建)。
  8. 对于存储桶策略,选择是,更新存储桶策略
  9. 选择保存更改
  10. Amazon S3 控制台中,从您的存储桶列表中,选择作为 CloudFront 分配源的存储桶。
  11. 选择权限选项卡。
  12. 存储桶策略下,确认您看到类似于以下内容的语句:
{{

"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/*"

}

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

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


相关信息

创建分配

Amazon S3 中的 Identity and Access Management

相关视频

AWS 官方
AWS 官方已更新 1 年前