迁移外部密钥

本文档介绍了如何在“外部(通过互联网)”(EXTERNAL) 和“外部(通过 VPC)”(EXTERNAL_VPC) 保护级别之间迁移 Cloud EKM 密钥。仅支持使用 gcloud CLI 和 Cloud KMS API 迁移外部密钥。

迁移用例

当密钥的保护级别为 EXTERNALEXTERNAL_VPC 时,您可以执行以下任一操作:

  • 轮替密钥,创建具有不同 Cloud EKM 保护级别的新密钥版本。例如,您可以轮换 EXTERNAL 保护级别中的密钥,以创建 EXTERNAL_VPC 保护级别中的新密钥版本。
  • 更新密钥版本,以便为同一密钥材料使用其他 Cloud EKM 保护级别。例如,您可以更新保护级别为 EXTERNAL 的密钥版本,使其使用相同的密钥材料和相同的密钥版本资源,但保护级别为 EXTERNAL_VPC
  • 轮换 EXTERNAL_VPC 密钥或更新 EXTERNAL_VPC 密钥版本以使用与父密钥不同的 EkmConnection

在两个 Cloud EKM 保护级别之间迁移现有密钥版本,可让您更改外部密钥材料的访问方式,而无需重新配置应用或重新加密数据,并且不会造成停机。 迁移后的密钥使用相同的密钥材料和相同的资源标识符。

将密钥版本从 EXTERNAL 保护级别迁移到 EXTERNAL_VPC 保护级别时,您需要将 EkmConnection 资源与密钥版本相关联,并添加 ekmConnectionKeyPath。将密钥版本从 EXTERNAL_VPC 迁移到 EXTERNAL 保护级别时,您需要添加 externalKeyUri 来替换 EkmConnectionekmConnectionKeyPath

如果密钥版本具有关联的 EkmConnection,则所有密钥版本操作都会使用该连接,即使父密钥具有不同的 EkmConnection 也是如此。

迁移到通过 VPC 进行的外部路由

从“通过互联网的外部”保护级别迁移到“通过 VPC 的外部”保护级别可提高 Cloud EKM 密钥的可靠性。您可以享受 Virtual Private Cloud (VPC) 网络的优势,包括强大的隔离性和更好的运营支持。

您还可以在不同的 VPC 配置之间进行迁移,例如,从使用 合作伙伴互连的 VPC 升级为使用专用互连的 VPC。

准备工作

在迁移 Cloud EKM 密钥之前,您必须满足以下条件:

  1. 已启用结算功能和 Cloud KMS API 的 Google Cloud 项目。
  2. 如需获得迁移外部密钥所需的权限,请让您的管理员为您授予项目或父级资源的 Cloud KMS Admin (roles/cloudkms.admin) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

    此预定义角色包含迁移外键所需的 cloudkms.cryptoKeys.update 权限。

    您也可以使用自定义角色或其他预定义角色来获取此权限。

  3. 如果您要迁移到“外部”(通过互联网)(EXTERNAL) 保护级别,则必须通过互联网设置 Cloud EKM(如果您尚未这样做)。
  4. 如果您要迁移到“外部通过 VPC”(EXTERNAL_VPC) 保护级别或迁移到新的 VPC 网络,则必须创建 EKM 连接(如果尚未创建)。

创建新的手动管理的外部密钥版本(通过 VPC)

gcloud

如需在命令行上使用 Cloud KMS,请先安装或升级到最新版本的 Google Cloud CLI

如需在现有 Cloud EKM 密钥上创建新的“外部密钥通过 VPC”密钥版本,请使用 kms keys versions create 命令以及 --protection-level--crypto-key-backend--ekm-connection-key-path 标志:

gcloud kms keys versions create \
    --key KEY_NAME \
    --keyring KEY_RING \
    --location LOCATION \
    --protection-level "external-vpc" \
    --crypto-key-backend EKM_CONNECTION_PATH \
    --ekm-connection-key-path EXTERNAL_KEY_PATH

替换以下内容:

  • KEY_NAME:密钥的名称。
  • KEY_RING:包含密钥的密钥环的名称。
  • LOCATION:密钥环的 Cloud KMS 位置。
  • EKM_CONNECTION_PATH:您要用于新密钥版本的 EKM 连接的资源标识符,例如 projects/PROJECT_ID/locations/LOCATION/ekmConnections/EKM_CONNECTION
  • EXTERNAL_KEY_PATH:来自 EKM 连接的新外部密钥版本的路径,例如 v0/path/to/my/key

