[英]AWS IAM Policy To Restrict S3 Access (Prefix) Based On IAM User's Tag
各種 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
操作——所以我不確定如何限制范圍這些權限。
關於什么是錯誤的或如何實現這一點的任何想法將不勝感激!
我認為可以在策略的 Ressource 屬性中使用 ${aws:PrincipalTag} 。 只需查看 IAM 的文檔即可。 該示例使用 PrincipalTag 作為 Ressource 值的最后一部分。
(只需使用 Strg + F 並在文檔網站上輸入 PrincipalTag 即可找到示例)
你是對的,最后兩個策略不起作用。
根據文檔aws:PrincipalTag/tag-key
與字符串運算符一起使用,因此aws:PrincipalTag/tag-key
用法僅適用於Condition
策略元素。
此外, s3:prefix
條件鍵僅適用於ListBucket
和ListBucketVersions
操作: https : ListBucketVersions
您可以將 PrincipalTag 作為資源的一部分。 這有效。
{
"Sid": "FullPermissionOnlyForPrefix",
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::mybucket/${aws:PrincipalTag/team}*",
"arn:aws:s3:::mybucket/${aws:PrincipalTag/team}/*"
]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.