使用 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 策略

权限不足 Gmail API

Google Ads API 的 Google OAuth 问题 - python

使用 PowerShell 调用服务器以运行 python 脚本:无法打开文件 [Errno 13] 权限被拒绝

Android权限gven仅从最低sdk版本开始

作为域帐户运行 Windows 服务所需的最低权限 [关闭]