【问题标题】:Google Cloud Platform IAM setting to allow project level RO access to buckets谷歌云平台 IAM 设置允许项目级 RO 访问存储桶
【发布时间】:2018-10-09 22:22:23
【问题描述】:

我想授予服务帐号对我项目中每个存储桶的只读访问权限。这样做的最佳做法是什么?

here 的答案建议其中之一:

  • 创建自定义 IAM 策略
  • 为每个存储桶分配旧版存储桶查看者角色
  • 使用 ACL 允许 bucket.get 访问

这些对我来说似乎都不理想,因为:

  • 授予只读访问权限似乎太常见了,需要自定义策略
  • 在名称中加上“Legacy”会让人觉得此权限将很快停用,并且任何新的存储桶都需要修改
  • Google 推荐 IAM over ACL,任何新的存储桶都需要修改

有什么方法可以避免bucket.get 要求并且仍然可以访问存储桶中的对象吗?还是有另一种我不知道的提供访问权限的方法?

【问题讨论】:

    标签: google-cloud-storage service-accounts google-cloud-iam


    【解决方案1】:

    最接近的预构建角色是对象查看器。这允许列出和读取对象。它不包括 storage.buckets.get 权限,但这不是通常需要的 - 弄乱存储桶元数据实际上是一种管理功能。它也不包括 storage.buckets.list ,它更常用,但仍然不是 GCS 正常使用模式的一部分 - 通常在设计应用程序时,您有固定数量的存储桶用于特定目的,因此列表不是有用。

    如果您确实想提供服务帐户存储桶列表并获得权限,则必须在项目上创建自定义角色。这很简单,你可以这样做:

    gcloud iam roles create StorageViewerLister --project=$YOUR_POJECT --permissions=storage.objects.get,storage.objects.list,storage.buckets.get,storage.buckets.list
    gcloud projects add-iam-policy-binding $YOUR_PROJECT --member=$YOUR_SERVICE_ACCOUNT --role=StorageViewerLister
    

    【讨论】:

    • 我的问题可能过于笼统。我正在使用 python 客户端库来访问我的存储桶中的对象。我用client = google.cloud.storage.Client() 创建了一个GCS 客户端。据我所知,要获取对象,我必须首先通过client.get_bucket(bucket_name) 获取它们所在的存储桶。有没有办法避免这种情况?
    • 我认为需要首先获取存储桶的模式非常普遍,这就是为什么我如此普遍地提出这个问题的原因。这是python特有的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    • 2016-12-19
    相关资源
    最近更新 更多