如何为除IAM角色之外的所有人限制上载到S3存储桶

时间:2018-03-22 22:40:00

标签: amazon-web-services amazon-s3 amazon-iam

我无法弄清楚如何限制s3上传功能 - 具体来说:s3Client.putObject(request);(使用Java SDK v1.11.298)

我的设置与 How to Restrict Amazon S3 Bucket Access to a Specific IAM Role博客文章

存储桶政策

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::MyExampleBucket",
      "Condition": {
        "StringNotLike": {
          "aws:userId": [
            "AROAEXAMPLEID:*",
            "111111111111"
          ]
        }
      }
    }
  ]
}

我的用户所在的群组中AdministratorAccess传递给予s3:*权限。

据我所知,应该被桶的政体覆盖,明确只允许承担该角色的用户采取任何行动。

有趣的是,读取权限按预期运行。如果用户不承担与AROAEXAMPLEID关联的角色,则他们无法读取存储桶中的文件,但仍允许他们上传。

我需要将上传和阅读限制为只能担任该角色的用户。

1 个答案:

答案 0 :(得分:1)

S3策略(存储桶或IAM)可能很难,因为它并不总是清楚该操作是否希望作为"Resource": "arn:aws:s3:::MyExampleBucket"或作为"Resource": "arn:aws:s3:::MyExampleBucket/*"的对象应用于存储桶本身。 / p>

对于s3:PutObject操作,它是路径,而显示的策略仅影响存储桶。对于s3:*操作,您需要两者。

"Resource": [ 
    "arn:aws:s3:::MyExampleBucket",
    "arn:aws:s3:::MyExampleBucket/*"
], ...

策略中的Resource键接受字符串或字符串数​​组。