跳至内容

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

2 分钟阅读
0

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

解决方法

要限制对 S3 存储桶的访问,您可以创建来源访问控制 (OAC) 或创建传统的来源访问身份 (OAI)。最佳做法是创建 OAC 而非传统的 OAI。

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

创建 CloudFront OAC

完成以下步骤:

  1. 打开 CloudFront 控制台
  2. 在导航窗格中,选择 Distributions(分配),然后选择提供您要限制访问权限的 S3 存储桶内容的分配。
  3. 选择 Origins(源)选项卡。
  4. 选择 Amazon S3 源,然后选择 Edit(编辑)。
  5. 对于 Origin access(来源访问),选择 Origin access control settings (recommended)(来源访问控制设置(推荐))。
  6. 对于 Origin access control(来源访问控制),选择现有的 OAC。或者,选择 Create new OAC(创建新的 OAC)。
  7. 在对话框中,为您的控制设置输入一个名称。最佳做法是保留默认设置 Sign requests (recommended)(签署请求(推荐))。
  8. 选择 Create(创建)。
  9. 对于 S3 bucket access(S3 存储桶访问),选择 Copy policy(复制策略)。
  10. 选择 Save changes(保存更改)。
  11. 打开 Amazon S3 控制台
  12. 在导航窗格中,选择 General purpose buckets(通用存储桶),然后选择作为 CloudFront 分配源的存储桶。
  13. 选择 Permissions(权限)选项卡。
  14. Bucket policy(存储桶策略)下,确认您看到类似于以下示例的语句:
{
    "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"
            }
        }
    }
}

**注意:**请将 DOC-EXAMPLE-BUCKET 替换为您的存储桶名称,将 arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE 替换为您的 CloudFront 分配的 Amazon 资源名称 (ARN)。要允许 CloudFront OAC 从您的存储桶读取对象,您必须在您的存储桶策略中添加上述语句。在限制对存储桶的访问后,您可以集成 AWS WAF 以获得另一层安全保护。

创建传统的 CloudFront OAI

完成以下步骤:

  1. 打开 CloudFront 控制台
  2. 在导航窗格中,选择 Distributions(分配),然后选择提供您要限制访问权限的 S3 存储桶内容的分配。
  3. 选择 Origins(源)选项卡。
  4. 选择 Amazon S3 源,然后选择 Edit(编辑)。
  5. 对于 Origin access(来源访问),选择 Legacy access identities(遗留访问身份)。
  6. Origin access identity(来源访问身份)下拉列表中,选择 OAI 名称。或者,选择 Create new OAI(创建新的 OAI)。
  7. 在对话框中,输入新 OAI 的名称,然后选择 Create(创建)。
  8. 对于 Bucket policy(存储桶策略),选择 Yes, update the bucket policy(是,更新存储桶策略)。
  9. 选择 Save changes(保存更改)。
  10. 打开 Amazon S3 控制台
  11. 在导航窗格中,选择通用存储桶,然后选择作为 CloudFront 分配源的存储桶。
  12. 选择 Permissions(权限)选项卡。
  13. Bucket Policy(存储桶策略)下,确认您看到类似于以下示例的语句:
{  
    "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/*"  
}

**注意:**请将 arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EAF5XXXXXXXXX 替换为您的 CloudFront 分配的 ARN,将 AWS****DOC-EXAMPLE-BUCKET 替换为您的存储桶名称。查看您的存储桶策略中是否存在包含 "Effect": "Deny" 的语句,这些语句会阻止 CloudFront OAI 对存储桶的访问。请将操作更改为 Allow(允许),以便 CloudFront OAI 可以访问存储桶中的对象。此外,请查看您的存储桶策略中是否存在包含 **"Effect": **"Allow" 的语句,这些语句会允许非 CloudFront OAI 的任何源访问存储桶。根据您的使用案例修改这些语句。

相关信息

创建分配

Amazon S3 的身份和访问管理