使用 CMEK 加密工作站资源

默认情况下,Cloud Workstations 会对以静态方式存储的客户内容进行加密。Cloud Workstations 会为您处理加密,您无需进行任何其他操作。此选项称为 Google 默认加密

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

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

默认情况下,Cloud Workstations 使用 Google-owned and Google-managed encryption key数据处于静态时加密工作站资源(例如虚拟机和永久性磁盘)。如果您对保护数据的密钥有特定的合规性或监管要求,则可以使用 Cloud Key Management Service (Cloud KMS) 提供的客户管理的加密密钥 (CMEK)。

如需大致了解 CMEK(包括其启用时间和原因),请参阅 Cloud KMS 文档

准备工作

创建项目

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

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

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

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

  2. 确保您的 Cloud 项目已启用结算功能。如需了解详情,请参阅验证项目的结算状态

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

  4. 安装并初始化 gcloud CLI:

    1. 如需安装 gcloud CLI,请参阅安装 gcloud CLI,然后按照适用于您操作系统的说明操作。

    2. 如需初始化 gcloud CLI,请参阅初始化 gcloud CLI,或运行以下命令:

      gcloud init
      

所需的角色

虽然您可以向同一人授予 Cloud KMS 管理员和 Cloud Workstations 管理员角色,但我们建议您在分配角色时遵循最小权限原则。作为最佳实践,请将这些角色授予两个不同的人员,并让他们进行协调,而不是让 Cloud KMS 管理员同时担任 Cloud Workstations 管理员。如需了解详情,请参阅安全最佳实践安全使用 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. 创建或选择密钥环

    密钥环必须与工作站集群位于同一区域。Cloud Workstations 不支持多区域或全球 Cloud KMS 位置

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

  2. 创建对称加密密钥

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

授予对加密密钥的访问权限

Cloud Workstations 使用以下服务账号来管理资源加密:

  1. Cloud Workstations 服务代理:Cloud Workstations 使用此账号来检测密钥何时轮换。

  2. Cloud KMS 密钥服务账号:您将提供一个服务账号,Cloud Workstations 可以使用该账号访问您的密钥,以便加密和解密资源。

向 Cloud Workstations Service Agent 授予 Cloud KMS Viewer 角色

Cloud Workstations Service Agent 允许 Cloud Workstations 在您的项目上执行服务职责。当您在工作站项目中激活 Cloud Workstations 服务时,系统会自动创建此服务代理。为了使 CMEK 正常运行,您需要为工作站项目的 Cloud Workstations 服务代理授予 Cloud KMS 密钥的 Cloud KMS 查看者角色 (roles/cloudkms.viewer),以便 Cloud Workstations 可以检测密钥轮替。

  1. 如需检索工作站项目的 Cloud Workstations 服务代理,请使用以下命令:

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

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

    Cloud Workstations Service Agent 采用以下格式:
    service-$WORKSTATIONS_PROJECT_NUMBER@gcp-sa-workstations.iam.gserviceaccount.com

  2. 向 Cloud Workstations 服务代理授予 CMEK 密钥的 Cloud KMS Viewer 角色 (roles/cloudkms.viewer)。这样,Cloud Workstations 便能够检测密钥轮换并根据需要在项目中重新加密资源

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

    替换以下内容:

    • KEY_NAME:密钥的名称。
    • KEY_RING:密钥环的名称。
    • LOCATION:包含密钥环的位置。
    • KMS_PROJECT_ID:包含密钥的项目的 ID。
    • CLOUD_WORKSTATIONS_SERVICE_AGENT:从上一步中获得的 Cloud Workstations 服务代理。

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

设置 Cloud KMS 密钥服务账号

