我创建了一个服务用户:
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中,我找到了此文本:
应用于单个存储桶时,控件仅应用于指定的存储桶和存储桶中的对象。
如何将roles/storage.admin
应用于单个存储桶?
更新:
我尝试了ACL,但是出现问题:我添加了对用户的访问权限:
gsutil iam ch \
serviceAccount:test01@project-name.iam.gserviceaccount.com:legacyBucketOwner \
gs://bucket-name
用户可以列出所有文件,添加文件,创建文件,查看自己的文件。
但是用户无法查看其他用户的文件。
更新2:
我更新了默认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
答案 0 :(得分:2)
为了使用户可以使用存储桶,必须授予该用户使用该存储桶的权限。这是通过权限实现的。权限可以捆绑到角色中,我们可以为用户提供一个角色,这意味着该用户将拥有该角色。
例如,可以为用户分配“存储管理员”角色,然后可以对项目中的所有存储桶执行工作。
如果这太多了,那么您可以选择不给用户“ Storage Admin”,然后将不允许它访问任何存储桶。显然,这太过严格了。然后,您可以选择希望用户访问的各个存储桶,并为每个存储桶更改THOSE存储桶的权限。在存储桶的权限内,您可以命名用户和角色。对于该存储桶,命名用户将具有命名角色。
有关更多详细信息,请参见Creating and Managing Access Control Lists (ACLs)。