我在亚马逊s3上创建了一个存储桶,并添加了存储桶策略,为其他用户帐户提供了上传文件的权限。我添加了以下存储桶策略。
但是,现在我自己无法下载共享者上传的文件。我想我没有给他们acl权利。我该如何继续下载文件。他们能否批准他们上传的文件?
{
"Version": "2008-10-17",
"Id": "Policyxxxxxxxxxxxx",
"Statement": [
{
"Sid": "Stmtxxxxxxxxxxxxx",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<account_number>:root"
},
"Action": [
"s3:AbortMultipartUpload",
"s3:GetObject",
"s3:ListMultipartUploadParts",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::<bucket_name>/*"
},
{
"Sid": "Stmtxxxxxxxxxxx",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<account_number>:root"
},
"Action": [
"s3:PutBucketLogging",
"s3:PutBucketNotification",
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::<bucket_name>"
}
]
}
答案 0 :(得分:7)
所以问题是亚马逊s3存储桶只将桶策略应用于存储桶拥有者拥有的对象。因此,如果您是存储桶拥有者并通过存储桶策略赋予了对象权限,这意味着您还需要确保在对象上载期间授予您权限。在授予上传对象的跨帐户权限时,可以仅限制仅具有读取权限的对象。
来源:http://docs.aws.amazon.com/AmazonS3/latest/dev/AccessPolicyLanguage_UseCases_s3_a.html 相关讨论:https://forums.aws.amazon.com/thread.jspa?messageID=524342&%20#524342 存储桶策略示例:
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"111",
"Effect":"Allow",
"Principal":{
"AWS":"1111111111"
},
"Action":"s3:PutObject",
"Resource":"arn:aws:s3:::examplebucket/*"
},
{
"Sid":"112",
"Effect":"Deny",
"Principal":{
"AWS":"1111111111"
},
"Action":"s3:PutObject",
"Resource":"arn:aws:s3:::examplebucket/*",
"Condition":{
"StringNotEquals":{
"s3:x-amz-grant-full-control":[
"emailAddress=xyz@amazon.com"
]
}
}
}
]
}
答案 1 :(得分:1)
面临类似情况,即目标帐户未被授予完全访问权限,授予cloudfront读访问权限的存储桶策略不起作用。
除了OP的"s3:x-amz-grant-full-control":[ "emailAddress=xyz@amazon.com" ]
或id=xxx
,另一种方法是使用Canned ACL。通过使用bucket-owner-full-control
,我们不必列出特定的电子邮件或规范ID。
{
"Statement":[
{
"Effect":"Allow",
"Principal":{"AWS":"111111111111"},
"Action":"s3:PutObject",
"Resource":["arn:aws:s3:::examplebucket/*","arn:aws:s3:::examplebucket"]
},
{
"Effect":"Deny",
"Principal":{"AWS":"111111111111"},
"Action":"s3:PutObject",
"Resource":"arn:aws:s3:::examplebucket/*",
"Condition": {
"StringNotEquals": {"s3:x-amz-acl":"bucket-owner-full-control"}
}
}
]
}
答案 2 :(得分:0)
我遇到了类似的问题
我将文件从<sharerprofile>
复制到了广告管理系统<bucketname>
中的新亚马逊帐户
由于访问保护,我无法从新的亚马逊帐户下载文件。
所以我做了以下事情:
aws --profile <sharerprofile> s3api put-object-acl --acl authenticated-read --bucket <bucketname> --key <pathofthefileInBucket>
我没有找到如何自动为多个文件执行此操作,因此我不得不为每个文件重复相同的命令
答案 3 :(得分:-1)
如果您使用的是IAM用户帐户,则应使用IAM策略测试程序查看这些策略更改在部署后的确切显示方式。
http://docs.aws.amazon.com/IAM/latest/UsingPolicySimulatorGuide/iam-policy-simulator-guide.html