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

stk*_*flw 2 google-cloud-platform gcloud google-cloud-iam

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

例如,我使用新创建的服务帐户将映像推送到 Google Container Registry,但收到错误消息,指出此服务帐户没有storage.buckets.get权限。使用 CLI 授予此特定权限的最简单方法是什么?

Max*_*xim 7

您不能直接向服务帐号授予权限,这不是 Google Cloud IAM 的工作方式。仅将角色分配给服务帐户、用户或组,这些服务帐户、用户或组通常包含一组权限。

如果您希望角色只包含一个权限,或者只包含您感兴趣的权限,您可以考虑创建一个自定义角色,它允许您指定要授予定义的角色的权限以便在更细粒度的级别上限制访问。然后,将该自定义角色分配给服务帐户:

  1. 使用gcloudCLI您可以创建自定义角色gcloud iam roles create,即:

    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
    
    Run Code Online (Sandbox Code Playgroud)

    这将创建一个带有 ID 的自定义角色bucketViewer,用于项目 ID example-project-id-1,仅包含权限 storage.buckets.get。根据需要并相应地替换这些值。

  2. 完成后,您还可以 使用以下命令使用单个命令分配此自定义角色gcloudgcloud 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'
    
    Run Code Online (Sandbox Code Playgroud)

    替换example-project-id-1为您的项目 ID,以及 test-proj1@example.domain.com您要为其分配角色的服务帐号的实际名称。