使用 CMEK 加密工作站资源

默认情况下,Cloud Workstations 使用 Google 管理的加密密钥来加密数据静态工作站资源(如虚拟机和永久性磁盘)。如果您对保护数据的密钥有特定的合规性或监管要求,可以通过 Cloud Key Management Service (Cloud KMS) 使用客户管理的加密密钥 (CMEK)。

如需从整体上详细了解 CMEK(包括何时及为何启用 CMEK),请参阅 Cloud KMS 文档

准备工作

创建项目

  1. 在 Google Cloud 控制台的项目选择器页面上,选择或创建两个 Google Cloud 项目

    • 密钥项目包含您的 Cloud KMS 资源,其中包括密钥环和对称加密密钥。

    • 工作站项目包含使用 CMEK 密钥加密的工作站。

    您可以为密钥项目和工作站项目使用相同的项目,但根据最佳实践,我们建议您为职责分离使用两个项目。

  2. 确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能

  3. 在每个项目中启用所需的 API。

  4. 请确保您已安装并初始化 gcloud CLI。如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
    

所需的角色

虽然您可以将 Cloud KMS Admin 和 Cloud Workstations Admin 角色授予同一人,但我们建议您在分配角色时遵循最小权限原则。最佳做法是将这些角色授予两个不同的人员并让其协调,而不是要求 Cloud KMS 也成为您的 Cloud Workstations Admin。如需了解详情,请参阅安全最佳实践以及安全使用 IAM

如需获取设置 CMEK 所需的权限,请让管理员向您授予以下 IAM 角色:

  • 如果您是 Cloud KMS Admin,请让管理员向您授予以下角色,以便您可以在密钥项目中创建和管理 Cloud KMS 资源: Cloud KMS Admin (roles/cloudkms.admin)。
  • 如果您是 Cloud Workstations Admin,请让管理员向您授予以下角色,以便您可以在工作站项目中创建和更新工作站: Cloud Workstations Admin (roles/workstations.admin)。

如需详细了解如何授予角色,请参阅管理访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

创建密钥环和加密密钥

密钥项目中,创建一个密钥并保存该密钥的资源 ID:

  1. 创建或选择密钥环

    您可以在服务之间共享密钥环,但最佳做法是,为每项受保护的资源使用不同的密钥。请参阅职责分离

  2. 创建对称加密密钥

    请务必在同一区域中创建 CMEK 密钥和工作站配置。

  3. 获取密钥的资源 ID 并保存以备后续步骤使用。

检查工作站配置

如果您在 Google Cloud 控制台中没有工作站配置,请要求 Cloud Workstations Admin 为您创建工作站配置,或确保您对项目拥有 Cloud Workstations Admin IAM 角色,以便自行创建这些资源。

使用客户管理的加密密钥

如需在工作站配置中使用 CMEK,请通过 Google Cloud 控制台或 gcloud CLI 启用 CMEK。

控制台

向您的 Compute Engine 服务帐号和 Compute Engine 服务代理授予 Cloud KMS CryptoKey Encrypter/Decrypter 角色Cloud KMS Viewer 角色

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

    前往“密钥管理”

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

  3. 选中要使用的密钥对应的复选框。

    系统会以窗格形式显示权限标签页。

  4. 添加成员对话框中,指定要授予访问权限的 Compute Engine 服务帐号和 Compute Engine 服务代理的电子邮件地址。

  5. 选择角色下拉列表中,选择 Cloud KMS CryptoKey Encrypter/Decrypter

  6. 点击添加其他角色

  7. 选择角色下拉列表中,选择 Cloud KMS Viewer

  8. 点击保存

如需从 Google Cloud 控制台启用 CMEK,请执行以下操作:

  1. 按照相关步骤创建工作站配置

  2. 指定机器配置时,请查找高级选项部分。

  3. 点击 expand_more 展开,然后选择使用客户管理的加密密钥 (CMEK)

    1. 选择客户管理的密钥字段中,选择您在密钥项目中创建的客户管理的加密密钥。

      如果您创建的密钥未列出,请点击手动输入密钥,按资源 ID 选择密钥,然后输入您之前记下的资源 ID。

    2. 服务帐号字段中,选择密钥使用的服务帐号。

  4. 完成创建工作站配置的其他步骤。

  5. 创建、启动并启动工作站配置,以使用指定的 Cloud KMS 密钥加密项目中的永久性磁盘。

gcloud

