使用 Python API 以最低权限从 Google Cloud Storage 读取数据
Posted
技术标签:
【中文标题】使用 Python API 以最低权限从 Google Cloud Storage 读取数据【英文标题】:Using the Python API to read from Google Cloud Storage with minimal permissions 【发布时间】:2021-12-24 22:31:11 【问题描述】:我想使用 Python 从存储中下载 blob。示例显示此代码:
from google.cloud import storage
client = storage.Client()
bucket = client.get_bucket(BUCKETNAME)
blob = bucket.get_blob(BLOBNAME)
raw_bytes = blob.download_as_bytes()
虽然这可行,但它不仅需要授予“存储对象查看器”角色 (roles/storage.objectViewer
) 的 storage.objects.get
权限,还需要 storage.buckets.get
执行 get_bucket 行的权限。此权限由听起来过于强大或过时的其他角色授予,例如“Storage Admin”或“Storage Legacy Bucket Reader”。
有没有办法改变 Python 代码,只需要storage.objects.get
权限?似乎可能落后于 Python API 的 JSON API 允许这样做:https://cloud.google.com/storage/docs/json_api/v1/objects/get
最好的,鲍里斯
【问题讨论】:
1) 您可以创建自定义 IAM 角色。 2) Storage Legacy Bucket Reader 名称中的旧版并不意味着不再推荐或支持的旧版。它指的是在 IAM 开发之前就存在的权限。在 IAM 之前,OAuth Scopes 是授权机制。 但问题仍然存在:如何在没有 storage.buckets.get 权限的情况下使用 Python 读取 blob?如果我可以使用 JSON API 做到这一点,如果 Python API 的实现阻止了它,那将是可悲的。 【参考方案1】:在示例代码中,桶语句bucket = client.get_bucket(BUCKETNAME)用于列出桶操作。
如果您要将获得的值作为响应输出,而不是执行 client.get_bucket,则可以将其作为 静态值 传递。 通过使用静态值,您将不会使用需要 storage.buckets.get 权限的 client.get_bucket 操作。
您也可以参考类似的*** case。
【讨论】:
非常感谢!以上是关于使用 Python API 以最低权限从 Google Cloud Storage 读取数据的主要内容,如果未能解决你的问题,请参考以下文章
Cloudformation 的最低权限 AWS IAM 策略
Google Ads API 的 Google OAuth 问题 - python