S3访问被拒:桶所有者无法下载CloudFront上传的对象
解决方案:S3桶所有者无法下载CloudFront上传对象的问题
1. 强制让桶所有者访问所有对象的方法
有三种可行方式解决该问题:
启用桶所有者强制控制(Bucket Owner Enforcement)
在S3桶的权限设置中开启该选项,开启后所有上传至桶的对象,所有者会自动变为桶所有者,无论上传来源是谁。桶所有者默认拥有所有对象的完全权限,包括下载操作。注意:开启前需确认现有对象权限状态,开启后新上传对象自动归桶所有;对于已存在的对象,可通过批量修改ACL或
aws s3 cp重新同步的方式获取所有权。修改桶策略,添加桶所有者权限
在现有桶策略中新增允许桶所有者IAM用户的语句,可直接将IAM用户ARN加入Principal列表,或者单独添加允许桶账户访问的规则:{ "Version": "2008-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Sid": "1", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EY********", "arn:aws:iam::你的AWS账户ID:user/你的IAM用户名" ] }, "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload", "s3:PutObjectAcl", "s3:PutObjectVersionAcl" ], "Resource": "arn:aws:s3:::my-bucket/*" }, { "Sid": "AllowBucketOwnerAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::你的AWS账户ID:root" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-bucket/*" } ] }批量修改现有对象的ACL
针对已存在的CloudFront上传对象,可通过AWS CLI命令批量修改ACL,让桶所有者获得完全控制权限:aws s3 cp s3://my-bucket/ s3://my-bucket/ --recursive --acl bucket-owner-full-control执行该命令后,桶所有者即可下载这些对象。
2. 关于赋予IAM用户CloudFront OAI权限的说明
CloudFront Origin Access Identity(OAI)是CloudFront服务专属身份,IAM用户无法直接"拥有"该OAI,但可通过以下方式获得同等访问权限:
- 在桶策略中添加IAM用户ARN
直接将IAM用户ARN加入现有桶策略的Principal列表(如上述第一个方案中的修改方式),即可让IAM用户拥有OAI的所有S3操作权限(GetObject、PutObject等)。 - 为IAM用户附加S3权限策略
在IAM控制台给目标用户添加权限策略,允许其访问目标S3桶的对象:
注意:若桶策略为"白名单"模式(仅允许指定Principal访问),必须同时在桶策略中添加IAM用户ARN,否则即使IAM用户自身有权限,桶策略仍会拒绝访问。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": "arn:aws:s3:::my-bucket/*" } ] }
内容的提问来源于stack exchange,提问作者senty
相关产品推荐
相关产品推荐

