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

时间:2018-12-17 15:27:40

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

我正在尝试找出服务帐户将文件写入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)

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

这里的最佳做法是什么?

2 个答案:

答案 0 :(得分:0)

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

  • roles/storage.objectCreator
  • Viewer

这允许被授予者执行以下操作:

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

此处有更多详细信息:https://cloud.google.com/storage/docs/access-control/iam-roles

答案 1 :(得分:0)

云存储权限同时受Cloud IAMACLs的约束。本质上,您可以同时使用两者来允许服务帐户写入存储桶。这是通过将WRITER权限设置为所需的服务帐户来完成的,例如:

gsutil acl ch -u my-service-account:W gs://my-bucket

将此更改应用到ACL之后,我便能够上传到GCS存储桶。您可以找到更多示例here