AWS S3 存储桶策略可阻止对除一个目录之外的所有目录的访问,即使用户拥有完整的 S3 权限

She*_*rms 0 amazon-s3 amazon-web-services

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

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

通过为每个 AWS 用户创建一个带有子目录的 S3 存储桶(仅该用户可以访问)。

我的问题是:是否可以更进一步,专门阻止可能拥有完整 S3 权限的用户从不属于他们的子目录中进行读取?

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

Mat*_*ser 5

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

  • 用户或角色的 IAM 策略,
  • 如果用户位于任何组中,则所有这些组的策略,以及
  • 如果正在访问的存储桶有存储桶策略,则该策略。

所有这些政策的运作方式如下:

  1. 所有命令都会被拒绝,除非
  2. 任何政策都有明确允许,除非
  3. 任何政策都有明确的拒绝。

基本上,这意味着默认情况下,访问被拒绝,除非您向策略(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}/*"
                    ]
                }
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

此策略将拒绝任何人列出除根文件夹、“home”文件夹和“home/其用户名”文件夹之外的任何文件夹中的内容。

使用“拒绝”语句时要小心。错误的策略可能会将您锁定在自己的存储桶之外,并且您需要 AWS 支持来为您删除该策略。