我不完全确定这是否可行,但我想创建一个类似于以下描述的设置:
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组/角色,因此帐户中的任何用户都可以自动应用这些权限,而无需将其添加到组中 .
当IAM用户/角色访问S3存储桶时,将应用以下所有策略:
用户's or role'的IAM政策,
如果用户在任何组中,则包含所有这些组的策略,以及
如果正在访问的存储桶具有存储桶策略,则该策略 .
所有这些政策的工作原理如下:
除非所有命令都被拒绝
任何政策都有明确的允许,除非
任何政策都明确拒绝 .
基本上,这意味着默认情况下,拒绝访问,除非您向策略(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”文件夹之外的任何文件夹中的内容 .
使用"Deny" staetments时要小心 . The wrong policy could lock you out of your own bucket and you'll need AWS support to remove the policy for you.
1 回答
当IAM用户/角色访问S3存储桶时,将应用以下所有策略:
用户's or role'的IAM政策,
如果用户在任何组中,则包含所有这些组的策略,以及
如果正在访问的存储桶具有存储桶策略,则该策略 .
所有这些政策的工作原理如下:
除非所有命令都被拒绝
任何政策都有明确的允许,除非
任何政策都明确拒绝 .
基本上,这意味着默认情况下,拒绝访问,除非您向策略(IAM用户/角色,组或存储桶)添加“允许”语句 . 但是,如果您明确添加“拒绝”语句(在任何影响策略中),那么“拒绝”语句将否决任何其他“允许”语句 .
知道了这一点,您可以使用正确的“拒绝”语句将存储桶策略应用于S3存储桶 . 这些政策声明将推翻任何其他政策声明,适用于访问存储桶的任何人(即使是最超级用户) .
所以,你可以尝试这样的事情:
此策略将拒绝任何人列出除根文件夹,“home”文件夹和“home / their user name”文件夹之外的任何文件夹中的内容 .
使用"Deny" staetments时要小心 . The wrong policy could lock you out of your own bucket and you'll need AWS support to remove the policy for you.