使用面向加密员(CO)的 Quorum 身份验证 - AWS CloudHSM

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用面向加密员(CO)的 Quorum 身份验证

HSM 上的加密管理者 (CO) 可为 HSM 上的以下操作配置 quorum 身份验证:

  • 创建 HSM 用户

  • 删除 HSM 用户

  • 更改其他 HSM 用户的密码

在针对 quorum 身份验证配置 HSM 后,CO 无法自行执行 HSM 用户管理操作。以下示例显示 CO 尝试在 HSM 上创建新用户时的输出。该命令失败,并出现 RET_MXN_AUTH_FAILED 错误,这指示 quorum 身份验证失败。

aws-cloudhsm>createUser CU user1 password *************************CAUTION******************************** This is a CRITICAL operation, should be done on all nodes in the cluster. AWS does NOT synchronize these changes automatically with the nodes on which this operation is not executed or failed, please ensure this operation is executed on all nodes in the cluster. **************************************************************** Do you want to continue(y/n)?y Creating User user1(CU) on 2 nodes createUser failed: RET_MXN_AUTH_FAILED creating user on server 0(10.0.2.14) failed Retry/Ignore/Abort?(R/I/A):A

要执行 HSM 用户管理操作,CO 必须完成以下任务:

如果您尚未为 CO 的 quorum 身份验证配置 HSM,请立即执行此操作。有关更多信息,请参阅 首次设置

获取仲裁令牌

首先,CO 必须使用 cloudhsm_mgmt_util 命令行工具请求仲裁令牌

获取仲裁令牌
  1. 使用以下命令启动 cloudhsm_mgmt_util 命令行工具。

    $ /opt/cloudhsm/bin/cloudhsm_mgmt_util /opt/cloudhsm/etc/cloudhsm_mgmt_util.cfg
  2. 使用 loginHSM 命令以 CO 身份登录 HSM。有关更多信息,请参阅 使用 CloudHSM 管理实用程序 (CMU, CloudHSM Management Utility) 管理 HSM 用户

  3. 使用 getToken 命令获取仲裁令牌。有关更多信息,请参阅以下示例或使用 help getToken 命令。

例 :获取仲裁令牌

此示例将为用户名为 officer1 的 CO 获取一个 quorum 令牌,并将该令牌保存到一个名为 officer1.token 的文件中。要使用示例命令,可将这些值替换为您自己的值:

  • officer1:要获取令牌的 CO 的姓名。这必须是已登录 HSM 并且正在运行此命令的 CO。

  • officer1.token:用于存储仲裁令牌的文件的名称。

在以下命令中,3 标识可将获取的令牌用于的服务。在此示例中,令牌用于 HSM 用户管理操作 (服务 3)。有关更多信息,请参阅 在 HSM 上设置仲裁最小值

aws-cloudhsm>getToken 3 officer1 officer1.token getToken success on server 0(10.0.2.14) Token: Id:1 Service:3 Node:1 Key Handle:0 User:officer1 getToken success on server 1(10.0.1.4) Token: Id:1 Service:3 Node:0 Key Handle:0 User:officer1

获得批准 CO 的签名

具有 quorum 令牌的 CO 必须获得其他 CO 批准的令牌。为了提供其批准,其他 CO 使用其签名密钥以加密方式对令牌进行签名。他们在 HSM 外部执行此操作。

可通过多种不同方式对令牌进行签名。以下示例说明如何使用 OpenSSL 执行该操作。要使用其他签名工具,请确保该工具使用 CO 的私有密钥 (签名密钥) 对令牌的 SHA-256 摘要进行签名。

例 :获得批准 CO 的签名

在此示例中,具有令牌的 CO (officer1) 至少需要两次批准。以下示例命令说明两个 CO 如何使用 OpenSSL 以加密方式对令牌进行签名。

在第一条命令中,officer1 对自己的令牌进行签名。要使用以下示例命令,请将这些值替换为您自己的值:

  • officer1.keyofficer2.key:包含 CO 的签名密钥的文件的名称。

  • officer1.token.sig1officer1.token.sig2:要用于存储签名的文件的名称。确保将每个签名保存在不同的文件中。

  • officer1.token:包含 CO 正在签名的令牌的文件的名称。

$ openssl dgst -sha256 -sign officer1.key -out officer1.token.sig1 officer1.token Enter pass phrase for officer1.key:

在以下命令中,officer2 将对同一令牌进行签名。

$ openssl dgst -sha256 -sign officer2.key -out officer1.token.sig2 officer1.token Enter pass phrase for officer2.key:

批准 HSM 上的已签名令牌

在一个 CO 获得来自其他 CO 的最小数量的批准 (签名) 后,该 CO 必须批准 HSM 上的已签名令牌。

批准 HSM 上的已签名令牌
  1. 创建一个令牌批准文件。有关更多信息,请参阅以下示例。

  2. 使用以下命令启动 cloudhsm_mgmt_util 命令行工具。

    $ /opt/cloudhsm/bin/cloudhsm_mgmt_util /opt/cloudhsm/etc/cloudhsm_mgmt_util.cfg
  3. 使用 loginHSM 命令以 CO 身份登录 HSM。有关更多信息,请参阅 使用 CloudHSM 管理实用程序 (CMU, CloudHSM Management Utility) 管理 HSM 用户

  4. 使用 approveToken 命令批准已签名令牌,并传递令牌批准文件。有关更多信息,请参阅以下示例。

例 - 创建一个令牌批准文件并批准 HSM 上的已签名令牌

令牌批准文件是一个采用了 HSM 要求的特定格式的文本文件。该文件包含有关令牌、其批准者和批准者签名的信息。下面显示了示例令牌批准文件。

