如何使用gcloud CLI向Cloud IAM服务帐户授予特定权限?

25

我知道可以通过UI(Cloud Console)完成,也可以分配角色。但是如何轻松地授予单个权限呢?

比如,我使用新创建的服务帐户将图像推送到Google容器注册表时,出现错误,提示该服务帐户没有storage.buckets.get权限。在CLI中最简单的方式是授予这个特定的权限是什么?

4个回答

32
你无法直接向服务账户授予权限,因为 Google Cloud IAM 并不支持这种方式。只能将角色分配给服务账户、用户或组,而这些角色通常包含一组权限。
如果你想让一个角色只包含单个权限,或者只包含你感兴趣的权限,那么可以考虑 创建自定义角色。这样可以指定你要赋予该角色的权限,以便在更细粒度上限制访问。然后,将该自定义角色分配给服务账户即可。
  1. Using the gcloud CLI you can create a custom role with gcloud iam roles create, i.e:

    gcloud iam roles create bucketViewer \
        --project example-project-id-1 \
        --title "Bucket viewer" \
        --description "This role has only the storage.buckets.get permission" \
        --permissions storage.buckets.get
    

    This will create a custom role with the ID bucketViewer, for the project ID example-project-id-1, containing only the permission storage.buckets.get. Replace these values as desired and accordingly.

  2. Once done, you can assign this custom role also with a single gcloud command by using gcloud projects add-iam-policy-binding:

    gcloud projects add-iam-policy-binding example-project-id-1 \
          --member='serviceAccount:test-proj1@example.domain.com' \
          --role='projects/example-project-id-1/roles/bucketViewer'
    

    Replace example-project-id-1 with your project ID, and test-proj1@example.domain.com with the actual name of the service account you want to assign the role to.


1
你知道这种笨重的访问管理方法背后的原因吗? - stkvtflw
1
也许创建自定义角色看起来是一个不必要的步骤,但如果你有很多用户,设置角色比为每个用户设置单独的权限更容易。我认为这不适用于用户较少的项目或组织,但当项目的用户数量增加时,这个选项就更有意义了。 - Jan Hernandez
添加绑定的命令在我的情况下不需要引号就可以工作。 - Sachin G.

2
您最好不要分配单个权限。通常需要更多的权限才能实现您想要的目标。
这些权限被组织成角色 - 您可以选择现有的角色,或者像在此答案中描述的那样创建自己的角色:https://dev59.com/WlIH5IYBdhLWcg3wZtfI#59757152
但通常有一些现有的预定义角色。您需要在 Google Cloud 文档中查找它们 - 例如,对于容器注册表https://cloud.google.com/container-registry/docs/access-control - 您的选择可能是存储对象管理员 (roles/storage.objectAdmin)。
这些角色实际上是 Cloud Storage 角色,这些角色在https://cloud.google.com/storage/docs/access-control/iam-roles中进行了描述。

0

轻松将桶访问权限授予服务帐号

简而言之

=> 目标桶行的三个点菜单 => 编辑访问权限
... 不,这不在服务帐号权限选项卡中...

逐步说明

在Google Cloud控制台的图形用户界面中,转到导航菜单并选择“Cloud Storage”(https://console.cloud.google.com/storage/)。 如果尚未选择,请选择“Buckets”。 找到要添加权限的存储桶。 在目标存储桶行上打开“更多操作”/“三个点”的菜单。 选择“编辑访问权限”(下方显示添加新权限和现有权限列表的选项)。 点击“添加主体”。 在“新主体”字段中添加您的服务帐号 - 您可以在以下位置找到其电子邮件ID:“IAM和管理”>“服务帐号”>列“电子邮件”。 在“分配角色”部分,点击“选择角色”字段。 在“云存储”类别中,选择最合适的角色 对于OP的情况,最可能是“Storage Object Viewer”。 警告:“Storage Object User”可以:在GCS中“创建、读取、更新和删除”对象和分段上传。 点击“保存”,等待更新完成的成功消息,然后就可以开始使用了 :-)
最后说明:有些人会感到困惑,并试图在服务账户的权限选项卡中设置这些权限,那是错误的,那些权限是用来访问/管理/查看服务账户本身的!:-)

0
要为服务账户分配授予权限的角色,请使用以下方法:
gcloud projects add-iam-policy-binding \
 <your-project-name-id> \
 --member='serviceAccount:service-<1234567890>@compute-system.iam.gserviceaccount.com' \
 --role='roles/compute.instanceAdmin.v1'

要找到您需要的角色及相应的权限,请查看此处:https://cloud.google.com/iam/docs/understanding-roles 原则是:出于安全原因,尽可能严格,并授予尽可能少的权限。
注意:这里的服务帐号是由Google管理的服务帐号(以service-开头的服务帐号在GCP IAM GUI中不可见)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接