将 CMEK 与 Google Cloud Serverless for Apache Spark 搭配使用

默认情况下, Google Cloud 无服务器 Apache Spark 会对静态客户内容进行加密。Serverless for Apache Spark 会为您处理加密,您无需执行任何其他操作。此选项称为 Google 默认加密

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

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

使用 CMEK

按照本部分中的步骤操作,使用 CMEK 加密 Google Cloud Apache Spark 版 Serverless Google Cloud 写入永久性磁盘和 Dataproc 暂存区的相关数据。

  1. 使用 Cloud Key Management Service (Cloud KMS) 创建密钥。

  2. 复制资源名称。

    复制资源名称。
    资源名称的结构如下:
    projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    

  3. 如需让 Compute Engine、Dataproc 和 Cloud Storage 服务代理服务账号能够使用您的密钥,请执行以下操作:

    1. 如需将 Cloud KMS CryptoKey Encrypter/Decrypter 角色分配给 Compute Engine 服务代理服务账号,请参阅使用 Cloud KMS 密钥保护资源> 必需的角色。如果此服务账号未列在 Google Cloud 控制台的 IAM 页面上,请点击包括 Google 提供的角色授予以列出该服务账号。
    2. Cloud KMS CryptoKey Encrypter/Decrypter 角色分配给 Dataproc Service Agent 服务账号。您可以使用 Google Cloud CLI 分配角色:

       gcloud projects add-iam-policy-binding KMS_PROJECT_ID \
       --member serviceAccount:service-PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
       --role roles/cloudkms.cryptoKeyEncrypterDecrypter
      

      替换以下内容:

      KMS_PROJECT_ID:运行 Cloud KMS 的 Google Cloud 项目的 ID。此项目也可以是运行 Dataproc 资源的项目。

      PROJECT_NUMBER:运行 Dataproc 资源的 Google Cloud 项目的项目编号(不是项目 ID)。

    3. 在运行 Serverless for Apache Spark 资源的项目中启用 Cloud KMS API。

    4. 如果 Dataproc Service Agent 角色未附加到 Dataproc Service Agent 服务账号,请将 serviceusage.services.use 权限添加到附加到 Dataproc Service Agent 服务账号的自定义角色。如果 Dataproc Service Agent 角色已附加到 Dataproc Service Agent 服务账号,则可以跳过此步骤。

    5. 按照相应步骤在存储桶中添加密钥

  4. 当您提交批处理工作负载时:

    1. 在批处理 kmsKey 参数中指定您的密钥。
    2. 在批处理 stagingBucket 参数中指定 Cloud Storage 存储桶的名称。
  5. 当您创建交互式会话或会话模板时:

    1. 在会话 kmsKey 参数中指定您的密钥。
    2. 在会话 stagingBucket 参数中指定 Cloud Storage 存储桶的名称。