【问题标题】:Properly Granting Users Access to Google Cloud Platform Service Accounts Using the Cloud SDK CLI使用 Cloud SDK CLI 正确授予用户对 Google Cloud Platform 服务帐户的访问权限
【发布时间】:2021-10-30 13:39:59
【问题描述】:

给定一个 Google Cloud Platform (GCP) 服务帐户 $GCP_SERVICE_ACCOUNT_NAME,授予用户以下权限的正确方法是:

  • 使用$GCP_SERVICE_ACCOUNT_NAME 部署作业和虚拟机的权限
  • 管理$GCP_SERVICE_ACCOUNT_NAME的权限

在控制台中使用 GCP Cloud SDK (gcloud) 而不是 this 页面?

换句话说,如果$GCP_SERVICE_ACCOUNT_NAME是在GCP项目$GCP_PROJECT_NAME中创建的:

gcloud iam service-accounts create $GCP_SERVICE_ACCOUNT_NAME \
--description=$GCP_SERVICE_ACCOUNT_DESCRIPTION \
--display-name=$GCP_SERVICE_ACCOUNT_NAME

#=>

Created service account [$GCP_SERVICE_ACCOUNT_NAME].

并通过某个策划角色获得了权限:

gcloud projects add-iam-policy-binding $GCP_PROJECT_NAME \
--member="serviceAccount:$GCP_SERVICE_ACCOUNT_NAME@$GCP_PROJECT_NAME.iam.gserviceaccount.com" \
--role=$GCP_CURATED_ROLE

#=>

Updated IAM policy for project [$GCP_PROJECT_NAME].
bindings:
. . .
- members:
  . . .
  - serviceAccount:$GCP_SERVICE_ACCOUNT_NAME@$GCP_PROJECT_NAME.iam.gserviceaccount.com
  role: $GCP_CURATED_ROLE
  . . .
. . .
etag: . . .
version: 1

什么gcloud 组和命令将授予用户部署作业和虚拟机的权限以及管理$GCP_SERVICE_ACCOUNT_NAME 的权限?

使用 gcloud 创建服务帐户的官方 GCP 文档,发现 here,建议使用 add-iam-policy-binding 命令“允许用户模拟服务帐户”:

gcloud iam service-accounts add-iam-policy-binding \
$GCP_SERVICE_ACCOUNT_NAME@$GCP_PROJECT_NAME.iam.gserviceaccount.com \
--member="user:$GCP_USER_NAME" \
--role="roles/iam.serviceAccountUser"

#=>

Updated IAM policy for serviceAccount [$GCP_SERVICE_ACCOUNT_NAME@$GCP_PROJECT_NAME.iam.gserviceaccount.com].
bindings:
- members:
  - user:$GCP_USER_NAME
  role: roles/iam.serviceAccountUser
etag: . . .
version: 1

与:

gcloud config list account --format="value(core.account)"

#=>

$GCP_USER_NAME

这是否意味着$GCP_USER_NAME 能够使用$GCP_SERVICE_ACCOUNT_NAME 部署作业和虚拟机、管理$GCP_SERVICE_ACCOUNT_NAME 或两者兼而有之?

【问题讨论】:

    标签: google-cloud-platform gcloud google-iam google-cloud-iam google-cloud-sdk


    【解决方案1】:

    绑定roles/iam.serviceAccountUser 策划角色授予$GCP_USER_NAME_ALPHA 使用$GCP_SERVICE_ACCOUNT_NAME 部署作业和虚拟机的权限:

    gcloud iam service-accounts add-iam-policy-binding \
    $GCP_SERVICE_ACCOUNT_NAME@$GCP_PROJECT_NAME.iam.gserviceaccount.com \
    --member="user:$GCP_USER_NAME_ALPHA" \
    --role="roles/iam.serviceAccountUser"
    
    #=>
    
    Updated IAM policy for serviceAccount [$GCP_SERVICE_ACCOUNT_NAME@$GCP_PROJECT_NAME.iam.gserviceaccount.com].
    bindings:
    - members:
      - user:$GCP_USER_NAME_ALPHA
      role: roles/iam.serviceAccountUser
    etag: . . .
    version: 1
    

    绑定roles/iam.serviceAccountAdmin 策划角色授予$GCP_USER_NAME_BETA 管理$GCP_SERVICE_ACCOUNT_NAME 的权限:

    gcloud iam service-accounts add-iam-policy-binding \
    $GCP_SERVICE_ACCOUNT_NAME@$GCP_PROJECT_NAME.iam.gserviceaccount.com \
    --member="user:$GCP_USER_NAME_BETA" \
    --role="roles/iam.serviceAccountAdmin"
    
    #=>
    
    Updated IAM policy for serviceAccount [$GCP_SERVICE_ACCOUNT_NAME@$GCP_PROJECT_NAME.iam.gserviceaccount.com].
    bindings:
    - members:
      - user:$GCP_USER_NAME_BETA
      role: roles/iam.serviceAccountAdmin
    etag: . . .
    version: 1
    

    如果 $GCP_SERVICE_ACCOUNT_NAME 是使用控制台 (here) 而不是 gcloud 创建的,则仍可以通过以下方式验证绑定:

    gcloud iam service-accounts get-iam-policy \
    $GCP_SERVICE_ACCOUNT_NAME@$GCP_PROJECT_NAME.iam.gserviceaccount.com
    
    #=>
    
    bindings:
    - members:
      - user:$GCP_USER_NAME_BETA
      role: roles/iam.serviceAccountAdmin
    - members:
      - user:$GCP_USER_NAME_ALPHA
      role: roles/iam.serviceAccountUser
    etag: . . .
    version: 1
    

    官方 GCP 文档。 确实提到两个角色here,但不要't使用在控制台的服务帐户创建部分中找到的相同语言。 this 页面上也没有“等效命令行”对话框。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-27
      • 2021-04-08
      • 2016-08-09
      • 1970-01-01
      • 2020-07-11
      • 1970-01-01
      • 2018-12-26
      • 1970-01-01
      相关资源
      最近更新 更多