AWS S3存储桶权限 - 拒绝访问

时间:2014-02-27 18:39:06

标签: amazon-web-services amazon-s3

我试图允许自己下载S3存储桶中的现有文件。我修改了Bucket Policy,如下所示:

        {
        "Sid": "someSID",
        "Action": "s3:*",
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::bucketname/AWSLogs/123123123123/*",
        "Principal": {
            "AWS": [
                "arn:aws:iam::123123123123:user/myuid"
            ]
        }
    }

我的理解是,添加到策略应该为我的帐户“myuid”提供“bucketname”的完全权限,包括该存储桶中已有的所有文件。但是,当我尝试通过控制台中出现的链接下载任何这些文件时,我仍然会收到“拒绝访问”错误。

有什么想法吗?

10 个答案:

答案 0 :(得分:17)

David,您说得对,但我发现除了bennie下面提到的内容之外,您还必须向“认证用户”授予视图(或任何您想要的访问权限)# 39 ;. enter image description here

但更好的解决方案可能是编辑用户的策略以仅授予对存储桶的访问权限:

{
   "Statement": [
    {
      "Sid": "Stmt1350703615347",
      "Action": [
        "s3:*"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::mybucket/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": ["arn:aws:s3:::mybucket"],
      "Condition": {}
    }
  ]
}

第一个块授予存储桶中所有元素的所有S3权限。第二个块授予存储桶本身的列表权限。

答案 1 :(得分:12)

第1步

点击您的存储桶名称,然后在“权限”标签下,确保未选中“阻止新的公共存储桶策略”

enter image description here

第2步

然后您可以应用存储桶策略 enter image description here

希望有帮助

答案 2 :(得分:6)

将资源arn:aws:s3:::bucketname/AWSLogs/123123123123/*更改为arn:aws:s3:::bucketname/*以拥有对bucketname

的完全权限

答案 3 :(得分:4)

使用以下方法在Android中使用TransferUtility上传公共可读表单的任何文件。

transferUtility.upload(String bucketName, String key, File file, CannedAccessControlList cannedAcl)

示例

transferUtility.upload("MY_BUCKET_NAME", "FileName", your_file, CannedAccessControlList.PublicRead);

答案 4 :(得分:2)

澄清一下:它确实没有很好地记录,但你需要两个访问语句。

除了允许对资源" arn:aws:s3 ::: bucketname / AWSLogs / 123123123123 / *"进行操作的语句之外,还需要第二个语句,允许ListBucket到&#34 ; arn:aws:s3 ::: bucketname",因为在内部,Aws客户端会在执行操作之前尝试列出存储桶以确定它是否存在。

使用第二个语句,它应该如下所示:

"Statement": [
    {
        "Sid": "someSID",
        "Action": "ActionThatYouMeantToAllow",
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::bucketname/AWSLogs/123123123123/*",
        "Principal": {
            "AWS": [
                "arn:aws:iam::123123123123:user/myuid"
            ]
    },
    {
        "Sid": "someOtherSID",
        "Action": "ListBucket",
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::bucketname",
        "Principal": {
            "AWS": [
                "arn:aws:iam::123123123123:user/myuid"
            ]
    }
]

注意:如果您正在使用IAM,请跳过"校长"一部分。

答案 5 :(得分:1)

如果您有加密存储桶,则需要允许公里数。

答案 6 :(得分:0)

转到此link并生成政策。  在Principal字段中输入*

Actions中设置Get Objects

ARN设为arn:aws:s3:::<bucket_name>/*

然后添加语句,然后生成策略,您将获得一个JSON文件,然后只需复制该文件并将其粘贴到存储桶策略中即可。

有关更多详细信息,请转到here.

答案 7 :(得分:0)

在s3中显示静态网站:

unckeched blocking bucket public

这是存储桶策略:

{
  "Version":"2012-10-17",
  "Statement":[{
  "Sid":"PublicReadGetObject",
    "Effect":"Allow",
  "Principal": "*",
  "Action":["s3:GetObject"],
  "Resource":["arn:aws:s3:::example-bucket/*"
  ]
  }
]
}

答案 8 :(得分:0)

可能的原因:如果文件是由另一个AWS账户用户放置/复制的,则您将无法访问该文件,因为仍然不是文件所有者。已在目录中放置文件的AWS账户用户必须在放置或复制操作期间授予访问权限。

对于放置操作,对象所有者可以运行以下命令:

aws s3api put-object --bucket destination_awsexamplebucket --key dir-1/my_images.tar.bz2 --body my_images.tar.bz2 --acl bucket-owner-full-control

对于单个对象的复制操作,对象所有者可以运行以下命令之一:

aws s3api copy-object --bucket destination_awsexammplebucket --key source_awsexamplebucket/myobject --acl bucket-owner-full-control

ref:AWS Link

答案 9 :(得分:0)

让公众访问存储桶以添加策略不是正确的方法。 即使在很短的时间内,这也会使您的存储桶向公众公开。

即使您具有管理员访问权限,您也将遇到此错误(root用户将不会遇到此错误) 根据AWS文档,您必须向您的IAM用户添加“ PutBucketPolicy”。

因此,只需将I3 S3策略添加到您的IAM用户,如下面的屏幕截图所示,请提及您的存储桶ARN,以使其更加安全,而不必再次将存储桶公开。

enter image description here