AWS S3 IAM 根据标签授予对存储桶的访问权限

Har*_*ild 12 amazon-s3 amazon-web-services amazon-iam

我试图授予一组用户访问具有特定标签的所有 s3 存储桶的权限,但无法访问所有其他用户。我拼凑起来的政策如下所示:

    {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowListAll",
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Resource": [
                "arn:aws:s3:::*"
            ]
        },
        {
            "Sid": "AllowAllIfGroup",
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Condition: : {
                "StringEquals" : {
                        "s3.ResourceTag/allow-group": "s3-access-group"
                }
            },
            "Resource": [
                "arn:aws:s3:::*",
                "arn:aws:s3:::*/*"
            ]
        }
    ] 
}
Run Code Online (Sandbox Code Playgroud)

我无法让它工作 我尝试针对标记的 Bucket 的 arn 模拟 ListBucket 和 ListAllMyBuckets 的策略,ListAllMyBuckets 有效,ListBucket 失败。

如果我将此策略应用于 ec2(如“如果标签匹配,则授予启动/停止/终止实例”)它就像一个魅力。

这是可能的,还是 S3 不允许以这种方式匹配存储桶?

(进一步说明:我的存储桶设置了“allow-group”和“AllowGroup”标签,我不确定破折号是否有问题)

小智 12

S3 不支持基于存储桶标签(ResourceTag)的条件键,但仅支持对象标签。

在此处查看支持的条件键的完整列表(向下滚动到“Amazon S3 的条件键”):https : //docs.aws.amazon.com/IAM/latest/UserGuide/list_amazons3.html#amazons3-policy-keys

这就是为什么它不起作用。


Joh*_*ein 5

我做了一些实验,也无法得到你想要的结果。

首先,对 S3 ResourceTag 的在线引用很少,但AWS re:Invent 2016: AWS S3 Deep-Dive Hands-On Workshop给出了一个示例:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::EXAMPLE-BUCKET-NAME/*",
            "Condition": {
                "StringEquals": {
                    "S3:ResourceTag/HIPAA": "True"
                }
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

请注意,它使用S3:ResourceTag而不是S3.ResourceTag.

我尝试对存储桶标签对象标签使用此逻辑,但未成功使其工作。我怀疑这ResourceTag是指对象级标签而不是桶级标签,但无法证明这一点,因为它在两种情况下都无法工作。

我使用了这样的策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket",
                "arn:aws:s3:::my-bucket/*"
            ],
            "Condition": {
                "StringEquals": {
                    "s3:ResourceTag/AllowGroup": "s3-access-group"
                }
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

但是,即使存储桶和对象都具有适当的标签,它也不会让我访问对象。