我正在尝试授予一组用户访问具有特定标记的所有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 回答
S3不支持基于桶标记(ResourceTag)的条件密钥,但仅支持对象标记 .
请在此处查看支持的条件键的完整列表(向下滚动至"Condition Keys for Amazon S3"):https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazons3.html#amazons3-policy-keys
这就是为什么它不起作用 .
我做了一些实验,也无法获得你想要的结果 .
首先,对S3 ResourceTag的在线引用很少见,但AWS re:Invent 2016: AWS S3 Deep-Dive Hands-On Workshop给出了一个例子:
请注意,它使用
S3:ResourceTag
而不是S3.ResourceTag
.我尝试对 bucket tag 和 object tag 使用这个逻辑但是没有成功使它工作 . 我怀疑
ResourceTag
是指对象级标记而不是桶级标记,但无法证明这一点,因为它无法在两种情况下都能正常工作 .我使用了这样的政策:
但是,即使存储桶和对象都有适当的标记,它也不会让我访问对象 .