使用 CloudHSM CLI 为 AWS CloudHSM 管理员设置仲裁身份验证
以下主题介绍了配置硬件安全模块(HSM)以便 AWS CloudHSM 管理员可以使用仲裁身份验证而必须完成的步骤。当您首次为管理员配置仲裁身份验证时,只需执行下列步骤一次。完成这些步骤后,请参阅 使用 CloudHSM CLI 在为 AWS CloudHSM 启用仲裁身份验证的情况下进行用户管理。
先决条件
要理解此示例,应熟悉 CloudHSM CLI。
第 1 步:创建并注册签名密钥
要使用仲裁身份验证,每个管理员都必须完成以下所有操作:
创建 RSA 密钥对
创建和保护密钥对的方式有多种。以下示例说明如何使用 OpenSSL
例 - 使用 OpenSSL 创建私有密钥
以下示例演示如何使用 OpenSSL 创建 2048 位 RSA 密钥。要使用此示例,请将 <admin.key> 替换为您要存储密钥的文件的名称。
$openssl genrsa -out<admin.key>Generating RSA private key, 2048 bit long modulus .....................................+++ .+++ e is 65537 (0x10001)
接下来,使用您刚刚创建的私钥生成公有密钥。
例 - 使用 OpenSSL 创建公有密钥
以下示例演示如何使用 OpenSSL,根据您刚刚创建的私有密钥创建公钥。
$openssl rsa -in admin.key -outform PEM -pubout -out admin1.pubwriting RSA key
创建注册令牌并签名
创建一个令牌,并使用上一步生成的私有密钥签名。
例 – 创建注册令牌
-
使用以下命令启动 CloudHSM CLI。
-
通过运行quorum token-sign generate命令创建注册令牌:
aws-cloudhsm >quorum token-sign generate --service registration --token /path/tokenfile{ "error_code": 0, "data": { "path": "/path/tokenfile" } } -
quorum token-sign generate命令在指定的文件路径上生成注册令牌。检查令牌文件:
$cat /path/tokenfile{ "version": "2.0", "tokens": [ { "approval_data":<approval data in base64 encoding>, "unsigned":<unsigned token in base64 encoding>, "signed": "" } ] }令牌路径包含以下内容:
approval_data:base64 编码的随机数据令牌,其原始数据最大不超过 245 字节。
未签名:approval_data 的 base64 编码和 SHA-256 哈希令牌。
签名:未签名令牌的 base64 编码签名令牌(签名),使用之前由 OpenSSL 生成的 RSA 2048 位私钥。
您通过私钥对未签名令牌进行签名,以证明您有权访问私钥。注册令牌文件时,需要完成填充签名和公钥,将管理员注册为 AWS CloudHSM 集群的仲裁用户。
例 – 对未签名注册令牌签名
解码 base64 编码的未签名令牌,并将其放入二进制文件:
$echo -n '6BMUj6mUjjko6ZLCEdzGlWpR5sILhFJfqhW1ej3Oq1g=' | base64 -d > admin.bin使用 OpenSSL 和私钥对当前未签名的二进制注册令牌签名,并创建二进制注册文件:
$openssl pkeyutl -sign \ -inkey admin.key \ -pkeyopt digest:sha256 \ -keyform PEM \ -in admin.bin \ -out admin.sig.bin-
将二进制签名编码为 base64:
$base64 -w0 admin.sig.bin > admin.sig.b64 -
将 base64 编码的签名复制并粘贴至令牌文件:
{ "version": "2.0", "tokens": [ { "approval_data":<approval data in base64 encoding>, "unsigned":<unsigned token in base64 encoding>, "signed":<signed token in base64 encoding>} ] }
通过 HSM 注册公钥
创建密钥后,管理员必须通过 AWS CloudHSM 集群注册公钥。
向 HSM 注册公有密钥
-
使用以下命令启动 CloudHSM CLI。
-
使用 CloudHSM CLI,以管理员身份登录。
aws-cloudhsm >login --username<admin>--role adminEnter password: { "error_code": 0, "data": { "username": "<admin>", "role": "admin" } } -
使用 使用 CloudHSM CLI 注册用户的令牌签名仲裁策略 命令注册公有密钥。有关更多信息,请参阅以下示例或使用 help user change-quorum token-sign register 命令。
例 – 通过 AWS CloudHSM 集群注册公钥
以下示例说明如何使用 CloudHSM CLI 中的 user change-quorum token-sign register 命令向 HSM 注册管理员的公有密钥。要使用此命令,管理员必须登录 HSM。将这些值替换为您自己的值:
aws-cloudhsm >user change-quorum token-sign register --public-key</path/admin.pub>--signed-token</path/tokenfile>{ "error_code": 0, "data": { "username": "admin", "role": "admin" } }
注意
/path/admin.pub:公钥 PEM 文件的文件路径
必需:是
/path/tokenfile:用户私钥签名令牌的文件路径
必需:是
在所有管理员注册其公钥后,user list 命令的输出将显示在仲裁字段中,表明启用仲裁策略,如下所示:
aws-cloudhsm >user list{ "error_code": 0, "data": { "users": [ { "username": "admin", "role": "admin", "locked": "false", "mfa": [], "quorum": [ { "strategy": "token-sign", "status": "enabled" } ], "cluster-coverage": "full" }, { "username": "admin2", "role": "admin", "locked": "false", "mfa": [], "quorum": [ { "strategy": "token-sign", "status": "enabled" } ], "cluster-coverage": "full" }, { "username": "admin3", "role": "admin", "locked": "false", "mfa": [], "quorum": [ { "strategy": "token-sign", "status": "enabled" } ], "cluster-coverage": "full" }, { "username": "admin4", "role": "admin", "locked": "false", "mfa": [], "quorum": [ { "strategy": "token-sign", "status": "enabled" } ], "cluster-coverage": "full" }, { "username": "app_user", "role": "internal(APPLIANCE_USER)", "locked": "false", "mfa": [], "quorum": [], "cluster-coverage": "full" } ] } }
在本例中,AWS CloudHSM 集群具有两个 HSM,每个 HSM 都具有相同的管理员,如以下来自 user list 命令的输出中所示。有关创建用户的更多信息,请参阅 使用 CloudHSM CLI 进行用户管理
第 2 步:在 HSM 上设置仲裁最小值
要使用仲裁身份验证,管理员必须登录 HSM,然后设置仲裁最小值。这是执行管理员用户管理操作所需的最少数量的 CO 审批。HSM 上的任何管理员 (包括尚未注册签名密钥的管理员) 都可设置仲裁最小值。您可以随时更改仲裁最小值。有关更多信息,请参阅 更改最小值。
在 HSM 上设置仲裁最小值
-
使用以下命令启动 CloudHSM CLI。
-
使用 CloudHSM CLI,以管理员身份登录。
aws-cloudhsm >login --username<admin>--role adminEnter password: { "error_code": 0, "data": { "username": "<admin>", "role": "admin" } } -
使用 使用 CloudHSM CLI 更新仲裁值 命令设置仲裁最小值。
--service标志用于标识您要为其设置值的 HSM 服务。有关更多信息,请参阅以下示例或使用 help quorum token-sign set-quorum-value 命令。
例 - 在 HSM 上设置仲裁最小值
此示例使用仲裁最小值二 (2)。您可以选择介于二 (2) 到八 (8) 范围之内的任何值 (最多为 HSM 上的管理员总数量)。在此示例中,HSM 包含四 (4) 位管理员,因此可能的最大值为四 (4)。
要使用以下示例命令,请将最终数量 (<2>) 替换为首选仲裁最小值。
aws-cloudhsm >quorum token-sign set-quorum-value --service user --value<2>{ "error_code": 0, "data": "Set quorum value successful" }
在此示例中,使用 CloudHSM CLI 显示仲裁值 命令列出了服务中包含的 HSM 服务类型、名称和描述。
仲裁最小值
使用 quorum token-sign list-quorum-values 命令获取服务的仲裁最小值。
aws-cloudhsm >quorum token-sign list-quorum-values{ "error_code": 0, "data": { "user": 2, "quorum": 1 } }
来自前面的 quorum token-sign list-quorum-values 命令的输出显示,HSM 用户管理操作的仲裁最小值(负责用户管理操作)现在为二 (2)。完成这些步骤后,请参阅 使用仲裁(M of N)进行用户管理。
管理员服务:仲裁身份验证用于管理员特权服务,例如创建用户、删除用户、更改用户密码、设置仲裁值以及停用仲裁和 MFA 功能。
加密用户服务:仲裁身份验证用于与特定密钥关联的加密用户特权服务,例如使用密钥签名、共享/取消共享密钥、包装/解包密钥以及设置密钥的属性。关联密钥的仲裁值是在生成、导入或解包密钥时配置的。仲裁值必须等于或小于与该密钥关联的用户数,其中包括与之共享密钥的用户和密钥所有者。
每个服务类型都进一步细分为限定服务名称,其中包含一组特定的、可执行的仲裁支持服务操作。
| 服务名称 | 服务类型 | 服务操作 |
|---|---|---|
| 用户 | 管理员 |
|
| 仲裁 | 管理员 |
|
| cluster1 | 管理员 |
|
| 密钥管理 | 加密用户 |
|
| 密钥使用 | 加密用户 |
|
[1] 集群服务仅在 hsm2m.medium 上可用