【问题标题】:What roles are needed to download an object from a Google Storage Bucket从 Google 存储桶下载对象需要哪些角色
【发布时间】:2019-11-13 15:53:27
【问题描述】:

我创建了一个服务帐户,并且只给它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 访问权限?

【问题讨论】:

    标签: python google-cloud-platform google-cloud-storage google-cloud-python google-cloud-iam


    【解决方案1】:

    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 选项卡搜索特定权限,以查看当前授予这些权限的角色。

    【讨论】:

    • 我被Legacy 这个词吓坏了,并认为我不应该使用这些角色。不过,这看起来是正确的答案!
    • 您也可以只创建一个自定义角色。
    • 这里还有一个指向未来任何人的存储角色文档的链接:cloud.google.com/iam/docs/understanding-roles#storage-roles
    • 我还认为我不需要/不应该需要创建自定义角色来执行像从存储桶下载对象这样常见的事情。 =P
    • 当然,我想您也可以使用 Storage Admin 角色,但这似乎也是错误的 :)
    猜你喜欢
    • 2014-10-25
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 2020-04-25
    相关资源
    最近更新 更多