# For "Multi Token File Path", type the path to the file that contains # the token. You can type the same value for "Token File Path", but # that's not required. The "Token File Path" line is required in any # case, regardless of whether you type a value. Multi Token File Path = officer1.token; Token File Path = ; # Total number of approvals Number of Approvals = 2; # Approver 1 # Type the approver's type, name, and the path to the file that # contains the approver's signature. Approver Type = 2; # 2 for CO, 1 for CU Approver Name = officer1; Approval File = officer1.token.sig1; # Approver 2 # Type the approver's type, name, and the path to the file that # contains the approver's signature. Approver Type = 2; # 2 for CO, 1 for CU Approver Name = officer2; Approval File = officer1.token.sig2;

创建令牌批准文件后,CO 使用 cloudhsm_mgmt_util 命令行工具登录 HSM。随后,CO 使用 approveToken 命令批准令牌,如以下示例中所示。将 approval.txt 替换为令牌批准文件的名称。

aws-cloudhsm>approveToken approval.txt approveToken success on server 0(10.0.2.14) approveToken success on server 1(10.0.1.4)

如果此命令成功,则表示 HSM 已批准 quorum 令牌。要查看令牌的状态,请使用 listTokens 命令,如以下示例中所示。此命令的输出表明,令牌拥有所需数量的批准。

令牌有效时间指示保证令牌在 HSM 上保留的时间长度。甚至在令牌有效时间结束 (零秒) 后,您仍可以使用令牌。

aws-cloudhsm>listTokens ===================== Server 0(10.0.2.14) ===================== -------- Token - 0 ---------- Token: Id:1 Service:3 Node:1 Key Handle:0 User:officer1 Token Validity: 506 sec Required num of approvers : 2 Current num of approvals : 2 Approver-0: officer1 Approver-1: officer2 Num of tokens = 1 ===================== Server 1(10.0.1.4) ===================== -------- Token - 0 ---------- Token: Id:1 Service:3 Node:0 Key Handle:0 User:officer1 Token Validity: 506 sec Required num of approvers : 2 Current num of approvals : 2 Approver-0: officer1 Approver-1: officer2 Num of tokens = 1 listTokens success

将令牌用于用户管理操作

在 CO 拥有具有所需数量的批准的令牌后 (如上一部分中所示),CO 可以执行下列 HSM 用户管理操作之一:

  • 使用 createUser 命令创建 HSM 用户

  • 使用 deleteUser 命令删除 HSM 用户

  • 使用 changePswd 命令更改其他 HSM 用户的密码

有关使用这些命令的更多信息,请参阅管理 HSM 用户

CO 只能将令牌用于一项操作。在该操作成功后,该令牌不再有效。要执行其他 HSM 用户管理操作,CO 必须获取新的 quorum 令牌、获取来自批准者的新签名,并批准 HSM 上的新令牌。

注意

仅当您当前登录会话打开时,MofN 令牌才有效。如果您注销 cloudhsm_mgmt_util 或网络连接断开,则该令牌将不再有效。同样,授权令牌只能在 cloudhsm_mgmt_util 中使用,不能用于在其他应用程序中进行身份验证。

在以下示例命令中,CO 将在 HSM 上创建一个新用户。

aws-cloudhsm>createUser CU user1 password *************************CAUTION******************************** This is a CRITICAL operation, should be done on all nodes in the cluster. AWS does NOT synchronize these changes automatically with the nodes on which this operation is not executed or failed, please ensure this operation is executed on all nodes in the cluster. **************************************************************** Do you want to continue(y/n)?y Creating User user1(CU) on 2 nodes

在上一条命令成功后,后续 listUsers 命令将显示新用户。

aws-cloudhsm>listUsers Users on server 0(10.0.2.14): Number of users found:8 User Id User Type User Name MofnPubKey LoginFailureCnt 2FA 1 PCO admin NO 0 NO 2 AU app_user NO 0 NO 3 CO officer1 YES 0 NO 4 CO officer2 YES 0 NO 5 CO officer3 YES 0 NO 6 CO officer4 YES 0 NO 7 CO officer5 YES 0 NO 8 CU user1 NO 0 NO Users on server 1(10.0.1.4): Number of users found:8 User Id User Type User Name MofnPubKey LoginFailureCnt 2FA 1 PCO admin NO 0 NO 2 AU app_user NO 0 NO 3 CO officer1 YES 0 NO 4 CO officer2 YES 0 NO 5 CO officer3 YES 0 NO 6 CO officer4 YES 0 NO 7 CO officer5 YES 0 NO 8 CU user1 NO 0 NO

如果 CO 尝试执行其他 HSM 用户管理操作,该操作将失败并出现 quorum 身份验证错误,如以下示例中所示。

aws-cloudhsm>deleteUser CU user1 Deleting user user1(CU) on 2 nodes deleteUser failed: RET_MXN_AUTH_FAILED deleteUser failed on server 0(10.0.2.14) Retry/rollBack/Ignore?(R/B/I):I deleteUser failed: RET_MXN_AUTH_FAILED deleteUser failed on server 1(10.0.1.4) Retry/rollBack/Ignore?(R/B/I):I

listTokens 命令指明 CO 没有已批准令牌,如以下示例中所示。要执行其他 HSM 用户管理操作,CO 必须获取新的 quorum 令牌、获取来自批准者的新签名,并批准 HSM 上的新令牌。

aws-cloudhsm>listTokens ===================== Server 0(10.0.2.14) ===================== Num of tokens = 0 ===================== Server 1(10.0.1.4) ===================== Num of tokens = 0 listTokens success