首页 文章

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

提问于
浏览
3

我正在尝试授予一组用户访问具有特定标记的所有s3-buckets,但不能访问所有其他用户 . 我拼凑在一起的政策看起来像这样:

{
    "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:::*/*"
            ]
        }
    ] 
}

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

如果我将此策略调整为ec2(如'grant start / stop / terminate to instances,如果标记匹配'),它就像一个魅力 .

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

(进一步澄清:我的存储桶有标签“allow-group”和“AllowGroup”设置,我不确定短划线是否有问题)

2 回答

  • 1

    S3不支持基于桶标记(ResourceTag)的条件密钥,但仅支持对象标记 .

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

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

  • 2

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

    首先,对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"
                    }
                }
            }
        ]
    }
    

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

    我尝试对 bucket tagobject tag 使用这个逻辑但是没有成功使它工作 . 我怀疑 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"
                    }
                }
            }
        ]
    }
    

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

相关问题