使用 storage.objectAdmin 权限在 Python 中写入 GCS 存储桶

Pau*_*aul 6 python google-cloud-storage google-cloud-platform

我正在尝试找出服务帐户将文件写入 GCS 存储桶所需的最小权限集。我以为我可以使用 storage.objectAdmin,但是使用为 Python SDK 提供的示例代码会失败并出现错误:my-service-account@my-project.googleapis.com does not have storage.buckets.get access to my-bucket

client = _get_storage_client()
bucket = client.bucket(current_app.config['CLOUD_STORAGE_BUCKET'])
blob = bucket.blob(filename)

blob.upload_from_string(
    file_stream,
    content_type=content_type)
Run Code Online (Sandbox Code Playgroud)

这是因为 client.bucket 调用实际上从存储桶中读取元数据,而 storage.objectAdmin 不授予该元数据。当我使用 storage.admin 权限时,它会自行修复,但这也允许该帐户删除整个存储桶,这是我不希望的。添加 storage.legacyBucketReader 也可以,但是我使用的是旧角色,我不确定我应该再这样做。

这里的最佳实践是什么?

Dus*_*ram 0

如果您希望尽可能限制,可以添加以下两个权限:

  • roles/storage.objectCreator
  • Viewer

这允许受让人执行以下操作:

  • 可以创建新的对象。
  • 可以列出存储桶
  • 列出时还可以查看存储桶元数据(不包括 ACL)。

更多详细信息请参见:https ://cloud.google.com/storage/docs/access-control/iam-roles