使用跨项目服务账号
本文档介绍了在创建 TPU 虚拟机时如何使用跨项目服务账号。跨项目服务账号是指与 TPU 虚拟机位于不同项目中的服务账号。
这些说明未考虑共享 VPC 或 VPC Service Controls。可能需要进行其他配置或获得其他权限才能支持使用这些服务。如需了解详情,请参阅创建和修改共享 VPC 网络以及 VPC Service Controls 概览。
准备工作
- 创建两个 Google Cloud 项目。一个用于包含 TPU 虚拟机 (
TPU_PROJECT),另一个用于包含服务账号 (SERVICE_PROJECT)。如需了解详情,请参阅创建和管理项目。 - 在
SERVICE_PROJECT中创建服务账号。如需了解详情,请参阅创建和管理服务账号。 - 创建网络并启用专用 Google 访问通道。如需了解详情,请参阅创建和管理网络和为内部 IP 地址配置专用 Google 访问通道。
- 停用以下组织政策。如需了解详情,请参阅组织政策限制条件。
- 两个项目中的
constraints/iam.disableCrossProjectServiceAccountUsage constraints/compute.vmExternalIpAccess(用于通过 SSH 访问虚拟机,可选)
- 两个项目中的
设置 IAM 权限
为您的用户账号授予 Service Account User 角色,以便该账号将服务账号附加到虚拟机实例。
gcloud iam service-accounts add-iam-policy-binding \ SERVICE_ACCOUNT_EMAIL \ --project=SERVICE_PROJECT_ID \ --member=user:USER_EMAIL \ --role=roles/iam.serviceAccountUser替换以下占位符:
SERVICE_ACCOUNT_EMAIL:服务账号的电子邮件地址。SERVICE_PROJECT_ID:包含服务账号的项目的 ID。USER_EMAIL:用户账号的电子邮件地址。
如果您的工作负载在 Docker 容器中运行,请向 Compute Engine 服务代理授予对元数据服务器的访问权限。
gcloud iam service-accounts add-iam-policy-binding \ SERVICE_ACCOUNT_EMAIL \ --project=SERVICE_PROJECT_ID \ --role=roles/iam.serviceAccountTokenCreator \ --member=serviceAccount:service-TPU_PROJECT_ID@compute-system.iam.gserviceaccount.com替换以下占位符:
SERVICE_ACCOUNT_EMAIL:服务账号的电子邮件地址。SERVICE_PROJECT_ID:包含服务账号的项目的 ID。TPU_PROJECT_ID:包含 TPU 虚拟机的项目的 ID。
在 TPU 项目中创建 TPU 虚拟机
在 TPU 项目中使用服务项目中的服务账号创建 TPU 虚拟机。
gcloud compute instances create TPU_NAME \
--machine-type=MACHINE_TYPE \
--image-family=IMAGE_FAMILY \
--image-project=IMAGE_PROJECT \
--service-account=SERVICE_ACCOUNT_EMAIL \
--project=TPU_PROJECT_ID \
--zone=ZONE \
--maintenance-policy=TERMINATE
替换以下占位符:
TPU_NAME:TPU 虚拟机的名称。MACHINE_TYPE:机器类型。IMAGE_FAMILY:TPU 虚拟机的操作系统映像系列。如需安装特定操作系统版本,请使用--image标志。IMAGE_PROJECT:包含操作系统映像的项目。 对于 TPU 映像,此值为ubuntu-os-accelerator-images。SERVICE_ACCOUNT_EMAIL:服务账号的电子邮件地址。TPU_PROJECT_ID:包含 TPU 虚拟机的项目的 ID。ZONE:TPU 虚拟机所在的可用区。