创建根密钥

使用 IBM® Key Protect for IBM Cloud® 创建根密钥。

根密钥是用于保护云中已加密数据的安全性的对称密钥打包密钥。 有关根密钥的更多信息,请参阅使用包络加密保护数据

在一个区域创建的加密密钥可用于加密位于 IBM Cloud 内任何区域的数据存储。

在控制台中创建根密钥

创建服务实例后, 请按照以下步骤在 IBM Cloud 控制台。

如果部署了 专用 Key Protect 产品,则必须先 初始化实例,然后才能创建任何资源。

如果启用 Key Protect 实例的双重授权设置,请记住,您添加到服务中的任何密钥都需要两个用户的授权才能删除。

  1. 登录到 IBM Cloud 控制台

  2. 转到 “菜单” > “资源列表” 以查看您的资源列表。

  3. 从 IBM Cloud 资源列表中,选择您供应的 Key Protect 实例。

  4. 要创建新密钥,请单击“添加密钥”。 这将打开侧面板。 确保选择 创建密钥 选项。 请注意,若要为此密钥设置密钥别名密钥环或 轮换策略, 必须单击 “高级选项”选项卡才能显示这些设置。

如果您不是 Manager (或具有同等级别的许可权),那么不会显示 旋转策略 选项。

Specify the key's details:
说明创建密钥的设置。
设置 描述
类型 您希望在 Key Protect 中管理的 密钥类型。 缺省情况下选择根密钥。
密钥名称 一个易于理解的显示名称,便于识别您的密钥。 长度必须在 2 到 90 个字符之间 (包括在内)。 为保护隐私,请确保密钥名称不包含个人可标识信息 (PII),例如,姓名或位置。 请注意,密钥名称不需要唯一。
密钥描述 可选。 描述是一种有用的方法,用于以无法使用别名或其名称的方式添加有关密钥的信息 (例如,描述其用途的短语)。 此描述必须至少为两个字符且不超过 240 个字符,并且以后不能更改。 为保护您的隐私,请勿将个人数据(如您的姓名或位置)用作密钥的描述。
密钥别名 可选密钥别名 也是描述密钥的方法。 密钥最多可以有五个别名。
密钥环 可选密钥环 是允许根据需要独立管理这些分组的密钥分组。 每个密钥都必须是密钥环的一部分。 如果未选择密钥环,那么密钥将放在 default 密钥环中。 请注意,要将您正在创建的密钥放在密钥环中,您必须具有该密钥环上的 管理者 角色。 有关角色的更多信息,请查看 管理用户访问权
轮换策略 可选。 如果您持有 管理者 角色,那么可以在密钥创建时为密钥设置轮换策略。 如果缺省情况下存在用于在密钥上创建轮换策略的 实例策略,那么您还可以在创建密钥时将该策略覆盖到其他时间间隔。 请注意,如果您的实例启用了轮换策略,并且您在创建密钥时 禁用 该轮换策略,那么该策略仍会以 已禁用 状态写入密钥。 如果要稍后启用此策略,那么可以执行此操作。 请查看 创建密钥后设置轮换策略 以获取更多信息。

填写完密钥的详细信息后,请点击 “添加” 进行确认。

如果您知道要将钥匙放入哪个钥匙环中,并且您是该钥匙环_的管理员_,还可以转到 “钥匙环”面板,选择 ⋯,然后点击 “添加新钥匙”。 这将打开您通过单击“密钥”页面上的 添加 (其中 密钥环 变量中填充了密钥环的名称) 所看到的同一面板。

在该服务中生成的密钥是256位对称密钥,由AES_KW算法支持。 为了提高安全性,密钥通过位于安全 IBM Cloud 数据中心且通过 FIPS 140-2 Level 3 认证的硬件安全模块 (HSM) 生成。

如果需要在不同账户或环境中统一配置根密钥,可以使用 Key Protect 密钥模块自动完成。 如需完整设置 Key Protect 实例和钥匙圈,请参阅全包式 Key Protect 模块。 有关概述,请参阅 Terraform IBM 模块

使用 API 创建根密钥

如果部署了 专用 Key Protect 产品,则必须先 初始化实例,然后才能创建任何资源。

通过对以下端点执行 POST 调用来创建根密钥。

https://<region>.kms.cloud.ibm.com/api/v2/keys
  1. 检索认证凭证以使用服务中的密钥

  2. 通过运行以下 curl 命令来创建根密钥。

    $ curl -X POST \
        "https://<region>.kms.cloud.ibm.com/api/v2/keys" \
        -H "authorization: Bearer <IAM_token>" \
        -H "bluemix-instance: <instance_ID>" \
        -H "content-type: application/vnd.ibm.kms.key+json" \
        -H "x-kms-key-ring: <key_ring_ID>" \
        -H "correlation-id: <correlation_ID>" \
        -d '{
                "metadata": {
                    "collectionType": "application/vnd.ibm.kms.key+json",
                    "collectionTotal": 1
                },
                "resources": [
                    {
                        "type": "application/vnd.ibm.kms.key+json",
                        "name": "<key_name>",
                        "aliases": [alias_list],
                        "description": "<key_description>",
                        "expirationDate": "<expiration_date>",
                        "extractable": <key_type>
                    }
                ]
            }'
    

    根据下表替换示例请求中的变量。

