为实例配置服务身份

本页面介绍了如何配置和查看用于控制从 Cloud Run 实例对 API 进行的访问的服务身份。 Cloud de Confiance by S3NS

Cloud Run 实例具有服务身份,该身份用作经过身份验证的账号,用于从 Cloud Run 实例容器访问 Cloud de Confiance by S3NS API。如需详细了解服务身份, 请参阅服务身份简介 指南。

服务身份的使用方式

在 Cloud Run 中,服务身份是同时作为资源和主账号的服务账号。

  • 服务身份作为资源:如需将服务帐号附加为 服务身份,部署者账号 必须具有对该服务身份资源的访问权限。某些操作(例如创建或更新实例)要求部署者账号具有服务身份资源的权限。
  • 服务身份作为主账号:如需从 Cloud Run 实例访问 Cloud de Confiance API ,必须为 服务身份授予实例执行操作所需的角色或权限。

下一部分介绍了所需的角色,以用于向部署者账号授予对服务身份资源的访问权限以及授予服务账号主账号所需的角色或权限。

所需的角色

您或您的管理员必须为部署者账号和服务身份授予 IAM 角色和权限。

点击可查看部署者账号所需的角色

如需获得将服务帐号作为实例的服务身份进行关联所需的权限,您或您的管理员必须针对用作服务身份的服务帐号,向部署者账号授予 Service Account User 角色 (roles/iam.serviceAccountUser)。

此预定义角色包含针对实例关联服务帐号所需的 iam.serviceAccounts.actAs 权限。您也可以通过配置自定义角色或使用其他预定义角色来获取此权限。

如需了解如何针对服务身份向部署者账号授予此角色 ,请参阅 部署权限。 如果服务帐号与 Cloud Run 实例处于不同的项目中,您或您的管理员 还必须为 Cloud Run 服务代理配置 IAM 角色并设置组织政策。如需了解详情,请参阅 使用其他项目中的服务账号

点击可查看服务身份所需的角色

如需允许服务身份从 Cloud Run 访问 Cloud de Confiance API,您或您的管理员必须为服务身份授予您要执行的操作所需的权限或角色。如需访问特定 Cloud 客户端库,请参阅服务的 Cloud de Confiance 文档。 Cloud de Confiance

如果 Cloud Run 实例无法访问 其他 Cloud de Confiance 服务,则无需为服务 身份授予任何角色或权限,并且可以使用已分配给项目的默认服务 账号。

获取创建专用服务账号的建议

从 Cloud de Confiance 控制台创建新的服务账号时,可选的“向此服务账号授予对项目的访问权限”步骤适用于所需的任何其他访问权限。例如,一项 Cloud Run 服务可能会调用另一项专用 Cloud Run 服务,或访问 Cloud SQL 数据库,两者都需要特定的 IAM 角色。如需了解详情,请参阅有关 管理访问权限 的文档。

Recommender 服务还会自动提供使用最低必需权限集创建专用服务账号的建议。

配置服务身份

如果您尚未创建服务帐号,则可以在 用户代管式服务账号中 IAM,或在 Cloud Run 中创建。

如需配置服务身份,请使用 gcloud CLI 或 YAML:

gcloud

如果您尚未创建服务帐号,请在 IAM 中创建用户管理的 服务帐号。

您可以使用以下命令更新现有实例 以配置服务帐号:

gcloud beta run instances update INSTANCE --service-account SERVICE_ACCOUNT

替换以下内容:

  • INSTANCE:实例的名称。
  • SERVICE_ACCOUNT:与 新身份关联的服务帐号。此值是服务帐号的邮箱 ,格式为 SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com,其中 SERVICE_ACCOUNT_NAME 是服务 账号名称,PROJECT_ID 是您的项目 ID。 您还可以在部署期间使用以下命令设置服务账号:
gcloud beta run instances deploy INSTANCE --image IMAGE_URL --service-account SERVICE_ACCOUNT

替换以下内容:

  • INSTANCE:实例的名称。
  • IMAGE_URL:对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/hello:latest
  • SERVICE_ACCOUNT:与新身份关联的服务帐号:此值是服务帐号的邮箱,格式为 SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com

YAML

  1. 如果您要创建新的实例,请跳过此步骤。 如果您要更新现有实例,请下载其 YAML 配置

    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. 以下示例包含 YAML 配置:

    apiVersion: run.googleapis.com/v1
    kind: Instance
    metadata:
      name: INSTANCE
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      serviceAccountName: SERVICE_ACCOUNT

    替换以下内容:

    • INSTANCE:Cloud Run 实例的名称。
    • SERVICE_ACCOUNT:与 新身份关联的服务帐号。此值是服务账号的邮箱地址,例如 SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com
  3. 使用以下命令创建或更新实例:

    gcloud beta run instances replace instance.yaml

使用其他项目中的服务账号

