在简单AWS用户策略中指定单个存储桶的问题

时间:2012-02-01 00:29:52

标签: amazon-s3 policy boto bucket amazon-iam

我正在使用AWS IAM STS(通过boto)为我访问S3存储桶创建凭据。我对以下政策中的错误感到茫然。我尽可能地简化了我的政策,但仍然得到意想不到的结果。

当我获得用户的令牌时,我附上以下政策:

user_policy_string = r'{"Statement":[{"Effect":"Allow","Action": "s3:*","Resource":"arn:aws:s3:::*"}]}'

这很有效,但显然有点过于宽松。在缩小与这些凭据关联的权限时,我尝试使用相同的策略,但指定存储桶:

user_policy_string = r'{"Statement":[{"Effect":"Allow","Action": "s3:*","Resource":"arn:aws:s3:::buck_binary_bucket_bay-earth-d5a/*"}]}'

我尝试访问S3时遇到403错误。基于AWS文档,我确信这是解决策略中特定存储桶的方法,因此我不知道可能导致此限制的原因。我是不是错误地提到了水桶?

在S3控制台中,策略为空(尝试添加完全允许的策略)。对于用于生成STS令牌的AWS账户,策略如下:

  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:GetFederationToken",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "iam:GetUser",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "*"
    }
  ]
}

1 个答案:

答案 0 :(得分:6)

  

我尝试访问S3时遇到403错误。

你如何尝试访问S3 ,即通过哪种工具,服务,API?

除了策略所针对的Resource之外,用例通常涉及S3 API调用以寻址不同的资源类型。具体而言,您需要了解Operations on the Service(例如ListAllMyBuckets),Operations on Buckets(例如ListBucket)和Operations on Objects(例如{{}之间的区别3}})。

如果您的S3访问方法也隐式使用任何其他资源类型(即除了您已通过buck_binary_bucket_bay-earth-d5a/*寻址的对象资源之外),这些还需要相应的附加策略。例如,在访问对象之前能够通过 ListBucket 列出存储桶中的对象的常见要求需要一个相应的策略片段来寻址存储桶,如下所示:

   "Statement":[{
      "Effect":"Allow",
      "Action":"s3:ListBucket",
      "Resource":"arn:aws:s3:::buck_binary_bucket_bay-earth-d5a",
      }
   ]