描述了使用Key ProtectAPI 添加根密钥所需的变量。API 添加根密钥所需的变量。
变量 描述
区域 必填。 代表您的 Key Protect 实例所在地理区域的区域缩写,例如 us-south 或 eu-gb。 有关更多信息,请参阅区域服务端点
IAM_token 必填。 您的 IBM Cloud 访问令牌。 在 curl 请求中包含 IAM 令牌的完整内容,包括 Bearer 值。 如需了解更多信息,请参阅“获取访问令牌”。
instance_ID 必填。 指定给您的 Key Protect 服务实例的唯一标识。 如需了解更多信息,请参阅 “检索实例 ID”
键环 ID 可选。 您希望新创建的密钥作为其一部分的目标密钥环的唯一标识。 如果未指定,那么头将自动设置为 "default",并且密钥将位于指定的 Key Protect 服务实例中的缺省密钥环中。 有关更多信息,请参阅 分组键
correlation_ID 用于跟踪和关联事务的唯一标识。
key_name 必填。 一个便于识别密钥的人类可读名称。 重要信息:为保护隐私,请勿将个人数据存储为密钥的元数据。
别名列表 分配给密钥的一个或多个唯一的人类可读别名。 重要信息:为保护隐私,请勿将个人数据存储为密钥的元数据。 每个别名必须是字母数字,区分大小写,并且不能包含除短划线 (-) 或下划线 (_) 以外的空格或特殊字符。别名不能是 V 4 UUID,并且不得是 Key Protect 保留名称 :allowed_ip,密钥,密钥,元数据,策略,策略,注册,注册,环,环,轮换,打包,解包,重新打包,版本和版本。 别名大小可以介于 2 到 90 个字符 (含) 之间。
key_description 密钥的扩展描述。 重要信息:为保护隐私,请勿将个人数据存储为密钥的元数据。
到期日期 可选。 密钥在系统中过期的日期和时间,采用 RFC 3339 格式(YYYY-MM-DD HH:MM:SS.SS,例如 2019-10-12T07:20:50.52Z )。 设置过期日期时要谨慎,因为过期日期创建的密钥会在过期后一小时内自动过渡到_停用_状态。 在这种状态下,只允许对按键进行解包、重包、旋转和删除操作。 停用的密钥不能用于加密(封装)新数据,即使在停用时进行了旋转。 轮换不会重置或延长有效期,也不允许更改日期。 建议在原客户根密钥 (CRK) 过期之前,使用新客户根密钥 (CRK) 重新加密使用过期或失效密钥加密的任何数据,以防止服务中断。 删除和恢复已停用的密钥不会将其移回_激活状态_。 如果省略了 expiration_date 属性,则该密钥不会过期。
key_type 布尔值,用于确定密钥资料是否可以离开服务。 当您将 extractable 属性设置为 false 时,该服务会创建一个根密钥,您可以将其用于加密或解密操作。

设置过期日期时要谨慎,因为过期日期创建的密钥会在过期后一小时内自动过渡到_停用_状态。 在这种状态下,只允许对按键进行解包、重包、旋转和删除操作。 停用的密钥不能用于加密(封装)新数据,即使在停用时进行了旋转。 轮换不会重置或延长有效期,也不允许更改日期。 建议在原客户根密钥 (CRK) 过期之前,使用新客户根密钥 (CRK) 重新加密使用过期或失效密钥加密的任何数据,以防止服务中断。 删除和恢复已停用的密钥不会使其回到_激活状态_。 如果省略了 expiration_date 属性,则该密钥不会过期。

您可以使用 IBM Cloud Logs. 日志会使用 JSON 属性 responseData.expirationDateresponseData.daysToKeyExpire 对有过期日期的密钥和以下 action 值显示过期日期和剩余天数:kms.secrets.wrap, kms.secrets.unwrap, kms.secrets.rewrap, kms.secrets.read, kms.secrets.readmetadata, kms.secrets.create, kms.secrets-with-policy-overrides.createkms.secrets.expire。 此外,成功调用 GET /api/v2/keys 的 REST 会返回每个有过期日期的密钥的 expirationDate 属性。

为保护个人数据的机密性,在向服务添加密钥时,避免输入个人可标识信息 (PII),例如,姓名或位置。

成功的 POST api/v2/keys 响应会返回密钥的标识值以及其他元数据。 标识是指定给密钥的唯一标识,用于后续调用 Key Protect API。

{
    "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",
            "aliases": [
                "alias-1",
                "alias-2"
              ],
            "description": "A test root key",
            "state": 1,
            "extractable": false,
            "crn": "crn:v1:bluemix:public:kms:us-south:a/f047b55a3362ac06afad8a3f2f5586ea:12e8c9c2-a162-472d-b7d6-8b9a86b815a6:key:02fd6835-6001-4482-a892-13bd2085f75d",
            "imported": false,
            "creationDate": "2020-03-12T03:37:32Z",
            "createdBy": "...",
            "algorithmType": "Deprecated",
            "algorithmMetadata": {
                "bitLength": "256",
                "mode": "Deprecated"
            },
            "algorithmBitSize": 256,
            "algorithmMode": "Deprecated",
            "lastUpdateDate": "2020-03-12T03:37:32Z",
            "keyVersion": {
                "id": "2291e4ae-a14c-4af9-88f0-27c0cb2739e2",
                "creationDate": "2020-03-12T03:37:32Z"
            },
            "dualAuthDelete": {
                "enabled": false
            },
            "deleted": false
        }
    ]
}

有关响应参数的详细说明,请参阅 Key Protect REST API 参考文档

下一步