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

Joh*_*ter 1 policy amazon-s3 bucket boto amazon-iam

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

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

user_policy_string = r'{"Statement":[{"Effect":"Allow","Action": "s3:*","Resource":"arn:aws:s3:::*"}]}'
Run Code Online (Sandbox Code Playgroud)

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

user_policy_string = r'{"Statement":[{"Effect":"Allow","Action": "s3:*","Resource":"arn:aws:s3:::buck_binary_bucket_bay-earth-d5a/*"}]}'
Run Code Online (Sandbox Code Playgroud)

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

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

  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:GetFederationToken",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "iam:GetUser",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "*"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*pel 6

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

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

用例通常涉及S3 API调用,除了Resource策略的目标之外,还处理不同的资源类型.具体来说,您需要了解服务操作(例如ListAllMyBuckets),存储桶操作(例如ListBucket)和对象操作(例如GetObject)之间的区别.

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

   "Statement":[{
      "Effect":"Allow",
      "Action":"s3:ListBucket",
      "Resource":"arn:aws:s3:::buck_binary_bucket_bay-earth-d5a",
      }
   ]
Run Code Online (Sandbox Code Playgroud)

  • AUGH.AWS的政策机制是_aggravating_.作为参考,我的具体问题(给用户完全访问存储桶)通过以下行解决:"资源":["arn:aws:s3 ::: BUCKETNAME","资源":"arn:aws: S3 ::: BUCKETNAME/*"] (5认同)