使用get_contents_to_filename需要哪些角色权限?

时间:2013-02-03 20:45:30

标签: amazon-s3 boto

我最近设置了一个IAM角色,用于访问具有以下策略的存储桶:

{
  "Statement": [
    {
      "Sid": "Stmt1359923112752",
      "Action": [
        "s3:*"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::<BUCKET_NAME>"
      ]
    }
  ]
}

虽然我可以很好地列出存储桶的内容,但当我在特定密钥上调用get_contents_to_filename时,我会收到boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden例外。

是否需要添加角色权限才能从S3获取密钥?我已经检查了单个密钥的权限,似乎没有任何明确禁止访问其他用户的内容;只有一个权限授予所有者完全权限。

为了完整起见,我确认删除上面的角色策略会阻止完全访问存储桶,因此这不是应用策略的问题。

谢谢!

1 个答案:

答案 0 :(得分:2)

您必须授予存储桶中对象的权限,而不仅仅是存储桶中的对象。所以你的资源必须是arn:aws:s3:::<bucketname>/*。这符合每个对象。

不幸的是,这与桶本身不匹配。因此,您需要向arn:aws:s3:::<bucketname>提供与存储桶相关的权限,并向arn:aws:s3:::<bucketname>/*提供对象权限,或者仅授予arn:aws:s3:::<bucketname>*权限。虽然在后一种情况下,为名为 fred 的存储桶授予权限也会为名为 freddy 的存储提供相同的权限。