我想限制对我的 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
完成以下步骤:
- 打开 CloudFront 控制台。
- 在导航窗格中,选择 Distributions(分配),然后选择提供您要限制访问权限的 S3 存储桶内容的分配。
- 选择 Origins(源)选项卡。
- 选择 Amazon S3 源,然后选择 Edit(编辑)。
- 对于 Origin access(来源访问),选择 Origin access control settings (recommended)(来源访问控制设置(推荐))。
- 对于 Origin access control(来源访问控制),选择现有的 OAC。或者,选择 Create new OAC(创建新的 OAC)。
- 在对话框中,为您的控制设置输入一个名称。最佳做法是保留默认设置 Sign requests (recommended)(签署请求(推荐))。
- 选择 Create(创建)。
- 对于 S3 bucket access(S3 存储桶访问),选择 Copy policy(复制策略)。
- 选择 Save changes(保存更改)。
- 打开 Amazon S3 控制台。
- 在导航窗格中,选择 General purpose buckets(通用存储桶),然后选择作为 CloudFront 分配源的存储桶。
- 选择 Permissions(权限)选项卡。
- 在 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
完成以下步骤:
- 打开 CloudFront 控制台。
- 在导航窗格中,选择 Distributions(分配),然后选择提供您要限制访问权限的 S3 存储桶内容的分配。
- 选择 Origins(源)选项卡。
- 选择 Amazon S3 源,然后选择 Edit(编辑)。
- 对于 Origin access(来源访问),选择 Legacy access identities(遗留访问身份)。
- 在 Origin access identity(来源访问身份)下拉列表中,选择 OAI 名称。或者,选择 Create new OAI(创建新的 OAI)。
- 在对话框中,输入新 OAI 的名称,然后选择 Create(创建)。
- 对于 Bucket policy(存储桶策略),选择 Yes, update the bucket policy(是,更新存储桶策略)。
- 选择 Save changes(保存更改)。
- 打开 Amazon S3 控制台。
- 在导航窗格中,选择通用存储桶,然后选择作为 CloudFront 分配源的存储桶。
- 选择 Permissions(权限)选项卡。
- 在 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 的身份和访问管理