Cloud Workstations 使用您选择的服务账号,通过客户管理的密钥执行加密和解密。我们将此账号称为 Cloud KMS 密钥服务账号。您可以选择创建新的服务账号,也可以使用现有服务账号。此账号的要求如下:

  • Cloud Workstations 管理员必须拥有此服务账号的 iam.serviceAccounts.actAs 权限。
  • 您选择的服务账号必须对 Cloud KMS 密钥具有 Cloud KMS CryptoKey Encrypter/Decrypter 角色 (roles/cloudkms.cryptoKeyEncrypterDecrypter)。
  1. 如果您想创建新的服务账号,请使用以下命令:

    gcloud iam service-accounts create \
      KMS_KEY_SERVICE_ACCOUNT_NAME \
      --display-name="Service account for Cloud Workstations CMEK" \
      --project=WORKSTATIONS_PROJECT_ID
    

    替换以下内容:

    • KMS_KEY_SERVICE_ACCOUNT_NAME 替换为服务账号的名称。
    • WORKSTATIONS_PROJECT_ID:工作站项目的 ID。

    您创建的服务账号的电子邮件地址采用以下格式:KMS_KEY_SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

    保存服务账号的电子邮件地址,以备后续步骤使用。

  2. 如需在 Cloud KMS 密钥服务账号上授予 Cloud Workstations Admin IAM Service Account User 角色 (roles/iam.serviceAccountUser),请运行以下命令:

    gcloud iam service-accounts add-iam-policy-binding \
        KMS_KEY_SERVICE_ACCOUNT_EMAIL \
        --member="user:CLOUD_WORKSTATIONS_ADMIN_EMAIL" \
        --project=WORKSTATIONS_PROJECT_ID \
        --role=roles/iam.serviceAccountUser
    

    替换以下内容:

    • KMS_KEY_SERVICE_ACCOUNT_EMAIL:Cloud KMS 密钥服务账号的电子邮件地址。
    • CLOUD_WORKSTATIONS_ADMIN_EMAILCloud Workstations 管理员的电子邮件地址。
    • WORKSTATIONS_PROJECT_ID:工作站项目的 ID。
  3. 如需向 Cloud KMS 密钥服务账号授予 Cloud KMS CryptoKey Encrypter/Decrypter 角色 (roles/cloudkms.cryptoKeyEncrypterDecrypter),请运行以下命令:

      gcloud kms keys add-iam-policy-binding \
        KEY_NAME \
        --keyring KEY_RING \
        --location LOCATION \
        --project KMS_PROJECT_ID \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --member serviceAccount:KMS_KEY_SERVICE_ACCOUNT_EMAIL\
    

    替换以下内容:

    • KEY_NAME:密钥的名称。
    • KEY_RING:密钥环的名称。
    • LOCATION:包含密钥环的位置。
    • KMS_PROJECT_ID:包含密钥的项目的 ID。
    • KMS_KEY_SERVICE_ACCOUNT_EMAIL:Cloud KMS 密钥服务账号的电子邮件地址。

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

检查工作站集群

如果您在 Google Cloud 控制台中没有可用的工作站集群,请让 Cloud Workstations 管理员在与 Cloud KMS 密钥环相同的区域中为您创建一个工作站集群,或者确保您拥有项目的 Cloud Workstations 管理员 IAM 角色,以便您自行创建这些资源。

使用客户管理的加密密钥

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

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

    替换以下内容:

    • WORKSTATIONS_CLUSTER_NAME:工作站集群的名称。
    • LOCATION:工作站集群的区域名称。
    • WORKSTATIONS_PROJECT_ID:工作站项目的 ID。
  2. 使用 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="KMS_KEY_SERVICE_ACCOUNT_EMAIL" \
      --project=WORKSTATIONS_PROJECT_ID
    

    替换以下内容:

    • WORKSTATIONS_CONFIG_NAME:工作站配置的名称。
    • WORKSTATIONS_CLUSTER_NAME:工作站集群的名称。
    • LOCATION:集群的区域名称。
    • KMS_PROJECT_ID:项目 ID,一个用于区分您的项目与 Google Cloud中所有其他项目的唯一字符串。
    • KEY_RING:密钥环的名称。
    • KEY_NAME:密钥的名称。
    • KMS_KEY_SERVICE_ACCOUNT_EMAIL:Cloud KMS 密钥服务账号的电子邮件地址。
    • WORKSTATIONS_PROJECT_ID:工作站项目的 ID。

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

轮替客户管理的加密密钥

当您向 Cloud Workstations 服务代理授予 CMEK 密钥的 Cloud KMS 查看者角色 (roles/cloudkms.viewer) 后,工作站服务便能够检测到密钥轮替,并使用新的主密钥版本重新加密您的主目录磁盘

重新加密会在您停止工作站后进行。每次停止加密工作站时,工作站服务都会检查密钥是否已轮换。如果密钥已轮换,工作站服务会创建工作站主磁盘的快照并删除该磁盘。下次启动工作站时,工作站服务会使用新的主密钥版本,根据快照创建新磁盘。

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

后续步骤