向服务账号授予角色

开发者预览和部署应用时,可以使用现有的服务账号,也可以让 App Design Center 自动创建新的服务账号。如果您希望开发者使用您的服务账号,则必须执行以下操作:

  • 向服务账号和用户账号添加 IAM 政策绑定。
  • 向服务账号授予部署每项资源所需的角色
  • 向服务账号添加权限,以便在创建该服务账号的项目之外进行部署。
  • 更新组织政策,以允许跨项目使用服务账号。

如需配置服务账号,请执行以下操作:

  1. 为服务账号的服务代理添加 roles/iam.serviceAccountUser 角色的 IAM 政策绑定:

    gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \
        --member="serviceAccount:service-SERVICE_ACCOUNT_PROJECT_NUMBER@gcp-sa-designcenter.iam.gserviceaccount.com" \
        --role="roles/iam.serviceAccountUser"
    

    替换以下内容:

    • SERVICE_ACCOUNT_EMAIL:您的服务账号电子邮件地址。 例如 my-service-account@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com
    • SERVICE_ACCOUNT_PROJECT_ID:包含您的服务账号的项目的项目 ID。
    • SERVICE_ACCOUNT_PROJECT_NUMBER:包含您的服务账号的项目的项目编号。
  2. 为用户向您的服务账号添加 roles/iam.serviceAccountUser 角色的 IAM 政策绑定:

    gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \
        --member="user:USER_EMAIL" \
        --role="roles/iam.serviceAccountUser"
    

    替换以下内容:

    • SERVICE_ACCOUNT_EMAIL:您的服务账号电子邮件地址。 例如 my-service-account@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com
    • USER_EMAIL:执行部署的用户的电子邮件地址。
  3. 在包含您的服务账号的项目中,为包含您的空间的管理项目添加所需服务代理角色的 IAM 政策绑定:

    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member="serviceAccount:service-MANAGEMENT_PROJECT_NUMBER@gcp-sa-designcenter.iam.gserviceaccount.com" \
        --role="roles/apphub.editor"
    
    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member="serviceAccount:service-MANAGEMENT_PROJECT_NUMBER@gcp-sa-designcenter.iam.gserviceaccount.com" \
        --role="roles/config.agent"
    
    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member="serviceAccount:service-MANAGEMENT_PROJECT_NUMBER@gcp-sa-designcenter.iam.gserviceaccount.com" \
        --role="roles/serviceusage.serviceUsageAdmin"
    

    替换以下内容:

    • SERVICE_ACCOUNT_PROJECT_ID:包含您的服务账号的项目的项目 ID。
    • MANAGEMENT_PROJECT_NUMBER:包含您的空间的管理项目的项目编号。
  4. 在具有服务账号的项目中,确保未强制执行 iam.disableCrossProjectServiceAccountUsage 组织政策限制条件。默认情况下,系统会强制执行此限制条件。

    如需停用组织政策限制条件的强制执行,请运行以下命令:

    gcloud resource-manager org-policies disable-enforce \
       iam.disableCrossProjectServiceAccountUsage \
       --project=SERVICE_ACCOUNT_PROJECT_ID
    

    替换以下内容:

    • SERVICE_ACCOUNT_PROJECT_ID:包含您的服务账号的项目的项目 ID。
  5. 为您的服务账号授予在项目中部署资源所需的角色。开发者部署应用时,系统会显示所需的角色。

    例如,如需授予 roles/run.admin 角色,请添加以下政策绑定:

    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member="serviceAccount:service-DEPLOYMENT_PROJECT_NUMBER@gcp-sa-designcenter.iam.gserviceaccount.com" \
        --role="roles/run.admin"
    

    替换以下内容:

    • SERVICE_ACCOUNT_PROJECT_ID:包含您的服务账号的项目的项目 ID。
    • DEPLOYMENT_PROJECT_NUMBER:您要部署资源的项目对应的项目编号。
  6. 应用设计中心使用 Infrastructure Manager 在控制台中部署应用。如需使用您自己的服务账号通过 Infrastructure Manager 进行部署,请完成授予项目访问权限中的步骤。

  7. 如果您部署的应用包含通过 Developer Connect 连接导入的私有组件,请执行以下操作:

    向您的服务账号授予您创建该服务账号的项目中的 roles/iam.serviceAccountTokenCreator 角色。

    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
        --role="roles/iam.serviceAccountTokenCreator"
    

    替换以下内容:

    • SERVICE_ACCOUNT_PROJECT_ID:包含您的服务账号的项目的项目 ID。
    • SERVICE_ACCOUNT_EMAIL:您的服务账号电子邮件地址。 例如 my-service-account@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com

后续步骤