如何使用 boto3 为 IAM 用户授予对 S3 存储桶的完全权限?
How to grant full permissions on an S3 bucket for an IAM user using boto3?
我正在使用 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
:
"Principal": {"AWS":"arn:aws:iam::account-number-without-hyphens:user/username"}
有关在 S3 存储桶策略中指定 Principal
的更多信息,请参阅 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"
],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::mybucket/${aws:username}/*"]
}
]
}
桶上的这个单一策略将允许每个用户访问他们自己的目录。用户名将自动插入到策略中。这意味着您只需要使用一个策略创建一个存储桶。
我正在使用 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
:
"Principal": {"AWS":"arn:aws:iam::account-number-without-hyphens:user/username"}
有关在 S3 存储桶策略中指定 Principal
的更多信息,请参阅 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"
],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::mybucket/${aws:username}/*"]
}
]
}
桶上的这个单一策略将允许每个用户访问他们自己的目录。用户名将自动插入到策略中。这意味着您只需要使用一个策略创建一个存储桶。