如果父键是

如果密钥是对称加密密钥,并且您想将新密钥版本设为主要版本,请添加 --primary 标志。

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

REST

这些示例使用 curl 作为 HTTP 客户端来演示如何使用 API。如需详细了解访问权限控制,请参阅访问 Cloud KMS API

如需在现有 Cloud EKM 密钥上创建新的外部密钥版本(通过 VPC),请调用 CryptoKeyVersions.create 方法来创建新的密钥版本。

curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions" \
    --request "POST" \
    --header "authorization: Bearer TOKEN" \
    --header "content-type: application/json" \
    --data '{
            "protectionLevel": "EXTERNAL_VPC",
            "externalProtectionLevelOptions": {
              "ekmConnectionKeyPath": "EXTERNAL_KEY_PATH",
              "ekmConnectionBackendOverride": "EKM_CONNECTION_PATH"
              },
            }'
  • PROJECT_ID:包含您要轮换的密钥的项目的标识符。
  • KEY_NAME:密钥的名称。
  • KEY_RING:包含密钥的密钥环的名称。
  • LOCATION:密钥环的 Cloud KMS 位置。
  • EKM_CONNECTION_PATH:您要用于新密钥版本的 EKM 连接的资源标识符,例如 projects/PROJECT_ID/locations/LOCATION/ekmConnections/EKM_CONNECTION
  • EXTERNAL_KEY_PATH:来自 EKM 连接的新外部密钥版本的路径,例如 v0/path/to/my/key

此命令会创建新的密钥版本,但不会将其设置为主版本。

如需将新密钥版本设置为主密钥版本,请参阅将现有版本设置为主密钥版本

创建新的外部互联网密钥版本

gcloud

如需在命令行上使用 Cloud KMS,请先安装或升级到最新版本的 Google Cloud CLI

如需在现有 Cloud EKM 密钥上创建新的外部互联网密钥版本,请使用 kms keys versions create 命令以及 --protection-level--external-key-uri 标志:

gcloud kms keys versions create \
    --key KEY_NAME \
    --keyring KEY_RING \
    --location LOCATION \
    --protection-level "external" \
    --external-key-uri EXTERNAL_KEY_URI

替换以下内容:

  • KEY_NAME:密钥的名称。
  • KEY_RING:包含密钥的密钥环的名称。
  • LOCATION:密钥环的 Cloud KMS 位置。
  • EXTERNAL_KEY_URI:新外部密钥版本的 URI。

如果密钥是对称加密密钥,并且您想将新密钥版本设为主要版本,请添加 --primary 标志。

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

REST

这些示例使用 curl 作为 HTTP 客户端来演示如何使用 API。如需详细了解访问权限控制,请参阅访问 Cloud KMS API

如需在现有的 Cloud EKM 密钥上创建新的外部互联网密钥版本,请调用 CryptoKeyVersions.create 方法来创建新的密钥版本。

curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions" \
    --request "POST" \
    --header "authorization: Bearer TOKEN" \
    --header "content-type: application/json" \
    --data '{
            "protectionLevel": "EXTERNAL",
            "externalProtectionLevelOptions": {
              "externalKeyUri": "EXTERNAL_KEY_URI",
              },
            }'
  • PROJECT_ID:包含您要轮换的密钥的项目的标识符。
  • KEY_NAME:密钥的名称。
  • KEY_RING:包含密钥的密钥环的名称。
  • LOCATION:密钥环的 Cloud KMS 位置。
  • EXTERNAL_KEY_URI:新外部密钥版本的 URI。

此命令会创建新的密钥版本,但不会将其设置为主版本。

如需将新密钥版本设置为主密钥版本,请参阅将现有版本设置为主密钥版本

更新密钥版本以使用“外部通过 VPC”保护模式

gcloud

如需在命令行上使用 Cloud KMS,请先安装或升级到最新版本的 Google Cloud CLI

如需将现有 external 密钥版本更新为 external-vpc 保护级别,请将 kms keys versions update 命令与 --protection-level--crypto-key-backend--ekm-connection-key-path 标志结合使用:

gcloud kms keys versions update KEY_VERSION \
    --key KEY_NAME \
    --keyring KEY_RING \
    --location LOCATION \
    --protection-level "external-vpc" \
    --crypto-key-backend EKM_CONNECTION_PATH \
    --ekm-connection-key-path EXTERNAL_KEY_PATH

