Dim*_*tri 8 oauth google-cloud-storage google-cloud-platform
我正在尝试使用 python 获取项目中的存储桶列表:
from google.cloud import storage
storage_client = storage.Client(project='[project-id]')
bucket = storage_client.get_bucket([bucket-name])
blobs = bucket.list_blobs()
for blob in blobs:
print(blob.name)
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误:
[service-account-ID]-compute@developer.gserviceaccount.com does not have storage.buckets.get access to [bucket-name]
Run Code Online (Sandbox Code Playgroud)
无论如何,如果我尝试使用 gsutil(使用相同的服务帐户):
gsutil ls gs://[bucket-name]
Run Code Online (Sandbox Code Playgroud)
我可以获得存储桶中的对象列表......所以我不明白发生了什么,关于我应该做什么的任何线索?
小智 12
要添加到最上面的答案,请注意角色 Roles/storage.legacyBucketReader 也具有 storage.buckets.get 权限。(请参阅https://cloud.google.com/iam/docs/permissions-reference)
因此,要将服务帐户添加到该角色:
gsutil iam ch serviceAccount:john.doe@example.com:legacyBucketReader gs://ex-bucket
Run Code Online (Sandbox Code Playgroud)
Gar*_*ett 11
GCP 有角色和权限的概念。一个角色是像存储管理员(roles/storage.admin)和权限是一样的东西storage.buckets.get。角色由一个或多个权限组成。始终通过将角色应用于主体(用户、服务帐户或组)来授予权限——也就是说,您不能直接向主体分配权限。
您看到的错误是因为storage.buckets.get服务帐户缺少权限- 也就是说,应用于服务帐户的角色都没有授予 storage.buckets.get 权限。您可以列出存储桶的对象(storage.objects.list 权限),而不能列出存储桶(storage.buckets.get 权限)。
因此,您需要分配一个roles/storage.admin具有 storage.buckets.get 权限的角色。如果您想使用最低权限模型进行操作,您还可以创建一个仅具有该权限的自定义角色。
| 归档时间: |
|
| 查看次数: |
10132 次 |
| 最近记录: |