无法下载共享帐户s3存储桶上传的文件

时间:2014-04-08 17:23:19

标签: amazon-web-services amazon-s3

我在亚马逊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>"
        }
    ]
}

4 个答案:

答案 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