以下示例会授予一个提供对 Cloud KMS 密钥的访问权限的 IAM 角色,然后通过在工作站配置中指定该密钥来启用 CMEK:

  1. 向工作站项目的 KMS 服务帐号和 Compute Engine 服务代理授予 CMEK 密钥的 Cloud KMS CryptoKey Encrypter/Decrypter 角色 (roles/cloudkms.cryptoKeyEncrypterDecrypter)。这样,Compute Engine 服务就可以使用指定的 CMEK 密钥在项目中创建加密资源。

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

    替换以下内容:

    • KEY_NAME:密钥的名称。
    • LOCATION:您在其中创建了密钥环的区域名称。
    • KEY_RING:密钥环的名称。
    • WORKSTATIONS_PROJECT_NUMBER:自动生成的唯一数字标识符,作为工作站项目的 Compute Engine 默认服务帐号的第一部分。
    • KMS_PROJECT_ID:项目 ID,用于将您的 Cloud KMS 项目与 Google Cloud 中的所有其他项目区分开的唯一字符串。

    如需了解所有标志和可能的值,请运行带 --help 标志的命令。

  2. 如需检索工作站项目的工作站管理服务帐号,请使用以下命令:

    gcloud beta services identity create --service=workstations.googleapis.com \
        --project=WORKSTATIONS_PROJECT_ID
    

    WORKSTATIONS_PROJECT_ID 替换为您的工作站项目 ID。

  3. 向项目的工作站管理服务帐号授予 CMEK 密钥的 Cloud KMS Viewer 角色 (roles/cloudkms.viewer)。这样,工作站服务就可以检测密钥轮替并根据项目中的需要重新加密资源。

    gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location LOCATION \
        --keyring KEY_RING \
        --member WORKSTATIONS_MANAGEMENT_SERVICE_ACCOUNT \
        --role roles/cloudkms.viewer \
        --project KMS_PROJECT_ID
    

    替换以下内容:

    • KEY_NAME:密钥的名称。
    • LOCATION:您在其中创建了密钥环的区域名称。
    • KEY_RING:密钥环的名称。
    • WORKSTATIONS_MANAGEMENT_SERVICE_ACCOUNT:在上一步中获取的工作站管理服务帐号。
    • KMS_PROJECT_ID:项目 ID,这是一个唯一字符串,用于将您的 Cloud KMS 密钥项目与 Google Cloud 中的所有其他项目区分开来。

    如需了解所有标志和可能的值,请运行带 --help 标志的命令。

  4. 可选:如果您尚未创建工作站集群,请使用 clusters create gcloud CLI 命令创建一个。

    gcloud workstations clusters create \
        WORKSTATIONS_CLUSTER_NAME --region=LOCATION \
        --project=WORKSTATIONS_PROJECT_NUMBER
    

    替换以下内容:

    • WORKSTATIONS_CLUSTER_NAME:工作站集群的名称。
    • LOCATION:工作站集群的区域名称。
    • WORKSTATIONS_PROJECT_NUMBER:自动生成的唯一数字标识符,作为工作站项目的 Compute Engine 默认服务帐号的第一部分包含在内
  5. 假设您已经创建了一个集群,请使用 encryption_key 设置创建工作站配置

    如需创建使用机器类型 e2-standard-2、空闲超时 3600s 和 CMEK 加密工作站资源的工作站配置,请运行以下 gcloud CLI 命令:

    gcloud workstations configs create WORKSTATIONS_CONFIG_NAME \
      --cluster=WORKSTATIONS_CLUSTER_NAME \
      --region=LOCATION \
      --machine-type="e2-standard-2" \
      --idle-timeout=3600 \
      --kms-key="projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME" \
      --kms-key-service-account="WORKSTATIONS_PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
      --project=WORKSTATIONS_PROJECT_NUMBER
    

    替换以下内容:

    • WORKSTATIONS_CONFIG_NAME:工作站配置的名称。
    • WORKSTATIONS_CLUSTER_NAME:您的工作站集群的名称。
    • LOCATION:集群的区域名称。
    • KMS_PROJECT_ID:项目 ID,用于将您的项目与 Google Cloud 中的所有其他项目区分开的唯一字符串。
    • KEY_RING:密钥环的名称。
    • KEY_NAME:密钥的名称。
    • WORKSTATIONS_PROJECT_NUMBER:自动生成的唯一数字标识符,作为工作站项目的 Compute Engine 默认服务帐号的第一部分包含在内

    创建工作站配置后,Cloud KMS 会使用指定的 Cloud KMS 密钥加密项目中的永久性磁盘。

Cloud KMS 配额和 Cloud Workstations

在 Cloud Workstations 中使用 CMEK 时,您的项目可能会消耗 Cloud KMS 加密请求配额。例如,每次上传或下载时,CMEK 加密的代码库都可以使用这些配额。只有在您使用硬件 (Cloud HSM) 或外部 (Cloud EKM) 密钥时,使用 CMEK 密钥的加密和解密操作才会影响 Cloud KMS 配额。如需了解详情,请参阅 Cloud KMS 配额

外部密钥

您可以通过 Cloud External Key Manager (Cloud EKM) 使用您管理的外部密钥加密 Google Cloud 中的数据。

当您使用 Cloud EKM 密钥时,Google 无法控制外部管理的密钥的可用性。如果密钥不可用,您的工作站将无法启动。

如需了解使用外部密钥的更多注意事项,请参阅 Cloud External Key Manager

后续步骤