如何使用 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}/*"]
    }
  ]
}

桶上的这个单一策略将允许每个用户访问他们自己的目录。用户名将自动插入到策略中。这意味着您只需要使用一个策略创建一个存储桶。