本文档介绍了如何在“外部(通过互联网)”(EXTERNAL) 和“外部(通过 VPC)”(EXTERNAL_VPC) 保护级别之间迁移 Cloud EKM 密钥。仅支持使用 gcloud CLI 和 Cloud KMS API 迁移外部密钥。
迁移用例
当密钥的保护级别为 EXTERNAL 或 EXTERNAL_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 来替换 EkmConnection 和 ekmConnectionKeyPath。
如果密钥版本具有关联的 EkmConnection,则所有密钥版本操作都会使用该连接,即使父密钥具有不同的 EkmConnection 也是如此。
迁移到通过 VPC 进行的外部路由
从“通过互联网的外部”保护级别迁移到“通过 VPC 的外部”保护级别可提高 Cloud EKM 密钥的可靠性。您可以享受 Virtual Private Cloud (VPC) 网络的优势,包括强大的隔离性和更好的运营支持。
您还可以在不同的 VPC 配置之间进行迁移,例如,从使用 合作伙伴互连的 VPC 升级为使用专用互连的 VPC。
准备工作
在迁移 Cloud EKM 密钥之前,您必须满足以下条件:
- 已启用结算功能和 Cloud KMS API 的 Google Cloud 项目。
-
如需获得迁移外部密钥所需的权限,请让您的管理员为您授予项目或父级资源的 Cloud KMS Admin (
roles/cloudkms.admin) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。此预定义角色包含迁移外键所需的
cloudkms.cryptoKeys.update权限。 - 如果您要迁移到“外部”(通过互联网)(
EXTERNAL) 保护级别,则必须通过互联网设置 Cloud EKM(如果您尚未这样做)。 - 如果您要迁移到“外部通过 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_CONNECTIONEXTERNAL_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_CONNECTIONEXTERNAL_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_CONNECTIONEXTERNAL_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_CONNECTIONEXTERNAL_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 连接和外部密钥相同的密钥材料。