如何使用IAM策略限制ListBucket结果以列出特定文件夹?

时间:2019-06-14 14:41:44

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

我有一个带有多个文件夹/子文件夹的S3存储桶,并且我正在使用CloudBerry Drive向Windows资源管理器中的用户展示存储。出于保密原因,我需要创建一个IAM策略,默认情况下将限制s3:ListBucket操作中显示的结果-使用特定于项目的策略,该策略将在该策略附加到IAM帐户后显示指定的文件夹。

我尝试使用前缀选项(请参见代码块)但未成功,但是我发现的文档表明这应该可行。也许我误解了前缀选项?

以下是S3结构的示例:

arn:aws-cn:s3:::mybucket

projects/
projects/confidential/
projects/my project/
projects/public/

我需要一个默认策略,该策略仅在我在资源管理器中列出project /文件夹的内容时才返回project / public。然后,我需要能够向选定的IAM帐户添加策略,当我列出项目/文件夹的内容时,该策略也将列出项目/我的项目。

{
   "Action": ["s3:GetBucketLocation","s3:ListBucket"],
            "Effect": "Allow",
            "Resource": ["arn:aws-cn:s3:::mybucket"],
            "Condition": {
                "StringLike": {
                    "s3:prefix": ["","projects/public/*"
                    ],
                    "s3:delimiter": ["/"]
                }
            }
        }

到目前为止,使用前缀的各种组合,我可以什么都没有列出,也可以什么都列出-我似乎无法限制返回的内容。这有可能吗?

如果没有-是否有其他方法可以实现同一目标?

谢谢

1 个答案:

答案 0 :(得分:0)

不可能“限制返回的内容”,但是可以限制“要求的内容”。

也就是,您可以Allow前缀为projects/public的请求。不带有 前缀的请求将默认被拒绝。

困难之处在于用户将无法从存储桶的根“导航”到允许的前缀。他们需要转到目录前缀才能列出对象。