替换以下内容:

  • KEY_VERSION:您要迁移的密钥版本的数量,例如 3
  • KEY_NAME:密钥的名称。
  • KEY_RING:包含密钥的密钥环的名称。
  • LOCATION:密钥环的 Cloud KMS 位置。
  • EKM_CONNECTION_PATH:您要用于密钥版本的 EKM 连接的资源标识符,例如 projects/PROJECT_ID/locations/LOCATION/ekmConnections/EKM_CONNECTION
  • EXTERNAL_KEY_PATH:EKM 连接中现有外部密钥材料的新路径,例如 v0/path/to/my/key。EKM 连接和密钥路径必须指向与当前密钥 URI 相同的密钥材料。

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

REST

这些示例使用 curl 作为 HTTP 客户端来演示如何使用 API。如需详细了解访问权限控制,请参阅访问 Cloud KMS API

如需将现有 external 密钥版本更新为 external-vpc 保护级别,请调用 CryptoKeyVersions.patch 方法。

curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION?updateMask=protectionLevel,externalProtectionLevelOptions" \
    --request "PATCH" \
    --header "authorization: Bearer TOKEN" \
    --header "content-type: application/json" \
    --data '{
            "protectionLevel": "EXTERNAL_VPC",
            "externalProtectionLevelOptions": {
              "ekmConnectionKeyPath": "EXTERNAL_KEY_PATH",
              "ekmConnectionBackendOverride": "EKM_CONNECTION_PATH"
              },
            }'
  • PROJECT_ID:包含要迁移的密钥的项目的标识符。
  • KEY_NAME:密钥的名称。
  • KEY_RING:包含密钥的密钥环的名称。
  • LOCATION:密钥环的 Cloud KMS 位置。
  • EKM_CONNECTION_PATH:您要用于密钥版本的 EKM 连接的资源标识符,例如 projects/PROJECT_ID/locations/LOCATION/ekmConnections/EKM_CONNECTION
  • EXTERNAL_KEY_PATH:EKM 连接中现有外部密钥材料的新路径,例如 v0/path/to/my/key。EKM 连接和密钥路径必须指向与当前密钥 URI 相同的密钥材料。

更新密钥版本以使用“通过互联网进行外部保护”模式

gcloud

如需在命令行上使用 Cloud KMS,请先安装或升级到最新版本的 Google Cloud CLI

如需将现有 external-vpc 密钥版本更新为 external 保护级别,请将 kms keys versions update 命令与 --protection-level--external-key-uri 标志结合使用:

gcloud kms keys versions update KEY_VERSION \
    --key KEY_NAME \
    --keyring KEY_RING \
    --location LOCATION \
    --protection-level "external" \
    --external-key-uri EXTERNAL_KEY_URI

替换以下内容:

  • KEY_VERSION:您要迁移的密钥版本的数量,例如 3
  • KEY_NAME:密钥的名称。
  • KEY_RING:包含密钥的密钥环的名称。
  • LOCATION:密钥环的 Cloud KMS 位置。
  • EXTERNAL_KEY_URI:EKM 中现有外部密钥材料的新 URI。该 URI 必须指向与当前 EKM 连接和外部密钥相同的密钥材料。

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

REST

这些示例使用 curl 作为 HTTP 客户端来演示如何使用 API。如需详细了解访问权限控制,请参阅访问 Cloud KMS API

如需将现有 external-vpc 密钥版本更新为 external 保护级别,请调用 CryptoKeyVersions.patch 方法。

curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION?updateMask=protectionLevel,externalProtectionLevelOptions" \
    --request "PATCH" \
    --header "authorization: Bearer TOKEN" \
    --header "content-type: application/json" \
    --data '{
            "protectionLevel": "EXTERNAL",
            "externalProtectionLevelOptions": {
              "externalKeyUri": "EXTERNAL_KEY_URI",
              },
            }'
  • PROJECT_ID:包含要迁移的密钥的项目的标识符。
  • KEY_NAME:密钥的名称。
  • KEY_RING:包含密钥的密钥环的名称。
  • LOCATION:密钥环的 Cloud KMS 位置。
  • EXTERNAL_KEY_URI:EKM 中现有外部密钥材料的新 URI。该 URI 必须指向与当前 EKM 连接和外部密钥相同的密钥材料。