【问题标题】:Writing to GCS bucket in Python with storage.objectAdmin permissions使用 storage.objectAdmin 权限在 Python 中写入 GCS 存储桶
【发布时间】:2019-05-17 23:57:53
【问题描述】:

我正在尝试找出服务帐户将文件写入 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 也可以,但是我正在使用一个旧角色,我不确定我是否应该再做。

这里的最佳做法是什么?

【问题讨论】:

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


    【解决方案1】:

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

    • roles/storage.objectCreator
    • Viewer

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

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

    更多详情:https://cloud.google.com/storage/docs/access-control/iam-roles

    【讨论】:

    • 查看器适用于项目级别,而不仅仅是一个存储桶。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 2022-10-16
      • 2015-01-28
      • 2020-09-17
      相关资源
      最近更新 更多