IBM Cloud Docs
使用签名服务来管理用于实例初始化的签名密钥

使用签名服务来管理用于实例初始化的签名密钥

对于 Hyper Protect Crypto Services 实例初始化,您可以使用第三方签名服务来创建,存储和管理由 Terraform 或 Trusted Key Entry (TKE) CLI 插件使用的管理员签名密钥。 使用签名服务提供的签名密钥,当您运行 Terraform 和 TKE CLI 插件命令时,将不再使用本地工作站上的签名密钥文件。

签署服务先决条件

在可以使用签名服务来管理签名密钥之前,请确保完成实例初始化的 先决条件步骤

要对 Terraform 或 TKE CLI 插件启用签名服务,必须将该签名服务作为实现以下两个请求的 HTTP 服务器来实现。 使用签名服务访问的所有签名密钥都必须是 P521 EC 密钥。

  • GET /keys/:name

    此请求检索签名密钥的公用密钥。 添加加密单元管理员时需要公用密钥。 :name 参数标识要访问的签名密钥。 签名服务确定 :name 值如何与签名密钥关联。 :name 参数对应于 Terraform 资源块中的 key 参数。

    :name 参数将附加到访问签名服务的 URL。 它只能包含由 RFC3986 的 2.3 部分定义的非保留字符。 签名密钥的认证令牌将传递到 HTTP Authorization 请求头中的 GET /keys 请求。

    此请求返回 base64 编码的公用密钥。 以下是响应主体的示例:

    {
      "publickey": "<base64 encoded string of public key (ASN.1 DER encoded struct containing integer X and integer Y)>"
    }
    
  • POST /sign/:name

    这将请求签名服务使用 :name 参数标识的签名密钥对输入数据进行签名。 :name 参数将附加到访问签名服务的 URL。 它只能包含由 RFC3986 的 2.3 部分定义的非保留字符。 签名密钥的认证令牌将传递到 HTTP Authorization 请求头中的 POST /sign 请求。

    请求主体包含要签名的输入数据。 TKE CLI 插件和 Terraform 命令创建的请求还包含一个参数,该参数将 SHA-512 标识为生成签名时要使用的散列算法。 以下是请求主体的示例:

    {
      "hash_algorithm":"sha2-512",
      "input":"<base64 encoded string of data to be signed>"
    }
    

    此请求返回通过使用指定签名密钥的输入数据生成的签名。 以下是响应主体的示例:

    {
      "signature": "<base64 encoded string of binary data (ASN.1 DER encoded struct of integers R and S)>"
    }
    

配置 TKE CLI 插件以使用签名服务

通过完成以下步骤,将 TKE CLI 插件配置为使用签名服务提供的签名密钥,而不是将存储在工作站上的签名密钥文件用于签名命令:

  1. 将工作站上的 TKE_SIGNSERV_URL 环境变量设置为运行签名服务的 URL 和端口号。

    设置 TKE_SIGNSERV_URL 环境变量后,它指示您正在将第三方签名服务用于签名密钥。 在这种情况下,TKE sigkey 命令不会执行任何操作。 这些命令包括 ibmcloud tke sigkeysibmcloud tke sigkey-addibmcloud tke sigkey-rmibmcloud tke sigkey-sel

  2. CLOUDTKEFILES 环境变量所标识的子目录中创建名为 SIGNSERVKEYS 的文件。

    此文件应该是表示数组的 JSON 字符串,该数组列出用于签署命令的有效签名密钥。 每个数组条目必须包含 key 字段,并且可以选择包含 token 字段。 key 字段标识特定签名密钥。 token 字段授权使用密钥。 签名服务确定如何定义密钥标识和认证令牌。 如果未在 SIGNSERVKEYS 文件中指定 token 字段,那么在运行 TKE CLI 插件命令时将提示您输入令牌值,这比直接在文件中提供令牌值更安全。

    以下列出了 SIGNSERVKEYS 文件的一些示例:

    • 示例 1:

      [{"key":"first-key","token":"token-for-first-key"}]
      

      此示例指定单个有效签名密钥及其认证令牌。 因为指定了令牌,所以使用签名密钥时不会提示您输入令牌。

    • 示例 2:

      [{"key":"first-key"},{"key":"second-key"}]
      

      此示例指定了两个可以使用的有效签名密钥。 由于未指定令牌,因此当您使用任一密钥时,将提示您输入令牌。

    • 示例 3:

      [{"key":"first-key"},{"key":"second-key","token":"token-for-second-key"},{"key":"third-key"}]
      

      此示例指定可使用的三个有效签名密钥。 为第二个密钥指定了令牌,但未为第一个和第三个密钥指定令牌。 如果使用第一个或第三个密钥,那么将提示您输入相应的令牌。

    确保 SIGNSERVKEYS 文件包含足够的签名密钥,以供已安装的管理员满足签名阈值要求。 否则,您无法使用签名服务来执行 TKE 操作。

  3. 使用 ibmcloud tke cryptounit-admin-add 命令添加加密单元管理员。

    设置 TKE_SIGNSERV_URL 环境变量后,此命令会提示您输入签名密钥标识及其相应的访问令牌 (由签名服务定义) 以添加管理员。

下一步