如何为S3存储桶中的特定嵌套文件夹创建公共策略?

时间:2019-03-29 18:02:03

标签: amazon-web-services amazon-s3

我有一个S3存储桶,其中有一些文件夹,但是文件夹中的对象将动态创建,因此简单来说,我可以这样说:

main_users/someIDNumber/uploaded

someIDNumber是动态的,每次创建用户时都不同。 现在,我想向“ {up1”}文件夹内的所有对象授予GetObject权限,仅向所有用户提供特定引用,这是我的网站。

我已经在我的存储桶策略中尝试过此操作,但这不起作用:

arn:aws:s3:::mybucketname/main_users/*/uploaded/*

这也是

arn:aws:s3:::mybucketname/main_users/*/uploaded

但是我的网站无法访问。

我该怎么办?

1 个答案:

答案 0 :(得分:1)

对我有用。我做了以下事情:

  • 将文件上传到:s3://my-bucket/main_users/42/uploaded/foo.txt
  • 使用下面显示的策略创建了一个stack IAM用户
  • aws s3 cp s3://my-bucket/main_users/42/uploaded/foo.txt . --profile stack
  • 文件复制成功

该政策是:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::my-bucket/main_users/*/uploaded/*"
        }
    ]
}

当我尝试使用以下方法复制文件时失败:

aws s3 cp s3://my-bucket/main_users/24/something/foo.txt . --profile stack

请注意,如果您尝试列出(ls)文件夹,则将需要其他策略。以上是对GetObject的测试,而不是列出存储桶。

尽管我将这些策略放在特定的IAM用户上,但它在存储桶策略中的工作原理应相同。只需确保您已编辑 S3阻止公共访问,以使存储桶中的内容可以公开访问。