允许仅访问特定存储桶文件夹的AWS策略

时间:2020-07-26 00:30:08

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

我正在尝试创建一个IAM策略,以允许用户仅访问S3存储桶中的特定文件夹。 如何使用可视化策略编辑器执行此操作? 在资源部分中,如果我提到该文件夹​​的arn,则会拒绝该用户访问整个存储桶。

1 个答案:

答案 0 :(得分:2)

以下是一项授予访问分区中特定文件夹访问权限的策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": ["s3:ListBucket"],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::mybucket"],
      "Condition": {"StringLike": {"s3:prefix": ["folder1/*"]}}
    },
    {
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::mybucket/folder1/*"]
    }
  ]
}

注意事项:

  • 允许列出存储桶的ListBucket操作是对存储桶本身(不是路径)的许可。要限制它们可以列出的文件夹,必须通过s3:prefix指定该文件夹。
  • GetObjectPutObject操作在对象上进行,因此可以在ARN中引用该文件夹。

也可以使用IAM Policy Elements: Variables and Tags来引用用户名。此策略可以应用于 IAM组,并将允许每个用户使用自己的名称访问文件夹:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": ["s3:ListBucket"],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::mybucket"],
      "Condition": {"StringLike": {"s3:prefix": ["${aws:username}/*"]}}
    },
    {
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::mybucket/${aws:username}/*"]
    }
  ]
}