作者:路侑华 | 来源:互联网 | 2023-08-20 15:56
我正在以用户名username
动态创建多个IAM用户,并以username-bucket
作为名称创建S3存储桶。
我想为以username-bucket
为名称创建的s3存储桶上的新创建用户授予完全权限。
我已经阅读了boto3
文档,他们在其中将策略分配给s3
存储桶。
https://boto3.amazonaws.com/v1/documentation/api/latest/guide/s3-example-bucket-policies.html
但是它适用于任何用户。没有选项来传递应该具有存储桶权限的用户名。
在boto3
中有任何这样的选择吗?
与其像在链接的示例中将
设置为Principal
那样,不如使用以下格式将用户指定为*
:
Principal
有关在S3存储桶策略中指定"Principal": {"AWS":"arn:aws:iam::account-number-without-hyphens:user/username"}
的更多信息,请参见the documentation here。
,
替代建议:您可以为每个用户授予在共享存储桶内的目录 的权限,而不是给每个用户自己的存储桶。
这使您可以使用易于管理的 IAM策略变量。
来自IAM Policy Elements: Variables and Tags - AWS Identity and Access Management:
{
"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"
],"Resource": ["arn:aws:s3:::mybucket/${aws:username}/*"]
}
]
}
此存储桶上的单一策略将允许每个用户访问自己的目录。用户名将自动插入到策略中。这意味着您只需要使用一个策略创建一个存储桶即可。