我正在使用' standard-prefix-{variable}
'在程序中创建S3桶。在尝试创建IAM策略以便用户可以更新,创建,删除帐户中的桶,但仅当桶名包含'标准前缀'时。IE,我不希望允许修改帐户中的其他桶。我找到了许多方法来限制访问一个桶内的资源,给定一个特定的桶名,但没有办法限制访问当桶名改变。
类似于(似乎不起作用):
"Resource": "arn:aws:s3:::standard-prefix-*"
来自AWS文档的示例:
基于用户名的动态名称是我找到的最接近的。但是我需要一个通配符来表示桶名的变量部分:
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "sqs:*",
"Resource": "arn:aws:sqs:us-west-2:*:${aws:username}-queue"
}]
}
指定桶名中的项:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::mybucket"],
"Condition": {"StringLike": {"s3:prefix": ["${aws:username}/*"]}}
},
{
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::mybucket/${aws:username}/*"]
}
]
}
这就是最终有效的策略。在创建桶时,它们会获得一个名称,如standard_prefix-20150101
、standard_prefix-20150515
等。使用此IAM策略的用户可以在这些桶上做任何事情,但不能修改帐户中的其他桶。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "One",
"Effect": "Allow",
"Action": [
"*"
],
"Resource": [
"arn:aws:s3:::standard_prefix-*"
]
},
{
"Sid": "Two",
"Effect": "Allow",
"Action": [
"s3:List*"
],
"Resource": [
"arn:aws:s3:::*"
]
}
]
}