本页介绍了如何自动或手动轮替密钥。如需了解有关密钥轮替的一般信息,请参阅密钥轮替。
所需的角色
如需获得轮替密钥所需的权限,请让管理员向您授予密钥的以下 IAM 角色:
-
Cloud KMS Admin (
roles/cloudkms.admin
) -
重新加密数据:
Cloud KMS CryptoKey Encrypter/Decrypter (
roles/cloudkms.cryptoKeyEncrypterDecrypter
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
这些预定义角色包含轮替密钥所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
轮替密钥需要以下权限:
-
更改主键版本:
cloudkms.cryptoKeys.update
-
更改或停用自动旋转:
cloudkms.cryptoKeys.update
-
创建新的密钥版本:
cloudkms.cryptoKeyVersions.create
-
停用旧密钥版本:
cloudkms.cryptoKeyVersions.update
-
重新加密数据:
-
cloudkms.cryptoKeyVersions.useToDecrypt
-
cloudkms.cryptoKeyVersions.useToEncrypt
-
具有包含所有这些权限的自定义角色的单个用户可以自行轮替密钥并重新加密数据。具有 Cloud KMS 管理员角色和 Cloud KMS CryptoKey Encrypter/Decrypter 角色的用户可以协同轮替密钥并重新加密数据。分配角色时,请遵循最小权限原则。如需了解详情,请参阅权限和角色。
轮替密钥时,使用先前的密钥版本加密的数据不会自动重新加密。如需了解详情,请参阅解密和重新加密。轮替密钥不会自动停用或销毁任何现有密钥版本。销毁不再需要的密钥版本有助于降低费用。
配置自动轮替
要在创建新密钥时配置自动轮替,请执行以下操作:
控制台
使用 Google Cloud 控制台创建密钥时,Cloud KMS 会自动设置轮替周期和下次轮替时间。您可以选择使用默认值,也可以指定其他值。
如需在创建密钥期间,但在点击创建按钮之前指定其他轮替周期和开始时间,请执行以下操作:
对于密钥轮替周期,请选择一个选项。
在从中,选择您希望首次自动轮替的日期。您可以将开始时间保留为默认值,以便在创建密钥后的第一个密钥轮替周期开始自动轮替。
gcloud
如需在命令行上使用 Cloud KMS,请先安装或升级到最新版本的 Google Cloud CLI。
gcloud kms keys create KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --purpose "encryption" \ --rotation-period ROTATION_PERIOD \ --next-rotation-time NEXT_ROTATION_TIME
替换以下内容:
KEY_NAME
:密钥的名称。KEY_RING
:包含密钥的密钥环的名称。LOCATION
:密钥环的 Cloud KMS 位置。ROTATION_PERIOD
:密钥的轮替间隔,例如30d
,表示每 30 天轮替一次密钥。轮替周期必须至少为 1 天,且不得超过 100 年。如需了解详情,请参阅 CryptoKey.rotationPeriod。NEXT_ROTATION_TIME
:完成首次轮替的时间戳,例如2023-01-01T01:02:03
。您可以省略--next-rotation-time
,以将轮替安排在自运行命令开始的一个轮替周期内。如需了解详情,请参阅CryptoKey.nextRotationTime
。
如需了解所有标志和可能值,请使用 --help
标志运行命令。
C#
要运行此代码,请先设置 C# 开发环境并安装 Cloud KMS C# SDK。
Go
要运行此代码,请先设置 Go 开发环境并安装 Cloud KMS Go SDK。
Java
要运行此代码,请先设置 Java 开发环境并安装 Cloud KMS Java SDK。
Node.js
要运行此代码,请先设置 Node.js 开发环境并安装 Cloud KMS Node.js SDK。
PHP
要运行此代码,请先了解如何在 Google Cloud 上使用 PHP 并安装 Cloud KMS PHP SDK。
Python
要运行此代码,请先设置 Python 开发环境并安装 Cloud KMS Python SDK。
Ruby
要运行此代码,请先设置 Ruby 开发环境并安装 Cloud KMS Ruby SDK。
API
这些示例使用 curl 作为 HTTP 客户端来演示如何使用 API。如需详细了解访问权限控制,请参阅访问 Cloud KMS API。
如需创建密钥,请使用 CryptoKey.create
方法:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?crypto_key_id=KEY_NAME" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data '{"purpose": "PURPOSE", "rotationPeriod": "ROTATION_PERIOD", "nextRotationTime": "NEXT_ROTATION_TIME"}'
替换以下内容:
PURPOSE
:密钥的用途。ROTATION_PERIOD
:密钥的轮替间隔,例如30d
,表示每 30 天轮替一次密钥。轮替周期必须至少为 1 天,且最多为 100 年。如需了解详情,请参阅 CryptoKey.rotationPeriod。NEXT_ROTATION_TIME
:完成首次轮替的时间戳,例如2023-01-01T01:02:03
。如需了解详情,请参阅CryptoKey.nextRotationTime
。
要为现有密钥配置自动轮替,请执行以下操作:
控制台
转到 Google Cloud 控制台中的密钥管理页面。
点击要为其添加轮替计划的密钥所在密钥环的名称。
点击要为其添加轮替计划的密钥。
在标头中,点击修改轮替周期。
在提示中,为轮替周期和开始日期字段选择新值。
在提示中,点击保存。
gcloud
如需在命令行上使用 Cloud KMS,请先安装或升级到最新版本的 Google Cloud CLI。
gcloud kms keys update KEY_NAME \ --location LOCATION \ --keyring KEY_RING \ --rotation-period ROTATION_PERIOD \ --next-rotation-time NEXT_ROTATION_TIME
替换以下内容:
KEY_NAME
:密钥的名称。KEY_RING
:包含密钥的密钥环的名称。LOCATION
:密钥环的 Cloud KMS 位置。ROTATION_PERIOD
:密钥的轮替间隔,例如30d
,表示每 30 天轮替一次密钥。轮替周期必须至少为 1 天,且不得超过 100 年。如需了解详情,请参阅 CryptoKey.rotationPeriod。NEXT_ROTATION_TIME
:完成下一次轮替的时间戳,例如2023-01-01T01:02:03
。您可以省略--next-rotation-time
,以便在运行命令后安排下一次轮替,轮替周期为 1 个轮替周期。如需了解详情,请参阅CryptoKey.nextRotationTime
。
如需了解所有标志和可能值,请使用 --help
标志运行命令。
C#
要运行此代码,请先设置 C# 开发环境并安装 Cloud KMS C# SDK。
Go
要运行此代码,请先设置 Go 开发环境并安装 Cloud KMS Go SDK。
Java
要运行此代码,请先设置 Java 开发环境并安装 Cloud KMS Java SDK。
Node.js
要运行此代码,请先设置 Node.js 开发环境并安装 Cloud KMS Node.js SDK。
PHP
要运行此代码,请先了解如何在 Google Cloud 上使用 PHP 并安装 Cloud KMS PHP SDK。
Python
要运行此代码,请先设置 Python 开发环境并安装 Cloud KMS Python SDK。
Ruby
要运行此代码,请先设置 Ruby 开发环境并安装 Cloud KMS Ruby SDK。
API
这些示例使用 curl 作为 HTTP 客户端来演示如何使用 API。如需详细了解访问权限控制,请参阅访问 Cloud KMS API。
如需更新键,请使用 CryptoKey.patch
方法:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME?updateMask=rotationPeriod,nextRotationTime" \ --request "PATCH" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data '{"rotationPeriod": "ROTATION_PERIOD", "nextRotationTime": "NEXT_ROTATION_TIME"}'
替换以下内容:
ROTATION_PERIOD
:密钥的轮替间隔,例如30d
,表示每 30 天轮替一次密钥。轮替周期必须至少为 1 天,且最多为 100 年。如需了解详情,请参阅 CryptoKey.rotationPeriod。NEXT_ROTATION_TIME
:完成下一次轮替的时间戳,例如2023-01-01T01:02:03
。如需了解详情,请参阅CryptoKey.nextRotationTime
。
手动轮替密钥
首先,创建一个新的密钥版本:
控制台
转到 Google Cloud 控制台中的密钥管理页面。
点击将为其创建新密钥版本的密钥所在密钥环的名称。
点击将为其创建新密钥版本的密钥。
在标题中点击轮替。
在提示中,点击轮替进行确认。
gcloud
如需在命令行上使用 Cloud KMS,请先安装或升级到最新版本的 Google Cloud CLI。
gcloud kms keys versions create \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION
替换以下内容:
KEY_NAME
:密钥的名称。KEY_RING
:包含密钥的密钥环的名称。LOCATION
:密钥环的 Cloud KMS 位置。
密钥版本按顺序编号。
如需了解所有标志和可能值,请使用 --help
标志运行命令。
C#
要运行此代码,请先设置 C# 开发环境并安装 Cloud KMS C# SDK。
Go
要运行此代码,请先设置 Go 开发环境并安装 Cloud KMS Go SDK。
Java
要运行此代码,请先设置 Java 开发环境并安装 Cloud KMS Java SDK。
Node.js
要运行此代码,请先设置 Node.js 开发环境并安装 Cloud KMS Node.js SDK。
PHP
要运行此代码,请先了解如何在 Google Cloud 上使用 PHP 并安装 Cloud KMS PHP SDK。
Python
要运行此代码,请先设置 Python 开发环境并安装 Cloud KMS Python SDK。
Ruby
要运行此代码,请先设置 Ruby 开发环境并安装 Cloud KMS Ruby SDK。
API
这些示例使用 curl 作为 HTTP 客户端来演示如何使用 API。如需详细了解访问权限控制,请参阅访问 Cloud KMS API。
如需手动轮替密钥,请先通过调用 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"
此命令会创建新的密钥版本,但不会将其设置为主版本。
如需将新密钥版本设置为主密钥版本,请参阅将现有版本设置为主密钥版本。
如有必要,使用先前的密钥版本重新加密数据。
将现有版本设置为主密钥版本
要将不同的密钥版本设置为密钥的主要版本,请使用新的主要版本信息更新密钥。您必须先启用密钥版本,然后才能将其配置为主要版本。
控制台
转到 Google Cloud 控制台中的密钥管理页面。
点击要更新其主要版本的密钥所在密钥环的名称。
点击要更新其主要版本的密钥。
在要设为主要版本的密钥版本对应的行上,点击查看更多
。点击菜单中的设为主要版本。
在确认提示中,点击设为主要版本。
gcloud
如需在命令行上使用 Cloud KMS,请先安装或升级到最新版本的 Google Cloud CLI。
gcloud kms keys update KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --primary-version KEY_VERSION
替换以下内容:
KEY_NAME
:密钥的名称。KEY_RING
:包含密钥的密钥环的名称。LOCATION
:密钥环的 Cloud KMS 位置。- KEY_VERSION:新主键版本的版本号。
如需了解所有标志和可能值,请使用 --help
标志运行命令。
C#
要运行此代码,请先设置 C# 开发环境并安装 Cloud KMS C# SDK。
Go
要运行此代码,请先设置 Go 开发环境并安装 Cloud KMS Go SDK。
Java
要运行此代码,请先设置 Java 开发环境并安装 Cloud KMS Java SDK。
Node.js
要运行此代码,请先设置 Node.js 开发环境并安装 Cloud KMS Node.js SDK。
PHP
要运行此代码,请先了解如何在 Google Cloud 上使用 PHP 并安装 Cloud KMS PHP SDK。
Ruby
要运行此代码,请先设置 Ruby 开发环境并安装 Cloud KMS Ruby SDK。
Python
要运行此代码,请先设置 Python 开发环境并安装 Cloud KMS Python SDK。
API
这些示例使用 curl 作为 HTTP 客户端来演示如何使用 API。如需详细了解访问权限控制,请参阅访问 Cloud KMS API。
通过调用 CryptoKey.updatePrimaryVersion 方法更改主密钥版本。
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:updatePrimaryVersion" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data '{"cryptoKeyVersionId": "KEY_VERSION"}'
替换以下内容:
PROJECT_ID
:包含密钥环的项目的 ID。LOCATION
:密钥环的 Cloud KMS 位置。KEY_RING
:包含密钥的密钥环的名称。KEY_NAME
:密钥的名称。- KEY_VERSION:新主键版本的版本号。
更改主密钥版本后,更改变为一致的平均时间约为 1 分钟。不过,在特殊情况下,此更改最长可能需要 3 小时才能传播。在此期间,系统可能会使用之前的主要版本来加密数据。如需了解详情,请参阅 Cloud KMS 资源一致性。
停用自动轮替
要停用密钥的自动轮替,请清除密钥的轮替计划:
控制台
转到 Google Cloud 控制台中的密钥管理页面。
点击要为其移除轮替计划的密钥所在密钥环的名称。
点击您要移除轮替时间表的密钥。
在标头中,点击修改轮替周期。
在提示中,点击轮替周期字段,然后选择永不(手动轮替)。
在提示中,点击保存。
gcloud
如需在命令行上使用 Cloud KMS,请先安装或升级到最新版本的 Google Cloud CLI。
gcloud kms keys update KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --remove-rotation-schedule
替换以下内容:
KEY_NAME
:密钥的名称。KEY_RING
:包含密钥的密钥环的名称。LOCATION
:密钥环的 Cloud KMS 位置。
如需了解所有标志和可能值,请使用 --help
标志运行命令。
C#
要运行此代码,请先设置 C# 开发环境并安装 Cloud KMS C# SDK。
Go
要运行此代码,请先设置 Go 开发环境并安装 Cloud KMS Go SDK。
Java
要运行此代码,请先设置 Java 开发环境并安装 Cloud KMS Java SDK。
Node.js
要运行此代码,请先设置 Node.js 开发环境并安装 Cloud KMS Node.js SDK。
PHP
要运行此代码,请先了解如何在 Google Cloud 上使用 PHP 并安装 Cloud KMS PHP SDK。
Ruby
要运行此代码,请先设置 Ruby 开发环境并安装 Cloud KMS Ruby SDK。
Python
要运行此代码,请先设置 Python 开发环境并安装 Cloud KMS Python SDK。
API
这些示例使用 curl 作为 HTTP 客户端来演示如何使用 API。如需详细了解访问权限控制,请参阅访问 Cloud KMS API。
如需更新键,请使用 CryptoKey.patch
方法:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME?updateMask=rotationPeriod,nextRotationTime" \ --request "PATCH" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data '{"rotationPeriod": null, "nextRotationTime": null}'
如需详细了解 rotationPeriod
和 nextRotationTime
,请参阅 keyRings.cryptoKeys
。
轮替外部密钥
轮替协调的外部密钥
您可以为对称协调外部密钥配置自动轮替。您还可以手动为对称或非对称协调外部密钥创建新密钥版本。
轮替或创建新的密钥版本会导致使用该密钥保护的所有新创建数据都使用新的密钥版本进行加密。使用先前密钥版本保护的数据不会重新加密。因此,您的外部密钥管理器必须继续提供上一个密钥版本的密钥材料以供使用。
如需为协调的外部密钥创建新密钥版本,请完成以下步骤:
控制台
在 Google Cloud 控制台中,前往密钥管理页面。
选择密钥环,然后选择密钥。
点击创建版本。系统会显示一条消息,指明 Cloud KMS 和 EKM 中都将生成新的密钥版本。如果您看到密钥路径或密钥 URI 字段,则表示所选密钥不是协调的外部密钥。
点击创建版本以确认您要创建新密钥版本。
新密钥版本会显示为待生成状态。对于对称密钥,手动创建的密钥版本不会自动设置为主密钥版本。您可以将新密钥版本设为主密钥版本。
gcloud CLI
如需创建新的对称密钥版本并将其设置为主密钥版本,请使用带有 --primary
标志的 kms keys versions create
命令:
gcloud kms keys versions create \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --primary
替换以下内容:
KEY_NAME
:密钥的名称。KEY_RING
:包含密钥的密钥环的名称。LOCATION
:密钥环的 Cloud KMS 位置。
如需创建新的非对称密钥版本,或创建非主要密钥版本的新对称密钥版本,请使用 kms keys versions
create
命令:
gcloud kms keys versions create \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION
替换以下内容:
KEY_NAME
:密钥的名称。KEY_RING
:包含密钥的密钥环的名称。LOCATION
:密钥环的 Cloud KMS 位置。
通过 VPC 密钥轮替手动管理的 Cloud EKM
首先,在外部密钥管理器上轮替外部密钥材料。如果这会导致新的密钥路径,您需要轮替或使用新的密钥路径创建新的 Cloud EKM 密钥版本。对于对称加密密钥,请轮替 Cloud EKM 密钥,并指定外部密钥管理器中的新密钥路径。对于非对称密钥,请创建新密钥版本并指定新密钥路径。
轮替或创建新的密钥版本会导致使用该密钥保护的所有新创建数据都使用新的密钥版本进行加密。使用先前密钥版本保护的数据不会重新加密。因此,您的外部密钥管理器必须继续提供上一个密钥版本的密钥材料以供使用。
如果外部密钥管理合作伙伴系统中的密钥材料未更改,但密钥路径发生更改,则您可以更新密钥的外部路径,而无需轮替密钥。
控制台
在 Google Cloud 控制台中,前往密钥管理页面。
选择密钥环,然后选择密钥。
点击轮替密钥。
在密钥路径中,输入新版本的密钥路径。
点击旋转键进行确认。
gcloud
如需在命令行上使用 Cloud KMS,请先安装或升级到最新版本的 Google Cloud CLI。
如需创建新的对称密钥版本并将其设置为主密钥版本,请使用带有 --primary
标志的 kms keys versions create
命令:
gcloud kms keys versions create \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --ekm-connection-key-path EXTERNAL_KEY_PATH \ --primary
替换以下内容:
KEY_NAME
:密钥的名称。KEY_RING
:包含密钥的密钥环的名称。LOCATION
:密钥环的 Cloud KMS 位置。EXTERNAL_KEY_PATH
:新外部密钥版本的路径。
如需创建新的非对称密钥版本,或创建非主要密钥版本的新对称密钥版本,请使用 kms keys versions
create
命令:
gcloud kms keys versions create \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --ekm-connection-key-path EXTERNAL_KEY_PATH
替换以下内容:
KEY_NAME
:密钥的名称。KEY_RING
:包含密钥的密钥环的名称。LOCATION
:密钥环的 Cloud KMS 位置。EXTERNAL_KEY_PATH
:新外部密钥版本的路径。
如需了解所有标志和可能值,请使用 --help
标志运行命令。
密钥版本成功创建后,您可以像使用任何其他 Cloud KMS 密钥版本一样使用该密钥版本。
通过互联网密钥轮替手动管理的 Cloud EKM
首先,在外部密钥管理器上轮替外部密钥材料。如果这会产生新的 URI,您需要使用新 URI 轮替或创建新的 Cloud EKM 密钥版本。对于对称加密密钥,请轮替 Cloud EKM 密钥,并从外部密钥管理器中指定新的密钥 URI。对于非对称密钥,请创建新密钥版本并指定新的密钥 URI。
轮替或创建新的密钥版本会导致使用该密钥保护的所有新创建数据都使用新的密钥版本进行加密。使用先前密钥版本保护的数据不会重新加密。因此,您的外部密钥管理器必须继续提供上一个密钥版本的密钥材料以供使用。
如果外部密钥管理合作伙伴系统中的密钥材料未更改,但 URI 发生更改,则您可以更新密钥的外部 URI,而无需轮替密钥。
控制台
在 Google Cloud 控制台中,前往密钥管理页面。
选择密钥环,然后选择密钥。
对于对称密钥,请选择轮替密钥;对于非对称密钥,请选择创建版本。
输入新的密钥 URI,然后针对对称密钥选择轮替密钥,针对非对称密钥选择创建版本。
新密钥版本将成为主要版本。
gcloud CLI
如需创建新的对称密钥版本并将其设置为主密钥版本,请使用带有 --primary
标志的 kms keys versions create
命令:
gcloud kms keys versions create \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --external-key-uri EXTERNAL_KEY_URI \ --primary
替换以下内容:
KEY_NAME
:密钥的名称。KEY_RING
:包含密钥的密钥环的名称。LOCATION
:密钥环的 Cloud KMS 位置。EXTERNAL_KEY_URI
:新外部密钥版本的密钥 URI。
如需创建新的非对称密钥版本,或创建非主要密钥版本的新对称密钥版本,请使用 kms keys versions
create
命令:
gcloud kms keys versions create \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --external-key-uri EXTERNAL_KEY_URI
替换以下内容:
KEY_NAME
:密钥的名称。KEY_RING
:包含密钥的密钥环的名称。LOCATION
:密钥环的 Cloud KMS 位置。EXTERNAL_KEY_URI
:新外部密钥版本的密钥 URI。
后续步骤
- 轮替密钥后,您可以重新加密使用该密钥加密的数据。
- 重新加密数据后,您可以检查密钥版本是否正在使用。
- 确认某个密钥版本不再使用后,您可以销毁密钥版本。