使用客户管理的加密密钥 (CMEK) 通过 Compute Engine 加密 TPU 虚拟机启动磁盘

默认情况下,Cloud TPU 会对静态客户内容进行加密。Cloud TPU 会为您处理加密,您无需执行任何其他操作。此选项称为“Google 默认加密”

如果您想要控制加密密钥,则可以将 Cloud KMS 中客户管理的加密密钥 (CMEK) 与集成 CMEK 的服务(包括 Cloud TPU)结合使用。使用 Cloud KMS 密钥时,您可以控制其保护级别、位置、轮替时间表、使用和访问权限以及加密边界。此外,您还可使用 Cloud KMS 查看审核日志并控制密钥生命周期。这样您就可以在 Cloud KMS 中控制和管理用于保护数据的对称密钥加密密钥 (KEK),而不是由 Google 拥有和管理这些密钥。

使用 CMEK 设置资源后,访问 Cloud TPU 资源的体验与使用 Google 默认加密功能类似。 如需详细了解加密选项,请参阅客户管理的加密密钥 (CMEK)

如需使用 CMEK,请创建密钥环。 在创建 TPU 虚拟机或切片的同一位置创建密钥环。例如,us-central1-a 可用区中的 TPU 虚拟机只能使用 us-central1 区域中的密钥。

接下来,在密钥环中创建密钥。创建 CMEK 后,允许 Compute Engine 服务账号访问您的密钥。

授予使用密钥的权限

向 Google Cloud 项目中的 Compute Engine 服务代理授予 Cloud KMS 密钥的 Cloud KMS CryptoKey Encrypter/Decrypter (roles/cloudkms.cryptoKeyEncrypterDecrypter) IAM 角色。授予此角色可让 Compute Engine 服务访问和使用加密密钥。

如需向 Compute Engine 服务代理授予 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色,请选择以下选项之一:

gcloud

运行以下命令:

gcloud kms keys add-iam-policy-binding KEY_NAME \
    --location LOCATION \
    --keyring RING_NAME \
    --member serviceAccount:service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
    --project KEY_PROJECT_ID

替换以下内容:

  • KEY_NAME:密钥的名称。
  • LOCATION:您创建密钥环的位置。
  • RING_NAME:密钥环的名称。
  • PROJECT_NUMBER:您的 Google Cloud 项目编号。
  • KEY_PROJECT_ID:您的密钥项目 ID。

控制台

  1. 在 Google Cloud 控制台中,前往密钥管理页面。

    前往密钥管理

  2. 点击包含相应密钥的密钥环名称。

  3. 点击要修改的密钥名称。

  4. 点击权限

  5. 点击授予访问权限。 系统随即会打开授予访问权限窗格。

  6. 新的主账号字段中,输入 Compute Engine 服务代理名称:

    service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com
    

    PROJECT_NUMBER 替换为您的 Google Cloud 项目编号。

  7. 选择角色菜单中,选择 Cloud KMS CryptoKey Encrypter/Decrypter

  8. 点击保存

创建使用 CMEK 的 TPU 虚拟机

您可以在创建 TPU 虚拟机或为代管式实例组 (MIG) 创建实例模板时,使用 --boot-disk-kms-key 标志指定 CMEK。

创建使用 CMEK 的单个 TPU 虚拟机实例

如需在创建单个 TPU 虚拟机时指定 CMEK,请在 gcloud compute instances create 命令中使用 --boot-disk-kms-key 标志:

  gcloud compute instances create TPU_NAME \
    --machine-type=MACHINE_TYPE \
    --image-family=IMAGE_FAMILY \
    --image-project=IMAGE_PROJECT \
    --zone=ZONE \
    --maintenance-policy=TERMINATE \
    --boot-disk-kms-key=projects/KEY_PROJECT_ID/locations/REGION/keyRings/RING_NAME/cryptoKeys/KEY_NAME

替换以下占位符:

  • TPU_NAME:TPU 虚拟机的名称。
  • MACHINE_TYPE:TPU 虚拟机的机器类型,例如 ct6e-standard-8t
  • IMAGE_FAMILY:TPU 虚拟机的操作系统映像系列。如果您想安装特定版本的操作系统,请使用 --image 标志。如需详细了解操作系统映像,请参阅操作系统映像
  • IMAGE_PROJECT:包含操作系统映像的项目。 对于 TPU 映像,此值为 ubuntu-os-accelerator-images
  • ZONE:TPU 虚拟机的可用区,例如 us-central1-b
  • KEY_PROJECT_ID:包含加密密钥的项目。
  • REGION:您创建密钥环的地区。
  • RING_NAME:密钥环的名称。
  • KEY_NAME:密钥的名称。

创建具有单主机切片和 CMEK 的 MIG

