使用客户管理的加密密钥 (CMEK) 进行持续迁移

本页介绍了如何将客户管理的加密密钥 (CMEK) 与 Database Migration Service 迁移作业搭配使用。

默认情况下,Database Migration Service(适用于将 Oracle 迁移到 Cloud SQL for PostgreSQL)会对以静态方式存储的客户内容进行加密。Database Migration Service(适用于 Oracle 到 Cloud SQL for PostgreSQL)会为您处理加密,您无需执行任何其他操作。此选项称为 Google 默认加密

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

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

Database Migration Service 支持 CMEK 的区域

CMEK 在所有 Database Migration Service 位置均可用。

将 CMEK 与 Cloud KMS Autokey 结合使用

您可以手动创建 CMEK 以保护 Database Migration Service(适用于将 Oracle 迁移到 Cloud SQL for PostgreSQL)资源,也可以使用 Cloud KMS Autokey。借助 Autokey,在 Database Migration Service(适用于 Oracle 到 Cloud SQL for PostgreSQL)中创建或更新资源时,系统会按需生成密钥环和密钥。 系统会创建使用密钥执行加密和解密操作的服务代理(如果它们尚不存在),并授予所需的 Identity and Access Management (IAM) 角色。如需了解详情,请参阅 Autokey 概览

了解服务账号

如果您的 Database Migration Service 迁移作业启用了 CMEK,您需要使用服务账号从 Cloud Key Management Service 请求密钥访问权限。

如需在项目上使用 CMEK,您必须拥有服务账号,并且必须向服务账号授予密钥访问权限。该服务账号必须存在于项目内。该服务账号在所有区域均可见。

了解密钥

Cloud Key Management Service 中,您需要创建一个包含加密密钥的密钥环,并设置位置。在 Database Migration Service 中创建新的迁移作业时,您可以选择此密钥来加密该迁移作业。

在创建使用 CMEK 的新迁移作业时,您需要知道密钥 ID 和密钥区域。您必须将目标数据库放置在与迁移作业关联的 CMEK 所在的区域中。您可以为密钥和目标数据库创建一个项目,也可以为它们分别创建不同的项目。

CMEK 使用以下格式:

projects/[CMEK_ENABLED_PROJECT]/locations/[REGION]/keyRings/[RING_NAME]/cryptoKeys/[KEYNAME]

如何使 CMEK 加密的数据永远无法访问?

您可能遇到这样的情况,即您需要永久销毁使用 CMEK 加密的数据。为此,您需要销毁 CMEK 版本。您不能销毁密钥环或密钥,但可以销毁密钥的密钥版本。

限制

使用 CMEK 时,存在以下限制:

  • 您无法在正在运行的迁移作业上更新 CMEK。

  • 虽然您可以使用 CMEK 加密源数据库中的数据,但您无法使用这些密钥来加密任何迁移作业元数据,例如迁移作业 ID、源数据库的 IP 地址等。

使用 CMEK

以下部分介绍了如何为以下产品设置 CMEK

准备工作

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. 安装并初始化 Google Cloud CLI。
  7. 确保您已将 Database Migration Admin 角色分配给您的用户账号。

    前往 IAM 页面

  8. Enable the Cloud Key Management Service API.

    Enable the API

  9. 启用 Database Migration Service API。

    启用 API

使用 CMEK 在 Database Migration Service 中创建迁移作业的工作流

  1. 仅限 gcloud CLI 和 API 用户:确保每个需要 CMEK 的项目都有一个服务账号。如需了解详情,请参阅创建服务账号

  2. 创建密钥环和密钥并为每个密钥设置位置。该位置是 Google Cloud 区域。

  3. 向服务账号授予密钥访问权限

  4. 复制或记下密钥 ID (KMS_KEY_ID) 和密钥的位置,以及密钥环的 ID (KMS_KEYRING_ID)。您在向服务账号授予密钥访问权限时需要此信息。

  5. 前往项目,在 Database Migration Service 中创建迁移作业,然后在高级加密选项部分中使用您的 CMEK。

您的 Database Migration Service 迁移作业现已通过 CMEK 启用。

创建服务账号

您需要为每个需要 CMEK 的项目创建一个服务账号。要允许用户管理服务账号,请授予以下角色之一:

  • Service Account User (roles/iam.serviceAccountUser):包括列出服务账号、获取服务账号的详细信息以及模拟服务账号的权限。
  • Service Account Admin (roles/iam.serviceAccountAdmin):包括列出服务账号和获取服务账号的详细信息的权限。此外,还包括创建、更新和删除服务账号的权限,以及查看或更改服务账号的“Database Migration Service(适用于将 Oracle 迁移到 Cloud SQL for PostgreSQL)”政策的权限。

您只能使用 gcloud CLI 命令创建 CMEK 所需的服务账号类型。

如需使用 gcloud CLI 创建服务账号,请运行以下命令:

gcloud beta services identity create \
--service=datamigration.googleapis.com\
--project=PROJECT_ID

上述命令会返回服务账号名称。在向服务账号授予密钥访问权限的过程中,您将使用此服务账号名称。

创建密钥

您可以在数据库迁移服务中的迁移作业所属的 Google Cloud 项目中创建密钥,也可以在单独的用户项目中创建密钥。Cloud KMS 密钥环的位置必须与与迁移作业关联的目标数据库所在的区域相匹配。不支持多区域密钥或全球区域密钥。如果区域不匹配,则无法创建迁移作业。

如需创建 Cloud KMS 密钥,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,前往加密密钥页面。
  2. 点击创建密钥环
  3. 添加密钥环名称。请记下此名称,因为您在向服务账号授予密钥访问权限时需要用到此名称。
  4. 添加密钥环位置
  5. 点击创建。此时会打开创建密钥页面。
  6. 添加密钥名称
  7. 选择用途(对称或非对称)。
  8. 选择轮替周期开始日期
  9. 点击创建
  10. 密钥表上,点击最后一列中的三个点,然后选择复制资源 ID 或将其记录下来。这是 KMS_KEY_ID。在向服务账号授予密钥访问权限时,您需要 KMS_KEY_ID

gcloud CLI

  1. 创建新的密钥环。
    gcloud kms keyrings create KMS_KEYRING_ID \
    --location=REGION
      
    记录此名称,因为您在向服务账号授予密钥访问权限时需要用到此名称。
  2. 针对该密钥环创建密钥。
    gcloud kms keys create KMS_KEY_ID \
    --location=REGION \
    --keyring=KMS_KEYRING_ID \
    --purpose=encryption
      
    记录此名称,因为您在向服务账号授予密钥访问权限时需要用到此名称。

向您的服务账号授予对密钥的访问权限

您只需在使用 gcloud CLI 或 API 时执行此过程。

如需向服务账号授予访问权限,请使用以下代码:

gcloud kms keys add-iam-policy-binding KMS_KEY_ID \
--location=REGION \
--keyring=KMS_KEYRING_ID \
--member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-datamigration.iam.gserviceaccount.com \
--role=roles/cloudkms.cryptoKeyEncrypterDecrypter

在 Database Migration Service 中使用 CMEK 创建迁移作业

在 Database Migration Service 中创建迁移作业的过程中,您可以使用 CMEK 管理数据的加密。

停用和重新启用密钥版本

请参阅以下主题: