使用签名服务来管理用于实例初始化的签名密钥
对于 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 部分定义的非保留字符。 签名密钥的认证令牌将传递到 HTTPAuthorization
请求头中的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 部分定义的非保留字符。 签名密钥的认证令牌将传递到 HTTPAuthorization
请求头中的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 插件配置为使用签名服务提供的签名密钥,而不是将存储在工作站上的签名密钥文件用于签名命令:
-
将工作站上的
TKE_SIGNSERV_URL
环境变量设置为运行签名服务的 URL 和端口号。设置
TKE_SIGNSERV_URL
环境变量后,它指示您正在将第三方签名服务用于签名密钥。 在这种情况下,TKEsigkey
命令不会执行任何操作。 这些命令包括ibmcloud tke sigkeys
,ibmcloud tke sigkey-add
,ibmcloud tke sigkey-rm
和ibmcloud tke sigkey-sel
。 -
在
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 操作。 -
-
使用
ibmcloud tke cryptounit-admin-add
命令添加加密单元管理员。设置
TKE_SIGNSERV_URL
环境变量后,此命令会提示您输入签名密钥标识及其相应的访问令牌 (由签名服务定义) 以添加管理员。
下一步
- 有关使用 TKE CLI 插件完成服务实例初始化的后续步骤的更多信息,请参阅 使用密钥部件文件初始化服务实例。
- 有关如何配置 Terraform 以使用签名服务,请参阅 设置 Terraform for Hyper Protect Crypto Services。