AWS S3 Bucket Policy阻止访问除一个目录之外的所有目录,即使用户具有完全S3权限也是如此

时间:2017-02-09 16:17:08

标签: amazon-web-services amazon-s3

我不完全确定这是否可行,但我想创建一个类似于以下描述的设置:

https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/

通过创建一个S3存储桶,其中包含每个只能由该用户访问的AWS用户的子目录。

我的问题是:是否可以更进一步,特别是阻止可能具有完全S3权限的用户能够从不属于他们的子目录中读取?

这个解决方案对我来说是理想的,除了几个用户在S3上有* / *我相信会为他们覆盖这个策略,允许他们看到其他用户的数据。理想情况下,这将是一个存储桶策略而不是IAM组/角色,因此帐户中的任何用户都可以自动应用这些权限,而无需将其添加到组中。

1 个答案:

答案 0 :(得分:3)

当IAM用户/角色访问S3存储桶时,将应用以下所有策略:

  • 用户或角色的IAM政策,
  • 如果用户在任何组中,则包含所有这些组的策略,
  • 如果正在访问的存储桶具有存储桶策略,则为该策略。

所有这些政策的工作原理如下:

  1. 除非
  2. ,否则所有命令均被拒绝
  3. 除非
  4. ,否则任何政策都有明确的允许
  5. 任何政策都有明确拒绝。
  6. 基本上,这意味着默认情况下,访问被拒绝,除非您向策略(IAM用户/角色,组或存储桶)添加“允许”语句。但是,如果您明确添加“拒绝”语句(在任何影响策略中),那么“拒绝”语句将否决任何其他“允许”语句。

    了解这一点,您可以使用正确的“拒绝”语句将存储桶策略应用于S3存储桶。这些政策声明将否决任何其他政策声明,适用于访问存储桶的任何人(即使是超级用户的最高级别)。

    所以,你可以尝试这样的事情:

    {
        "Version": "2012-10-17",
        "Id": "blah",
        "Statement": [
            {
                "Sid": "DenyListingOfUserFolder",
                "Effect": "Deny",
                "Principal": "*",
                "Action": "s3:ListBucket",
                "Resource": "arn:aws:s3:::block-test",
                "Condition": {
                    "StringNotLike": {
                        "s3:prefix": [
                            "",
                            "home/",
                            "home/${aws:username}/*"
                        ]
                    }
                }
            }
        ]
    }
    

    此政策将拒绝任何人列出除根文件夹,“home”文件夹和“home / their user name”文件夹之外的任何文件夹中的内容。

    使用“拒绝”节目时要小心。 错误的政策可能会将您锁定在自己的存储桶中,并且您需要AWS支持才能删除该政策。