我是水桶主人。我的bucket中的某些文件不属于我,或者对它没有完全的控制权。我想要完全访问这些文件。不幸的是,没有文件的所有者,无法跟踪文件是如何上载到bucket的。
我尝试将文件复制并粘贴到同一个s3存储桶中以覆盖权限,但失败了。
这是桶策略
{“版本”:“2012-10-17”,“ID”:“ABCD”,“语句”:[{“SID”:“ABCD”,“效果”:“允许”,“主体”:{“AWS”:[“arn:aws:IAM::123456789012:User/xxx”]},“操作”:[“S3:GetObject”,“S3:GetBucketLocation”,“S3:ListBucket”,“S3:PutObject”,“S3:PutObjectCl”],“资源”:[“arn:aws:s3:::XYZ/*”,“arn:aws:s3:::XYZ”]
我想从我的s3桶中访问/下载不属于我的文件
如何覆盖存储桶中不属于我的文件的权限?
来自AWS文档:
默认情况下,S3对象由上载它的AWS帐户所有。即使桶由另一个帐户拥有,也是如此。要获得对对象的访问权限,对象所有者必须显式地授予您(bucket所有者)访问权限。
对象所有者可以通过更新对象的访问控制列表(ACL)授予bucket所有者对对象的完全控制权。对象所有者可以在put或copy操作期间更新ACL,也可以在对象添加到存储桶之后更新ACL。
现在,您唯一的解决方案是通过从对象所有者的帐户或从对象所有者的S3控制台运行与下面类似的cli命令来更改现有文件的访问控制列表(ACL)。
aws s3api put-object-acl --bucket destination_awsexamplebucket --key keyname --acl bucket-owner-full-control
接下来,我如何确保我的桶中上传的文件是我完全控制它的?
您可以创建一个bucket策略,强制其他用户上载到您的bucket以授予您对这些对象的完全访问权限。这可以通过将对象的访问控制列表
设置为bucket-owner-full-control
来实现。
类似于下面的bucket策略将会起作用:
{
"Id": "Policy1541018284691",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1541018283275",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::awsexamplebucket/*",
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control"
}
},
"Principal": {
"AWS": [
"arn:aws:iam::111122223333:user/ExampleUser"
]
}
}
]
}
这将确保上载到存储桶的人需要将ACL
设置为bucket-owner-full-control
,否则上载将失败,出现AccessDenied错误。
参考资料: