手动旋转根密钥
您可以根据需要使用 IBM Cloud® Hyper Protect Crypto Services来轮换 根密钥A symmetric wrapping key that is used for encrypting and decrypting other keys that are stored in a data service.。
轮换根密钥可缩短密钥的生命周期,并限制受密钥保护的信息量。
要了解密钥轮换如何帮助您符合行业标准和加密最佳实践,请参阅密钥轮换。
在 UI 中旋转根密钥
如果您希望使用图形界面来轮换根密钥,那么可以使用 UI。
在创建根密钥或将现有根密钥导入到服务后,请完成以下步骤来轮换密钥:
-
转至 菜单 > 资源列表 以查看资源列表。
-
从 IBM Cloud 资源列表,选择 Hyper Protect Crypto Services 的已供应实例。
-
在“KMS 密钥”页面上,使用 密钥 表来浏览服务中的密钥。
-
选择要轮换的密钥,然后单击 操作 图标
以打开密钥的选项列表。
-
从选项菜单中,单击 旋转键。
如果最初为密钥提供了密钥资料,请指定要在服务中存储和管理的新的 base64 编码密钥资料。 确保密钥资料满足以下需求:
- 必须是 128,192 或 256 位。
- 数据字节(例如,对于 256 位,为 32 个字节)必须使用 Base64 编码进行编码。
-
单击 旋转密钥 以确认。
使用 API 旋转根密钥
您可以通过对以下端点进行 POST 调用来轮换根密钥。
https://<instance_ID>.api.<region>.hs-crypto.appdomain.cloud/api/v2/keys/<key_ID>/actions/rotate
-
复制要轮换的根密钥的标识。
您可以通过 检索密钥列表 或通过访问 UI 在服务实例中找到密钥的标识。
-
通过运行以下 cURL 命令,将密钥替换为新的密钥资料。
curl -X POST \ 'https://<instance_ID>.api.<region>.hs-crypto.appdomain.cloud/api/v2/keys/<key_ID>/actions/rotate' \ -H 'accept: application/vnd.ibm.kms.key_action+json' \ -H 'authorization: Bearer <IAM_token>' \ -H 'bluemix-instance: <instance_ID>' \ -H "x-kms-key-ring: <key_ring_ID>" \ -H 'content-type: application/vnd.ibm.kms.key_action+json' \ -d '{ "payload": "<key_material>" }'根据下表替换示例请求中的变量。
表 2. 描述在 Hyper Protect Crypto Services 中轮换指定键所需的变量 变量 描述 region必需。 区域缩写(例如, us-south或au-syd),表示 Hyper Protect Crypto Services 服务实例所在的地理区域。 有关更多信息,请参阅区域服务端点。port必需。 API 端点的端口号。 key_ID必需。 要轮换的根密钥的唯一标识。 IAM_token必需。 您的 IBM Cloud 访问令牌。 在 cURL 请求中包含 IAM令牌的完整内容,包括 Bearer 值。 有关更多信息,请参阅 检索访问令牌。instance_ID必需。 指定给您的 Hyper Protect Crypto Services 服务实例的唯一标识。 有关更多信息,请参阅 检索实例标识。 key_ring_ID可选。 密钥所属的密钥环的唯一标识。 如果未指定,那么 Hyper Protect Crypto Services 将在与指定实例关联的每个密钥环中搜索密钥。 因此,建议为更优化的请求指定密钥环标识。 注: 在没有
x-kms-key-ring头的情况下创建的密钥的密钥环标识为: 缺省值。 有关更多信息,请参阅 管理密钥环。key_material可选。 要在服务中存储和管理的新 base64 编码密钥资料。 如果最初在将密钥添加到服务时导入了密钥资料,那么此值是必需的。
要轮换最初由 Hyper Protect Crypto Services生成的密钥,请省略
payload属性并传递空的请求实体主体。 要轮换导入的密钥,请提供满足以下需求的密钥资料:- 密钥必须为 128,192 或 256 位。
- 数据字节(例如,对于 256 位,为 32 个字节)必须使用 Base64 编码进行编码。
成功的轮换请求会返回 HTTP
204 No Content响应,这表示根密钥已替换为新的密钥资料。 -
可选:通过运行以下调用来浏览 Hyper Protect Crypto Services 服务实例中的密钥,以验证是否轮换了密钥。
curl -X GET \ https://<instance_ID>.api.<region>.hs-crypto.appdomain.cloud/api/v2/keys \ -H 'accept: application/vnd.ibm.collection+json' \ -H 'authorization: Bearer <IAM_token>' \ -H 'bluemix-instance: <instance_ID>' \查看响应 entity-body 中的
lastRotateDate值,以检查密钥的上次轮换日期和时间。{ "metadata": { "collectionType": "application/vnd.ibm.kms.key+json", "collectionTotal": 1 }, "resources": [ { "type": "application/vnd.ibm.kms.key+json", "id": "02fd6835-6001-4482-a892-13bd2085f75d", "name": "test-root-key", "state": 1, "extractable": false, "crn": "crn:v1:bluemix:public:hs-crypto:us-south:a/f047b55a3362ac06afad8a3f2f5586ea:12e8c9c2-a162-472d-b7d6-8b9a86b815a6:key:02fd6835-6001-4482-a892-13bd2085f75d", "imported": false, "creationDate": "2020-03-12T03:50:12Z", "createdBy": "...", "algorithmType": "AES", "algorithmMetadata": { "bitLength": "256", "mode": "CBC_PAD" }, "algorithmBitSize": 256, "algorithmMode": "CBC_PAD", "lastUpdateDate": "2020-03-12T03:50:12Z", "lastRotateDate": "2020-03-12T03:49:01Z", "keyVersion": { "id": "2291e4ae-a14c-4af9-88f0-27c0cb2739e2", "creationDate": "2020-03-12T03:50:12Z" }, "dualAuthDelete": { "enabled": false }, "deleted": false } ] }keyVersion属性包含用于描述最新版本的根密钥的标识信息。您还可以使用以下命令列出可用于密钥的版本: Hyper Protect Crypto Services 密钥管理服务 API。 要了解更多信息,请参阅 查看密钥版本。
使用导入令牌来轮换密钥
如果最初使用导入令牌导入了根密钥,那么可以通过对以下端点进行 POST 调用来轮换密钥。
https://<instance_ID>.api.<region>.hs-crypto.appdomain.cloud/api/v2/keys/<key_ID>/actions/rotate
-
要轮换密钥,必须为您分配实例或密钥的 写入者 或 管理者 访问策略。 要了解 IAM 角色如何映射到 Hyper Protect Crypto Services 服务操作,请查看 服务访问角色。
-
检索要轮换的密钥的标识。
您可以通过发出
GET /v2/keys请求或通过在 UI 中查看密钥来检索指定密钥的标识。 -
使用导入令牌对要用于轮换现有密钥的密钥资料进行加密。
要了解如何使用导入令牌,请查看 教程: 创建和导入加密密钥。
-
通过运行以下 cURL 命令,将现有密钥替换为新的密钥资料。
curl -X POST \ https://<instance_ID>.api.<region>.hs-crypto.appdomain.cloud/api/v2/keys/<key_ID>/actions/rotate \ -H 'authorization: Bearer <IAM_token>' \ -H 'bluemix-instance: <instance_ID>' \ -H 'accept: application/vnd.ibm.kms.key_action+json' \ -H 'content-type: application/vnd.ibm.kms.key_action+json' \ -d '{ "type": "application/vnd.ibm.kms.key+json", "name": "<key_alias>", "description": "<key_description>", "extractable": <key_type>, "payload": "<encrypted_key>", "encryptionAlgorithm": "RSAES_OAEP_SHA_1", "encryptedNonce": "<encrypted_nonce>", "iv": "<iv>" }'根据下表替换示例请求中的变量。
表 3. 描述使用Hyper Protect Crypto Services API 复原密钥所需的变量 变量 描述 region必需。 区域缩写(例如, us-south或au-syd),表示 Hyper Protect Crypto Services 服务实例所在的地理区域。 有关更多信息,请参阅区域服务端点。port必需。 API 端点的端口号。 key_ID必需。 要轮换的密钥的唯一标识。 IAM_token必需。 您的 IBM Cloud 访问令牌。 在 cURL 请求中包含 IAM令牌的完整内容,包括 Bearer 值。 有关更多信息,请参阅 检索访问令牌。instance_ID必需。 指定给您的 Hyper Protect Crypto Services 服务实例的唯一标识。 有关更多信息,请参阅 检索实例标识。 key_alias必需。 密钥的人类可读的唯一名称,以便可轻松识别密钥。 为保护隐私,请不要将个人数据存储为密钥的元数据。 key_description密钥的扩展描述。 为保护隐私,请不要将个人数据存储为密钥的元数据。 encrypted_key必需。 导入令牌加密的新密钥资料。 该值必须经过 base64 编码。 确保密钥资料满足以下需求: - 密钥必须为 128,192 或 256 位。
- 数据字节(例如,对于 256 位,为 32 个字节)必须使用 Base64 编码进行编码。
要了解更多信息,请参阅 教程: 创建和导入加密密钥。
key_type布尔值,用于确定密钥资料是否可以离开服务。 将 extractable属性设置为false时,服务会将该密钥指定为可用于wrap或unwrap操作的根密钥。encrypted_nonce必需。 AES-GCM 加密现时标志,可确保您作为请求的一部分发送的位与我们接收的位完全相同。 现时标志将验证您正在复原的密钥。 要了解更多信息,请参阅 教程: 创建和导入加密密钥。 iv必需。 加密现时标志时由 AES-GCM 算法生成的初始化向量 (IV)。 此值用于对 Hyper Protect Crypto Services 系统中的存储器的密钥进行解码。 要了解更多信息,请参阅 教程: 创建和导入加密密钥。 成功的轮换请求将返回 HTTP
204 No Content响应,该响应指示根密钥已被新密钥材料替换。 -
可选: 通过检索有关密钥的详细信息来验证密钥是否已轮换。
curl -X GET \ https://<instance_ID>.api.<region>.hs-crypto.appdomain.cloud/api/v2/keys/<key_id>/metadata \ -H 'authorization: Bearer <IAM_token>' \ -H 'bluemix-instance: <instance_ID>' -H 'accept: application/vnd.ibm.kms.key+json'查看响应实体主体中的
lastRotateDate和keyVersion值,以检查上次轮换密钥的日期和时间。您还可以使用 Hyper Protect Crypto Services API 列出可用于密钥的版本。 要了解更多信息,请参阅 查看密钥版本。
下一步
- 轮换根密钥后,新的密钥资料可用于保护与根密钥关联的数据加密密钥 (DEK)。 了解如何在不公开纯文本格式的密钥的情况下对 DEKS 进行重新加密或重新包装,请参阅 重新包装密钥。
- 要了解包络加密如何帮助您控制云中静态数据的安全性,请参阅 使用包络加密保护数据。
- 要了解有关以编程方式管理密钥的更多信息,请 查看 Hyper Protect Crypto Services 密钥管理服务 API 参考文档。