从 Google 存储桶下载对象需要哪些角色

What roles are needed to download an object from a Google Storage Bucket

我创建了一个服务帐户,并只给它赋予了 Storage Object Viewer 角色。我想使用此服务帐户使用 python API.

从存储桶下载对象

我已经相应地设置了 GOOGLE_APPLICATION_CREDENTIALS 环境变量,并且可以在存储桶的权限页面上看到相关的服务帐户。

我使用以下代码尝试下载一个对象

from google.cloud import storage
storage_client = storage.Client()
bucket = storage_client.get_bucket(BUCKET_NAME)

但是我在调​​用get_bucket

时收到以下错误
google.api_core.exceptions.Forbidden: 
403 GET https://storage.googleapis.com/storage/v1/b/samplereadbucket?projection=noAcl: 
sample-service-account@project.iam.gserviceaccount.com does not have storage.buckets.get 
access to samplereadbucket.

如果没有 Storage Object Viewer,服务帐户具有 storage.buckets.get 访问权限,我需要设置的最少角色集是什么?

Storage Object Viewer (roles/storage.objectViewer) 仅包含以下权限:

resourcemanager.projects.get
resourcemanager.projects.list
storage.objects.get
storage.objects.list

对于存储桶,您将需要像 Storage Legacy Bucket Reader (roles/storage.legacyBucketReader) 这样的角色(或创建一个 custom role)。这给你:

storage.buckets.get
storage.objects.list

您始终可以使用云控制台中的 IAM & Admin > Roles 选项卡搜索特定权限,以查看当前授予这些权限的角色。

需要将这些角色添加到 SA:

Storage Object Viewer (roles/storage.objectViewer)

   resourcemanager.projects.get
   resourcemanager.projects.list
   storage.objects.get
   storage.objects.list

Storage Legacy Bucket Reader (roles/storage.legacyBucketReader)

   storage.buckets.get 
   storage.multipartUploads.list
   storage.objects.list

或者更好的是创建一个带有角色的自定义角色