Google Cloud:如何将服务用户的角色添加到个人存储桶?

Google Cloud: how to add role for service user to an individual bucket?

我创建了一个服务用户:

gcloud iam service-accounts create test01 --display-name "test01"

并且我授予他对 Cloud Storage 的完全访问权限:

gcloud projects add-iam-policy-binding project-name \
--member serviceAccount:test01@project-name.iam.gserviceaccount.com \
--role roles/storage.admin

此代码有效:

from google.cloud import storage
client = storage.Client()

buckets = list(client.list_buckets())
print(buckets)

bucket = client.get_bucket('bucket-name')
print list(bucket.list_blobs())

但是我的项目有多个用于不同环境的存储桶,出于安全原因,我想为每个用户只添加一个 存储桶的访问权限。

documentation 中我找到了这段文字:

When applied to an individual bucket, control applies only to the specified bucket and objects within the bucket.

如何将 roles/storage.admin 应用于单个存储桶?

更新:
我尝试了 ACL,但有一个问题:我添加了对用户的访问权限:

gsutil iam ch \
  serviceAccount:test01@project-name.iam.gserviceaccount.com:legacyBucketOwner \
  gs://bucket-name

用户可以列出所有文件、添加文件、创建文件、查看自己的文件。
但是用户不能查看其他用户的文件。

更新二:
我更新了默认 ACL:

gsutil defacl ch -u \
  test01@project-name.iam.gserviceaccount.com:OWNER gs://bucket-name

我等了很久,另一个用户创建了另一个文件,test01仍然无法访问它。

解法:
我从头开始制作,效果很好:

gsutil mb -p example-logs -c regional -l EUROPE-WEST2 gs://example-dev
gcloud iam service-accounts create test-dev --display-name "test-dev"
gcloud iam service-accounts create test-second --display-name "test-second"
# download 2 json keys from https://console.cloud.google.com/iam-admin/serviceaccounts
gsutil iam ch serviceAccount:test-dev@example-logs.iam.gserviceaccount.com:legacyBucketOwner gs://example-dev
gsutil iam ch serviceAccount:test-second@example-logs.iam.gserviceaccount.com:legacyBucketOwner gs://example-dev
gsutil defacl ch -u test-dev@example-logs.iam.gserviceaccount.com:OWNER gs://example-dev

为了让用户使用存储桶,必须授予该用户使用该存储桶的权限。这是通过权限实现的。权限可以绑定到角色中,我们可以给用户一个角色,这意味着该用户将拥有该角色。

例如,用户可以被授予 "Storage Admin" 角色,然后可以对项目中的所有存储桶执行工作。

如果太多了,那么您可以选择不给用户 "Storage Admin" 然后将不允许它访问任何存储桶。显然,这太局限了。然后您可以做的是选择您希望用户访问的各个存储桶,并为每个存储桶更改这些存储桶的权限。在存储桶的权限内,您可以命名用户和角色。对于那个存储桶,指定用户将具有指定角色。

有关详细信息,请参阅 Creating and Managing Access Control Lists (ACLs)