如需将 CMEK 与 MIG 搭配使用,请在创建实例模板时指定密钥。

  1. 使用 --boot-disk-kms-key 标志创建实例模板:

    gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
        --machine-type=MACHINE_TYPE \
        --maintenance-policy=TERMINATE \
        --image-family=IMAGE_FAMILY \
        --image-project=IMAGE_PROJECT \
        --boot-disk-kms-key=projects/KEY_PROJECT_ID/locations/REGION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
    

    替换以下占位符:

    • INSTANCE_TEMPLATE_NAME:实例模板的名称。
    • MACHINE_TYPE:TPU 虚拟机的机器类型,例如 ct6e-standard-8t
    • IMAGE_FAMILY:TPU 虚拟机的操作系统映像系列。如果您想安装特定版本的操作系统,请使用 --image 标志。如需详细了解操作系统映像,请参阅操作系统映像
    • IMAGE_PROJECT:包含操作系统映像的项目。 对于 TPU 映像,此值为 ubuntu-os-accelerator-images
    • KEY_PROJECT_ID:包含加密密钥的项目。
    • REGION:您创建密钥环的地区。
    • RING_NAME:密钥环的名称。
    • KEY_NAME:密钥的名称。
  2. 使用模板创建 MIG:

    gcloud compute instance-groups managed create MIG_NAME \
        --size=MIG_SIZE \
        --template=INSTANCE_TEMPLATE_NAME \
        --zone=ZONE \
        --size=MIG_SIZE
    

    替换以下占位符:

    • MIG_NAME:MIG 的名称。
    • MIG_SIZE:MIG 中的 TPU 虚拟机数量。
    • INSTANCE_TEMPLATE_NAME:要使用的实例模板的名称。
    • ZONE:TPU 虚拟机的可用区,例如 us-central1-b
    • MIG_SIZE:MIG 中的 TPU 虚拟机数量。对于单主机 TPU 虚拟机,请将大小设置为 1。

创建具有多主机切片和 CMEK 的 MIG

创建多主机切片 MIG 时,请在实例模板中指定加密密钥。

  1. 创建实例模板。

    gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME
        --machine-type=MACHINE_TYPE \
        --maintenance-policy=TERMINATE \
        --image-family=IMAGE_FAMILY \
        --image-project=IMAGE_PROJECT \
        --boot-disk-kms-key=projects/KEY_PROJECT_ID/locations/REGION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
    

    替换以下占位符:

    • INSTANCE_TEMPLATE_NAME:实例模板的名称。
    • MACHINE_TYPE:TPU 虚拟机的机器类型,例如 ct6e-standard-8t
    • IMAGE_FAMILY:TPU 虚拟机的操作系统映像系列。如果您想安装特定版本的操作系统,请使用 --image 标志。如需详细了解操作系统映像,请参阅操作系统映像
    • IMAGE_PROJECT:包含操作系统映像的项目。 对于 TPU 映像,此值为 ubuntu-os-accelerator-images
    • KEY_PROJECT_ID:包含加密密钥的项目。
    • REGION:您创建密钥环的地区。
    • RING_NAME:密钥环的名称。
    • KEY_NAME:密钥的名称。
  2. 创建工作负载政策。

    以下命令会创建工作负载政策:

    gcloud compute resource-policies create workload WORKLOAD_POLICY_NAME \
    --type=high-throughput \
    --accelerator-topology=TOPOLOGY
    

    替换以下占位符:

    • WORKLOAD_POLICY_NAME:工作负载政策的名称。
    • TOPOLOGY:TPU 虚拟机的拓扑,例如 4x4x8
  3. 创建 MIG。

    gcloud compute instance-groups managed create MIG_NAME \
        --size=MIG_SIZE \
        --target-size-policy-mode=bulk \
        --template=INSTANCE_TEMPLATE_NAME \
        --zone=ZONE \
        --default-action-on-vm-failure=do-nothing \
        --workload-policy=WORKLOAD_POLICY_NAME
    

    替换以下占位符:

    • MIG_NAME:MIG 的名称。
    • MIG_SIZE:MIG 中的虚拟机数量。系统会根据工作负载政策中指定的拓扑验证此值。
    • INSTANCE_TEMPLATE_NAME:实例模板的名称。
    • ZONE:MIG 的可用区
    • WORKLOAD_POLICY_NAME:工作负载政策的名称。

如需了解如何通过 GKE 创建使用 CMEK 的 TPU 虚拟机,请参阅 GKE 文档中的使用客户管理的加密密钥

已删除或已撤销的 CMEK

如果 CMEK 已撤消或删除,则使用已删除或已撤消的 CMEK 加密的启动磁盘的任何 TPU 虚拟机都不会自动关机。在您关停或重启 TPU 虚拟机之前,它仍可访问已加密启动磁盘上的数据。这样,如果您恢复对已撤销或已删除密钥的访问权限,便可以恢复数据。如果您重新启用密钥,则可以启动或修复 TPU 虚拟机,并且启动磁盘会成功解密并加载。