各种IAM用户正在共享对S3存储桶的访问权限。 S3存储桶具有按用户分隔的内容,因此每个用户都有他们可以访问的唯一区域。
例如:
example-bucket
。UserOne
。该用户被标记为sampleTag=u11111
。UserTwo
。该用户被标记为sampleTag=u22222
。我想编写一个IAM策略,以便:
UserOne
有权读取和写入s3://example-bucket/u11111/*
的内容,并从s3://example-bucket/config/u11111/
读取内容UserTwo
有权读取和写入s3://example-bucket/u22222/*
的内容,并从s3://example-bucket/config/u22222/
读取内容请注意,S3键在路径中包含sampleTag
的值。
我希望可以将此单一策略应用于整个IAM用户组,而不必为每个用户都包含单独的策略。
我希望这可以归功于${aws:PrincipalTag/sampleTag}
,我认为它将在资源字符串的那个位置注入标签值。但是在使用了策略模拟器之后,似乎并没有实现这一目标。
当前政策如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets"
],
"Resource": "arn:aws:s3:::*"
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::example-bucket",
"arn:aws:s3:::example-bucket-test"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::example-bucket",
"arn:aws:s3:::example-bucket-test"
],
"Condition": {
"StringEquals": {
"s3:prefix": [
"",
"${aws:PrincipalTag/sampleTag}/"
],
"s3:delimiter": ["/"]
}
}
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::example-bucket",
"arn:aws:s3:::example-bucket-test"
],
"Condition": {
"StringLike": {
"s3:prefix": ["${aws:PrincipalTag/sampleTag}/*"]
}
}
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectAcl",
"s3:GetObjectVersion",
"s3:GetObjectVersionAcl"
],
"Resource": [
"arn:aws:s3:::example-bucket/config/${aws:PrincipalTag/sampleTag}/*",
"arn:aws:s3:::example-bucket-test/config/${aws:PrincipalTag/sampleTag}/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:GetObjectVersion",
"s3:GetObjectVersionAcl",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::example-bucket/${aws:PrincipalTag/sampleTag}/*",
"arn:aws:s3:::example-bucket-test/${aws:PrincipalTag/sampleTag}/*"
]
}
]
}
我认为最后两项政策无效。我找不到文档说明您是否可以将变量嵌入Resource
字符串中,但是s3:prefix
似乎不适用于GetObject
或PutObject
操作-因此,我不确定如何进一步限制这些权限的范围。
任何关于错在哪里或如何实现的想法都将受到赞赏!
答案 0 :(得分:0)
您是对的,后两项政策无效。
根据documentation aws:PrincipalTag/tag-key
与string operators 一起使用,因此aws:PrincipalTag/tag-key
的使用仅在Condition
策略元素内起作用。 / p>
此外,s3:prefix
条件键仅适用于ListBucket
和ListBucketVersions
动作:https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazons3.html#amazons3-policy-keys
答案 1 :(得分:0)
我认为可以在策略的Ressource属性中使用$ {aws:PrincipalTag}。只需查看IAM的docs。该示例使用PrincipalTag作为Ressource值的最后一部分。
(只需使用Strg + F并在文档网站上键入PrincipalTag即可找到示例)