子文件夹中的GetObject + PutObject的S3策略

时间:2018-04-23 19:38:58

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

我在s3存储桶(my-bucket)中有一个文件夹结构,如下所示:

/folder1/
/folder2/subfolder/
/folder3/subfolder/subsubfolder/
file.ext
file2.ext 
etc...

我希望能够在存储桶的根目录和任何子文件夹(以及子文件夹的子文件夹)中列出,放置和获取所有文件夹和对象。

以下是我对需要这些权限的用户组的当前政策:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": "s3:ListBucket",
        "Resource": [
            "arn:aws:s3:::my-bucket"
        ]
    },
    {
        "Effect": "Allow",
        "Action": "s3:GetObject",
        "Resource": [
            "arn:aws:s3:::my-bucket/*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": "s3:PutObject",
        "Resource": [
            "arn:aws:s3:::my-bucket/*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "s3:ListAllMyBuckets",
            "s3:List*"
        ],
        "Resource": "arn:aws:s3:::*"
    }
]

}

使用此策略我只能获取并将对象放在存储桶的根目录中。但我也希望将对象放入存储桶中的文件夹中。这些文件夹名称是动态的,因此我不能在策略中使用它们。我该怎么做呢?我知道使用S3完全访问策略它可以工作但不是我上面的例子。尝试此操作时,我只是继续获取​​Access Denied错误。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

完整的政策看起来像这样。这适用于AWS S3控制台。

请注意,我没有添加s3:DeleteObject。如果您需要,请不要忘记在s3:PutObjects3:GetObject之外添加它。

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