如果您配置的服务账号来自与 Cloud Run 资源不同的 Cloud de Confiance 项目,请执行以下操作:

  1. 您或您的管理员必须针对用作服务身份的服务账号授予 Service Account User 角色 (roles/iam.serviceAccountUser)。

    控制台

    1. 前往 Cloud de Confiance 控制台的服务账号页面:

      转到“服务账号”

    2. 选择您要用作服务身份的服务账号电子邮件地址。

    3. 点击具有访问权限的主账号 标签页。

    4. 点击 授予访问权限按钮。

    5. 输入与您要向其授予 Admin 或 Developer 角色的主账号匹配的部署者账号电子邮件地址。

    6. 请选择一个角色下拉菜单中,选择服务账号 > Service Account User 角色。

    7. 点击保存

    gcloud

    使用 gcloud iam service-accounts add-iam-policy-binding 命令,将突出显示的变量替换为适当的值:

    gcloud iam service-accounts add-iam-policy-binding \
        SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.s3ns.iam.gserviceaccount.com \
        --member="PRINCIPAL" \
        --role="roles/iam.serviceAccountUser"

    替换以下内容:

    • SERVICE_ACCOUNT_NAME:您要将 Cloud Run 资源关联到的服务帐号的名称。
    • SERVICE_ACCOUNT_PROJECT_ID:服务帐号所在的项目 ID。
    • PRINCIPAL:要为其添加绑定的部署者账号,使用 user|group|serviceAccount:emaildomain:domain 格式,例如:

      • user:test-user@gmail.com
      • group:admins@example.com
      • serviceAccount:test123@example.domain.com
      • domain:example.domain.com
  2. 您或您的管理员必须针对用作服务身份的服务账号,向 Cloud Run 资源的服务代理授予 Service Account Token Creator 角色 (roles/iam.serviceAccountTokenCreator)。服务代理遵循 service-PROJECT_NUMBER@serverless-robot-prod.s3ns-system.iam.gserviceaccount.com 格式。

    控制台

    1. 前往 Cloud de Confiance 控制台的服务账号页面:

      转到“服务账号”

    2. 选择您要用作服务身份的服务账号电子邮件地址。

    3. 点击权限标签页。

    4. 点击 授予访问权限按钮。

    5. 输入服务代理电子邮件地址。例如:service-PROJECT_NUMBER@serverless-robot-prod.s3ns-system.iam.gserviceaccount.com

    6. 请选择一个角色下拉菜单中,选择服务账号 > Service Account Token Creator 角色。

    7. 点击保存

    gcloud

    使用 gcloud iam service-accounts add-iam-policy-binding 命令:

    gcloud iam service-accounts add-iam-policy-binding \
        SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.s3ns.iam.gserviceaccount.com \
        --member="serviceAccount:service-CLOUD_RUN_RESOURCE_PROJECT_NUMBER@serverless-robot-prod.s3ns-system.iam.gserviceaccount.com" \
        --role="roles/iam.serviceAccountTokenCreator"

    替换以下内容:

    • SERVICE_ACCOUNT_NAME:您要将 Cloud Run 资源关联到的服务帐号的名称。
    • SERVICE_ACCOUNT_PROJECT_ID:服务帐号所在的项目 ID。
    • CLOUD_RUN_RESOURCE_PROJECT_NUMBER:Cloud Run 所在的项目编号。

    该命令会输出用户代管式服务账号的更新后的允许政策。

  3. 包含该服务账号的项目要求将组织政策 iam.disableCrossProjectServiceAccountUsage 在文件夹级层设置为 false 或未实施,或从项目级层设置继承该配置。默认情况下,该设置为 true

    控制台

    1. 前往 Cloud de Confiance 控制台中的组织政策页面:

      转到组织政策

    2. 从项目选择器中,选择要为其停用跨项目服务账号使用情况的组织和项目。

    3. 选择停用跨项目服务账号使用情况政策。

    4. 点击管理政策

    5. 政策来源下方,选择覆盖父资源的政策

    6. 点击添加规则

    7. 强制执行下方,选择关闭

    8. 如需强制执行政策,请点击设置政策

    gcloud

    在具有服务账号的项目中,确保未强制执行 iam.disableCrossProjectServiceAccountUsage 组织政策限制条件。默认情况下,系统会强制执行此限制条件。

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

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

    SERVICE_ACCOUNT_PROJECT_ID 替换为包含服务账号的项目 ID。

您可以将角色成员资格直接应用于服务账号资源,也可以从资源层次结构中的更高级层继承。

后续步骤

  • 如需详细了解服务账号,请参阅 IAM 服务账号用户代管式服务指南。
  • 如果您的 Cloud Run 服务、作业或实例访问 Google API 或 Cloud de Confiance 服务,您必须将服务帐号配置为 服务身份。了解详情