

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

# HSM 用户位于 AWS CloudHSM
<a name="manage-hsm-users"></a>

在使用 AWS CloudHSM 集群进行加密处理之前，必须先在集群中的硬件安全模块 (HSM) 上创建用户和[密钥](manage-keys.md)。

**注意**  
HSM 用户与 IAM 用户不同。拥有正确证书的 IAM 用户可以通过通过 AWS API 与资源交互来创建 HSMs 。创建 HSM 后，您必须使用 HSM 用户凭证对 HSM 上的操作进行身份验证。

 在中 AWS CloudHSM，您必须使用 C [loudHSM](cloudhsm_cli-getting-started.md) CLI [或 CloudHSM 管理实用程序 (CMU) 命令行工具在您的 H](cloudhsm_mgmt_util-getting-started.md) SM 上创建和管理用户。CloudHSM CLI 可与[最新的 SDK 版本系列](use-hsm.md)配合使用，而 CMU 则可与[以前的 SDK 版本系列](choose-client-sdk.md)配合使用。

有关管理 AWS CloudHSM中的 HSM 用户的更多信息，请参阅以下主题。您还可以了解如何使用 quorum 身份验证 (也称为“N 中的 M 访问控制”)。

**Topics**
+ [使用 CloudHSM CLI 进行用户管理](manage-hsm-users-chsm-cli.md)
+ [使用 CMU 管理用户](manage-hsm-users-cmu.md)

# 使用 CloudHSM CLI 进行 HSM 用户管理
<a name="manage-hsm-users-chsm-cli"></a>

 [要在中管理硬件安全模块 (HSM) 用户 AWS CloudHSM，必须使用管理员的用户名和密码登录 HSM。](understanding-users.md#admin)只有管理员才能管理用户。HSM 包含名为 admin 的默认管理员。在[激活集群](activate-cluster.md)时，您可以设置 admin 的密码。

本主题提供有关使用 CloudHSM CLI 管理 HSM 用户的 step-by-step说明和详细信息。

**Topics**
+ [先决条件](manage-hsm-users-chsm-cli-prereq.md)
+ [用户类型](understanding-users.md)
+ [权限表](user-permissions-table-chsm-cli.md)
+ [创建管理员](create-admin-cloudhsm-cli.md)
+ [创建 CUs](create-user-cloudhsm-cli.md)
+ [列出所有用户](list-users-cloudhsm-cli.md)
+ [更改密码](change-user-password-cloudhsm-cli.md)
+ [删除用户](delete-user-cloudhsm-cli.md)
+ [管理 MFA 用户](login-mfa-token-sign.md)
+ [管理仲裁身份验证（M of N）](quorum-auth-chsm-cli.md)

# 在 CloudHSM CLI 中管理用户的先决条件
<a name="manage-hsm-users-chsm-cli-prereq"></a>

在使用 CloudHSM CLI 管理中的硬件安全模块 (HSM) AWS CloudHSM用户之前，必须完成以下先决条件。以下主题介绍了如何开始使用 CloudHSM CLI。

**Topics**
+ [获取 HSM IP 地址](#manage-chsm-cli-users-ip)
+ [下载 CloudHSM CLI](#get-cli-users-cloudhsm-cli)

## 获取 HSM 的 IP 地址 AWS CloudHSM
<a name="manage-chsm-cli-users-ip"></a>

 要使用 CloudHSM CLI，您必须使用配置工具更新本地配置。有关使用 CloudHSM CLI 运行配置工具的说明，请参阅 [AWS CloudHSM 命令行界面 (CLI) 入门](cloudhsm_cli-getting-started.md)。`-a` 参数要求您在集群中添加 HSM 的 IP 地址。如果您有多个 IP 地址 HSMs，则可以使用任何 IP 地址。这可确保 CloudHSM CLI 可以将您所做的任何变更传播到整个集群中。请记住，CloudHSM CLI 使用其本地文件来跟踪集群信息。如果自上次在特定主机上使用 CloudHSM CLI 以来该集群已更改，则必须将此类更改添加到存储在该主机上的本地配置文件中。在使用 CloudHSM CLI 时，切勿删除 HSM。

**获取 HSM 的 IP 地址（控制台）**

1. 在家中打开[https://console.aws.amazon.com/cloudhsm/主 AWS CloudHSM](https://console.aws.amazon.com/cloudhsm/home)机。

1. 要更改 Amazon Web Services Region，请使用页面右上角的区域选择器（Region selector）。

1. 要打开该集群的详细信息页面，请在集群表中选择集群 ID。

1. 要获取 IP 地址，请转到 HSMs 选项卡。对于 IPv4 集群，请选择 **ENI 地址下列出 IPv4 的地址**。对于双栈集群，请使用 ENI IPv4 或 **ENI IPv6 地址**。

**获取 HSM 的 IP 地址（AWS CLI）**
+ 使用 AWS CLI中的 **[describe-clusters](https://docs.aws.amazon.com/cli/latest/reference/cloudhsmv2/describe-clusters.html)** 命令获取 HSM 的 IP 地址。在命令的输出中，的 IP 地址 HSMs 是`EniIp`和的值`EniIpV6`（如果是双栈群集）。

  ```
  $ aws cloudhsmv2 describe-clusters
  {
      "Clusters": [
          { ... }
              "Hsms": [
                  {
  ...
                      "EniIp": "10.0.0.9",
  ...
                  },
                  {
  ...
                      "EniIp": "10.0.1.6",
                      "EniIpV6": "2600:113f:404:be09:310e:ed34:3412:f733",
  ...
  ```

## 下载 CloudHSM CLI
<a name="get-cli-users-cloudhsm-cli"></a>

最新版本的 CloudHSM CLI 可用于客户端开发工具包 5 的 HSM 用户管理任务。要下载和安装 CloudHSM CLI，请按照[安装和配置 CloudHSM CLI](gs_cloudhsm_cli-install.md) 中的说明操作。

# CloudHSM CLI 的 HSM 用户类型
<a name="understanding-users"></a>

 您在硬件安全模块 (HSM) 上执行的大多数操作都需要 H AWS CloudHSM *SM* 用户的凭证。HSM 对每个 HSM 用户进行身份验证，每个 HSM 用户都有一种*类型*，其可确定您可以在 HSM 上以该用户身份执行的操作。

**注意**  
HSM 用户与 IAM 用户不同。拥有正确证书的 IAM 用户可以通过通过 AWS API 与资源交互来创建 HSMs 。创建 HSM 后，您必须使用 HSM 用户凭证对 HSM 上的操作进行身份验证。

**Topics**
+ [未激活的管理员](#unactivated-admin)
+ [Admin](#admin)
+ [加密用户 (CU)](#crypto-user-chsm-cli)
+ [设备用户 (AU)](#appliance-user-chsm-cli)

## 未激活的管理员
<a name="unactivated-admin"></a>

在 CloudHSM CLI 中，未激活的管理员是一个临时用户，仅存在于从未激活过的集群 AWS CloudHSM 中的第一个 HSM 上。要[激活集群](activate-cluster.md)，请在 CloudHSM CLI 中运行 **cluster activate** 命令。运行此命令后，系统会提示未激活的管理员更改密码。更改密码后，未激活的管理员将成为管理员。

## Admin
<a name="admin"></a>

在 CloudHSM CLI 中，管理员可以执行用户管理操作。例如，它们可以创建和删除用户以及更改用户密码。有关管理员的更多信息，请参阅 [CloudHSM CLI 的 HSM 用户权限表](user-permissions-table-chsm-cli.md)。

## 加密用户 (CU)
<a name="crypto-user-chsm-cli"></a>

加密用户 (CU) 可以执行以下密钥管理和加密操作。
+ **密钥管理** – 创建、删除、共享、导入和导出加密密钥。
+ **加密操作** – 使用加密密钥来执行加密、解密、签名、验证及更多操作。

有关更多信息，请参阅[CloudHSM CLI 的 HSM 用户权限表](user-permissions-table-chsm-cli.md)。

## 设备用户 (AU)
<a name="appliance-user-chsm-cli"></a>

设备用户 (AU) 可以在您的集群上执行克隆和同步操作 HSMs。 AWS CloudHSM 使用 AU 同步集 AWS CloudHSM 群 HSMs 中的。AU 存在于 HSMs 提供的所有内容上 AWS CloudHSM，并且权限有限。有关更多信息，请参阅[CloudHSM CLI 的 HSM 用户权限表](user-permissions-table-chsm-cli.md)。

AWS 无法对您的执行任何操作 HSMs 。 AWS 无法查看或修改您的用户或密钥，也无法使用这些密钥执行任何加密操作。

# CloudHSM CLI 的 HSM 用户权限表
<a name="user-permissions-table-chsm-cli"></a>

下表列出了按可在 AWS CloudHSM中执行操作的 HSM 用户或会话类型排序的硬件安全模块（HSM）操作。


|  | Admin | 加密用户 (CU) | 设备用户 (AU) | 未经身份验证的会话 | 
| --- | --- | --- | --- | --- | 
| 获取基本集群信息¹ | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | 
| 更改自己的密码 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | 不适用 | 
| 更改任意用户的密码 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png) 不支持 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png) 不支持 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png)否 | 
| 添加、删除用户 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png) 不支持 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png) 不支持 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png)否 | 
| 获取同步状态² | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png) 不支持 | 
| 提取、插入遮蔽对象³ | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png) 不支持 | 
| 密钥管理功能⁴ | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png)否 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png) 不支持 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png)否 | 
| 加密、解密 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png)否 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png) 不支持 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png)否 | 
| 签署、验证 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png)否 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png) 不支持 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png)否 | 
| 生成摘要和 HMACs | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png)否 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png) 不支持 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png)否 | 
+  [1] 基本集群信息包括集群 HSMs 中的数量以及每个 HSM 的 IP 地址、型号、序列号、设备 ID、固件 ID 等。
+  [2] 用户可以获取与 HSM 上的密钥对应的一组摘要（哈希值）。应用程序可以比较这些摘要集，以了解集群 HSMs 中的同步状态。
+  [3] 遮蔽对象是在离开 HSM 之前进行加密的密钥。它们无法在 HSM 外部加密。只有在将其插入 HSM 之后，并且该 HSM 所在集群与提取它们时的 HSM 的集群相同，才会解密它们。应用程序可以提取和插入被屏蔽的对象，以便 HSMs 在群集中同步。
+  [4] 密钥管理功能包括创建、删除、包装、解开包装和修改密钥的属性。

# 使用 CloudHSM CLI 创建 HSM 用户管理员
<a name="create-admin-cloudhsm-cli"></a>

按照以下步骤使用 CloudHSM CLI 创建硬件安全模块（HSM）管理员用户。

1. 使用以下命令启动 CloudHSM CLI 交互模式。

------
#### [ Linux ]

   ```
   $ /opt/cloudhsm/bin/cloudhsm-cli interactive
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\cloudhsm-cli.exe" interactive
   ```

------

1. 使用 **login** 命令，并以管理员身份登录该集群。

   ```
   aws-cloudhsm > login --username <username> --role admin
   ```

1. 系统将会提示您输入密码。输入密码后，输出将显示该命令已成功。

   ```
   Enter password:
   {
     "error_code": 0,
     "data": {
       "username": "<username>",
       "role": "admin"
     }
   }
   ```

1. 输入以下命令来创建管理员：

   ```
   aws-cloudhsm > user create --username <username> --role admin
   ```

1. 输入新用户的密码。

1. 再次输入密码以确认您输入的密码正确无误。

# 使用 CloudHSM CLI 创建 HSM 加密用户
<a name="create-user-cloudhsm-cli"></a>

按照以下步骤使用 CloudHSM CLI 创建硬件安全模块（HSM）加密用户（CU）。

1. 使用以下命令启动 CloudHSM CLI 交互模式。

------
#### [ Linux ]

   ```
   $ /opt/cloudhsm/bin/cloudhsm-cli interactive
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\cloudhsm-cli.exe" interactive
   ```

------

1. 使用 **login** 命令，并以管理员身份登录该集群。

   ```
   aws-cloudhsm > login --username <username> --role admin
   ```

1. 系统将会提示您输入密码。输入密码后，输出将显示该命令已成功。

   ```
   Enter password:
   {
     "error_code": 0,
     "data": {
       "username": "<USERNAME>",
       "role": "admin"
     }
   }
   ```

1. 输入以下命令以创建加密用户：

   ```
   aws-cloudhsm > user create --username <username> --role crypto-user
   ```

1. 输入新加密用户的密码。

1. 再次输入密码以确认您输入的密码正确无误。

# 使用 CloudHSM CLI 列出集群中所有的 HSM 用户
<a name="list-users-cloudhsm-cli"></a>

 使用 CloudHSM CLI 中的 **user list** 命令列出 AWS CloudHSM 集群中的所有用户。无需登录即可运行 **user list**。所有用户类型均可列出用户。

**按照以下步骤列出该集群中的所有用户**

1. 使用以下命令启动 CloudHSM CLI 交互模式。

------
#### [ Linux ]

   ```
   $ /opt/cloudhsm/bin/cloudhsm-cli interactive
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\cloudhsm-cli.exe" interactive
   ```

------

1. 输入以下命令列出该集群中的所有用户：

   ```
   aws-cloudhsm > user list
   ```

有关 **user list** 的更多信息，请参阅 [user list](cloudhsm_cli-user-list.md)。

# 使用 CloudHSM CLI 更改 HSM 用户密码
<a name="change-user-password-cloudhsm-cli"></a>

 使用 CloudHSM CLI 中的 **user change-password** 命令更改硬件安全模块（HSM）用户的密码。

 用户类型和密码区分大小写，但是用户名不区分大小写。

 管理员、加密用户（CU）和应用程序用户（AU）只能更改自己的密码。要更改其他用户的密码，您必须以管理员身份登录。您无法更改当前已登录用户的密码。

**更改您自己的密码**

1. 使用以下命令启动 CloudHSM CLI 交互模式。

------
#### [ Linux ]

   ```
   $ /opt/cloudhsm/bin/cloudhsm-cli interactive
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\cloudhsm-cli.exe" interactive
   ```

------

1. 使用 **login** 命令并以待更改密码的用户身份登录。

   ```
   aws-cloudhsm > login --username <username> --role <role>
   ```

1. 输入用户的密码。

   ```
   Enter password:
   {
     "error_code": 0,
     "data": {
       "username": "<username>",
       "role": "<role>"
     }
   }
   ```

1. 输入 **user change-password** 命令。

   ```
   aws-cloudhsm > user change-password --username <username> --role <role>
   ```

1. 输入新密码。

1. 再次输入新密码。

**更改其他用户的密码**

1. 使用以下命令启动 CloudHSM CLI 交互模式。

------
#### [ Linux ]

   ```
   $ /opt/cloudhsm/bin/cloudhsm-cli interactive
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\cloudhsm-cli.exe" interactive
   ```

------

1. 使用 CloudHSM CLI，以管理员身份登录。

   ```
   aws-cloudhsm > login --username <admin> --role admin
   Enter password:
   {
     "error_code": 0,
     "data": {
       "username": "<admin>",
       "role": "admin"
     }
   }
   ```

1. 输入**user change-password**命令以及待更改密码的用户名称。

   ```
   aws-cloudhsm > user change-password --username <username> --role <role>
   ```

1. 输入新密码。

1. 再次输入新密码。

有关 **user change-password** 的更多信息，请参阅[user change-password](cloudhsm_cli-user-change-password.md)。

# 使用 CloudHSM CLI 删除 HSM 用户
<a name="delete-user-cloudhsm-cli"></a>

使用 CloudHSM CLI 中的 **user delete** 删除硬件安全模块（HSM）用户。您必须以管理员身份登录才能删除其他用户。

**提示**  
 您无法删除拥有密钥的加密用户 (CU)。

**删除用户**

1. 使用以下命令启动 CloudHSM CLI 交互模式。

------
#### [ Linux ]

   ```
   $ /opt/cloudhsm/bin/cloudhsm-cli interactive
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\cloudhsm-cli.exe" interactive
   ```

------

1. 使用 **login** 命令，并以管理员身份登录该集群。

   ```
   aws-cloudhsm > login --username <username> --role admin
   ```

1. 系统将会提示您输入密码。输入密码后，输出将显示该命令已成功。

   ```
   Enter password:
   {
     "error_code": 0,
     "data": {
       "username": "<username>",
       "role": "admin"
     }
   }
   ```

1. 使用 **user delete** 命令删除用户。

   ```
   aws-cloudhsm > user delete --username <username> --role <role>
   ```

有关 **user delete** 的更多信息，请参阅 [deleteUser](cloudhsm_cli-user-delete.md)。

# 使用 CloudHSM CLI 管理 HSM 用户的 MFA
<a name="login-mfa-token-sign"></a>

为了提高安全性，您可以为用户配置多重身份验证 (MFA)，以帮助保护 AWS CloudHSM 集群。

当您使用启用 MFA 的硬件安全模块（HSM）用户账户登录集群时，您需要向 CloudHSM CLI 提供您的密码（第一个重身份，即您所知道的），CloudHSM CLI 会为您提供令牌并提示您对令牌进行签名。

要提供第二重身份（即您所拥有的），您可以使用已经创建并与 HSM 用户关联的密钥对中的私有密钥签署令牌。要访问该集群，您需要向 CloudHSM CLI 提供已签署的令牌。

有关为用户设置 MFA 的更多信息，请参阅[为 CloudHSM CLI 设置 MFA](set-up-mfa-for-cloudhsm-cli.md)

以下主题提供了有关在 AWS CloudHSM中使用仲裁身份验证的更多信息。

**Topics**
+ [仲裁身份验证](quorum-mfa-cloudhsm-cli.md)
+ [密钥对要求](mfa-key-pair-cloudhsm-cli.md)
+ [设置 MFA](set-up-mfa-for-cloudhsm-cli.md)
+ [创建 用户](create-mfa-users-cloudhsm-cli.md)
+ [登录用户](login-mfa-cloudhsm-cli.md)
+ [轮换密钥](rotate-mfa-cloudhsm-cli.md)
+ [注销 MFA 公有密钥](deregister-mfa-cloudhsm-cli.md)
+ [令牌文件参考](reference-mfa-cloudhsm-cli.md)

# 使用 CloudHSM CLI 在集群 AWS CloudHSM 中进行法定身份验证和 MFA
<a name="quorum-mfa-cloudhsm-cli"></a>

集 AWS CloudHSM 群使用相同的密钥进行法定身份验证和多因素身份验证 (MFA)。这表明启用了 MFA 的用户实际上已经注册了 MofN 或仲裁访问权限控制。要成功对同一 HSM 用户使用 MFA 和仲裁身份验证，请考虑以下几点：
+ 如果现在对用户使用仲裁身份验证，则应使用为仲裁用户创建的同一密钥对，为该用户启用 MFA。
+ 如果为非仲裁身份验证用户的非 MFA 用户增加了 MFA 要求，则可以将该用户注册为采用 MFA 身份验证的仲裁（MofN）用户。
+ 如果删除了 MFA 要求或更改了同时也是仲裁身份验证用户的 MFA 用户的密码，则将同时删除该用户的仲裁（MofN）用户注册。
+ 如果删除了 MFA 要求或更改了同时也是仲裁身份验证用户的 MFA 用户的密码，*但您仍希望该用户参与仲裁身份验证*，则必须将该用户重新注册为仲裁（MofN）用户。

有关仲裁身份验证的更多信息，请参阅 [管理仲裁身份验证（M of N）](quorum-auth-chsm-cli.md)。

# 使用 C AWS CloudHSM loudHSM CLI 的 MFA 密钥对要求
<a name="mfa-key-pair-cloudhsm-cli"></a>

要为 AWS CloudHSM中的硬件安全模块 (HSM) 用户启用多重身份验证 (MFA)，您可以创建新的密钥对或使用满足以下要求的现有密钥：
+ **密钥类型：**非对称密钥
+ **密钥用法：**签名和验证
+ **密钥规范：**RSA\$12048
+ **签名算法包括：sha256** with RSAEncryption

**注意**  
如果您正在使用仲裁身份验证或计划使用仲裁人数身份验证，请参阅 [使用 CloudHSM CLI 在集群 AWS CloudHSM 中进行法定身份验证和 MFA](quorum-mfa-cloudhsm-cli.md)

您可以使用 CloudHSM CLI 和密钥对来创建启用 MFA 的新管理员用户。

# 为 CloudHSM CLI 设置 MFA
<a name="set-up-mfa-for-cloudhsm-cli"></a>

按照以下步骤设置适用于 CloudHSM CLI 的多重身份验证（MFA）。

1. 要使用令牌签名策略设置 MFA，您必须首先生成 2048 位的 RSA 私有密钥以及关联的公有密钥。

   ```
   $ openssl genrsa -out officer1.key 2048
   Generating RSA private key, 2048 bit long modulus (2 primes)
   ...........................................................+++++
   ....................................................................+++++
   e is 65537 (0x010001)
   
   $ openssl rsa -in officer1.key -outform PEM -pubout -out officer1.pub
   writing RSA key
   ```

1. 使用以下命令以交互模式启动 CLI。

------
#### [ Linux ]

   ```
   $ /opt/cloudhsm/bin/cloudhsm-cli interactive
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\cloudhsm-cli.exe" interactive
   ```

------

1. 使用 CloudHSM CLI 登录您的用户账户。

   ```
   aws-cloudhsm > login --username <admin> --role <admin> --cluster-id <cluster ID>
   Enter password:
   {
     "error_code": 0,
     "data": {
       "username": "<admin>",
       "role": "<admin>"
     }
   }
   ```

1. 接下来，执行命令以更改您的 MFA 策略。您必须提供参数 `--token`。此参数指定将写入未签名令牌的文件。

   ```
   aws-cloudhsm > user change-mfa token-sign --token unsigned-tokens.json --username <username> --role crypto-user --change-quorum
   Enter password:
   Confirm password:
   ```

1. 现在，您有一个包含未签名令牌的待签名文件：`unsigned-tokens.json`。此文件中的令牌数量取决于您的集群 HSMs 中的令牌数量。每个令牌均代表一个 HSM。此文件采用 JSON 格式，包含能证明您拥有私有密钥的待签名令牌。

   ```
   $ cat unsigned-tokens.json
   {
     "version": "2.0",
     "tokens": [
   {
       {
         "unsigned": "Vtf/9QOFY45v/E1osvpEMr59JsnP/hLDm4ItOO2vqL8=",
         "signed": ""
       },
       {
         "unsigned": "wVbC0/5IKwjyZK2NBpdFLyI7BiayZ24YcdUdlcxLwZ4=",
         "signed": ""
       },
       {
         "unsigned": "z6aW9RzErJBL5KqFG5h8lhTVt9oLbxppjod0Ebysydw=",
         "signed": ""
       }
     ]
   }
   ```

1. 下一步是使用步骤 1 中创建的私有密钥签署此类令牌。将签名放回文件。首先，您必须提取和解码 base64 编码的令牌。

   ```
   $ echo "Vtf/9QOFY45v/E1osvpEMr59JsnP/hLDm4ItOO2vqL8=" > token1.b64
   $ echo "wVbC0/5IKwjyZK2NBpdFLyI7BiayZ24YcdUdlcxLwZ4=" > token2.b64
   $ echo "z6aW9RzErJBL5KqFG5h8lhTVt9oLbxppjod0Ebysydw=" > token3.b64
   $ base64 -d token1.b64 > token1.bin
   $ base64 -d token2.b64 > token2.bin
   $ base64 -d token3.b64 > token3.bin
   ```

1. 现在，您有了二进制令牌，可以使用步骤 1 中创建的 RSA 私有密钥对其进行签名。

   ```
   $ openssl pkeyutl -sign \
         -inkey officer1.key \
         -pkeyopt digest:sha256 \
         -keyform PEM \
         -in token1.bin \
         -out token1.sig.bin
   $ openssl pkeyutl -sign \
         -inkey officer1.key \
         -pkeyopt digest:sha256 \
         -keyform PEM \
         -in token2.bin \
         -out token2.sig.bin
   $ openssl pkeyutl -sign \
         -inkey officer1.key \
         -pkeyopt digest:sha256 \
         -keyform PEM \
         -in token3.bin \
         -out token3.sig.bin
   ```

1. 现在，您有了令牌的二进制签名。必须使用 base64 对其进行编码，然后将其放回令牌文件。

   ```
   $ base64 -w0 token1.sig.bin > token1.sig.b64
   $ base64 -w0 token2.sig.bin > token2.sig.b64 
   $ base64 -w0 token3.sig.bin > token3.sig.b64
   ```

1. 最后，您可以将 base64 值复制并粘贴回令牌文件中：

   ```
   {
     "version": "2.0",
     "tokens": [
       {
         "unsigned": "1jqwxb9bJOUUQLiNb7mxXS1uBJsEXh0B9nj05BqnPsE=",
         "signed": "eiw3fZeCKIY50C4zPeg9Rt90M1Qlq3WlJh6Yw7xXm4nF6e9ETLE39+9M+rUqDWMRZjaBfaMbg5d9yDkz5p13U7ch2tlF9LoYabsWutkT014KRq/rcYMvFsU9n/Ey/TK0PVaxLN42X+pebV4juwMhN4mK4CzdFAJgM+UGBOj4yB9recpOBB9K8QFSpJZALSEdDgUc/mS1eDq3rU0int6+4NKuLQjpR+LSEIWRZ6g6+MND2vXGskxHjadCQ09L7Tz8VcWjKDbxJcBiGKvkqyozl9zrGo8fA3WHBmwiAgS61Merx77ZGY4PFR37+j/YMSC14prCN15DtMRv2xA1SGSb4w=="
       },
       {
         "unsigned": "LMMFc34ASPnvNPFzBbMbr9FProS/Zu2P8zF/xzk5hVQ=",
         "signed": "HBImKnHmw+6R2TpFEpfiAg4+hu2pFNwn43ClhKPkn2higbEhUD0JVi+4MerSyvU/NN79iWVxDvJ9Ito+jpiRQjTfTGEoIteyuAr1v/Bzh+HjmrO53OQpZaJ/VXGIgApD0myuu/ZGNKQTCSkkL7+V81FG7yR1Nm22jUeGa735zvm/E+cenvZdy0VVx6A7WeWrl3JEKKBweHbi+7BwbaW+PTdCuIRd4Ug76Sy+cFhsvcG1k7cMwDh8MgXzIZ2m1f/hdy2j8qAxORTLlmwyUOYvPYOvUhc+s83hx36QpGwGcD7RA0bPT5OrTx7PHd0N1CL+Wwy91We8yIOFBS6nxo1R7w=="
       },
       {
         "unsigned": "dzeHbwhiVXQqcUGj563z51/7sLUdxjL93SbOUyZRjH8=",
         "signed": "VgQPvrTsvGljVBFxHnswduq16x8ZrnxfcYVYGf/N7gEzI4At3GDs2EVZWTRdvS0uGHdkFYp1apHgJZ7PDVmGcTkIXVD2lFYppcgNlSzkYlftr5EOjqS9ZjYEqgGuB4g//MxaBaRbJai/6BlcE92NIdBusTtreIm3yTpjIXNAVoeRSnkfuw7wZcL96QoklNb1WUuSHw+psUyeIVtIwFMHEfFoRC0t+VhmnlnFnkjGPb9W3Aprw2dRRvFM3R2ZTDvMCiOYDzUCd43GftGq2LfxH3qSD51oFHglHQVOY0jyVzzlAvub5HQdtOQdErIeO0/9dGx5yot07o3xaGl5yQRhwA=="
       }
     ]
   }
   ```

1. 现在，您的令牌文件已包含所有必需签名，您可以继续操作。输入包含签名令牌的文件名称，然后按 Enter 键。最后，输入公有密钥的路径。

   ```
   Enter signed token file path (press enter if same as the unsigned token file):
   Enter public key PEM file path:officer1.pub
   {
     "error_code": 0,
     "data": {
       "username": "<username>",
       "role": "crypto-user"
     }
   }
   ```

   现在，您已经对用户设置了 MFA。

   ```
   {
       "username": "<username>",
       "role": "crypto-user",
       "locked": "false",
       "mfa": [
         {
           "strategy": "token-sign",
           "status": "enabled"
         }
       ],
       "cluster-coverage": "full"
   },
   ```

# 创建针对 CloudHSM CLI 启用了 MFA 的用户
<a name="create-mfa-users-cloudhsm-cli"></a>

按照以下步骤创建启用了多重身份验证 (MFA) 的 AWS CloudHSM 用户。

1. 使用 CloudHSM CLI 以管理员身份登录 HSM。

1. 使用 [**user create**](cloudhsm_cli-user-create.md) 命令创建所选用户。然后按照 [为 CloudHSM CLI 设置 MFA](set-up-mfa-for-cloudhsm-cli.md) 中的步骤为用户设置 MFA。

# 登录针对 CloudHSM CLI 启用了 MFA 的用户
<a name="login-mfa-cloudhsm-cli"></a>

按照以下步骤登录启用了多重身份验证 (MFA) 的 AWS CloudHSM 用户。

1. 使用 CloudHSM CLI 中的 [**login mfa-token-sign**](cloudhsm_cli-login-mfa-token-sign.md) 命令通过 MFA 为启用 MFA 的用户启动登录过程。

   ```
   aws-cloudhsm > login --username <username> --role <role> mfa-token-sign --token <unsigned-tokens.json>
   Enter password:
   ```

1. 输入您的密码。然后，系统将提示您输入包含令牌对的令牌文件的路径，其中签名的 unsigned/signed 令牌是使用您的私钥生成的令牌。

   ```
   aws-cloudhsm > login --username <username> --role <role> mfa-token-sign --token <unsigned-tokens.json>
   Enter password:
   Enter signed token file path (press enter if same as the unsigned token file):
   ```

1. 当系统提示您输入已签名令牌文件路径时，您可以在单独终端中检查未签名令牌文件。使用待签名的未签名令牌识别文件：`<unsigned-tokens.json>`。此文件中的令牌数量取决于您的集群 HSMs 中的令牌数量。每个令牌均代表一个 HSM。此文件采用 JSON 格式，包含能证明您拥有私有密钥的待签名令牌。

   ```
   $ cat <unsigned-tokens.json>
   {
     "version": "2.0",
     "tokens": [
       {
         "unsigned": "Vtf/9QOFY45v/E1osvpEMr59JsnP/hLDm4ItOO2vqL8=",
         "signed": ""
       },
       {
         "unsigned": "wVbC0/5IKwjyZK2NBpdFLyI7BiayZ24YcdUdlcxLwZ4=",
         "signed": ""
       },
       {
         "unsigned": "z6aW9RzErJBL5KqFG5h8lhTVt9oLbxppjod0Ebysydw=",
         "signed": ""
       }
     ]
   }
   ```

1. 使用步骤 2 中创建的私有密钥签署未签名令牌。首先，您必须提取和解码 base64 编码的令牌。

   ```
   $ echo "Vtf/9QOFY45v/E1osvpEMr59JsnP/hLDm4ItOO2vqL8=" > token1.b64
   $ echo "wVbC0/5IKwjyZK2NBpdFLyI7BiayZ24YcdUdlcxLwZ4=" > token2.b64
   $ echo "z6aW9RzErJBL5KqFG5h8lhTVt9oLbxppjod0Ebysydw=" > token3.b64
   $ base64 -d token1.b64 > token1.bin 
   $ base64 -d token2.b64 > token2.bin
   $ base64 -d token3.b64 > token3.bin
   ```

1. 现在，您有了二进制代币。使用您之前在 [ MFA 设置的第 1 步](set-up-mfa-for-cloudhsm-cli.md)中创建的 RSA 私有密钥对其进行签名。

   ```
   $ openssl pkeyutl -sign \
         -inkey officer1.key \
         -pkeyopt digest:sha256 \
         -keyform PEM \
         -in token1.bin \
         -out token1.sig.bin
   $ openssl pkeyutl -sign \
         -inkey officer1.key \
         -pkeyopt digest:sha256 \
         -keyform PEM \
         -in token2.bin \
         -out token2.sig.bin
   $ openssl pkeyutl -sign \
         -inkey officer1.key \
         -pkeyopt digest:sha256 \
         -keyform PEM \
         -in token3.bin \
         -out token3.sig.bin
   ```

1. 现在，您有了令牌的二进制签名。使用 base64 对其进行编码，然后将其放回令牌文件。

   ```
   $ base64 -w0 token1.sig.bin > token1.sig.b64
   $ base64 -w0 token2.sig.bin > token2.sig.b64
   $ base64 -w0 token3.sig.bin > token3.sig.b64
   ```

1. 最后，将 base64 值复制并粘贴回令牌文件中：

   ```
   {
     "version": "2.0",
     "tokens": [
       {
         "unsigned": "1jqwxb9bJOUUQLiNb7mxXS1uBJsEXh0B9nj05BqnPsE=",
         "signed": "eiw3fZeCKIY50C4zPeg9Rt90M1Qlq3WlJh6Yw7xXm4nF6e9ETLE39+9M+rUqDWMRZjaBfaMbg5d9yDkz5p13U7ch2tlF9LoYabsWutkT014KRq/rcYMvFsU9n/Ey/TK0PVaxLN42X+pebV4juwMhN4mK4CzdFAJgM+UGBOj4yB9recpOBB9K8QFSpJZALSEdDgUc/mS1eDq3rU0int6+4NKuLQjpR+LSEIWRZ6g6+MND2vXGskxHjadCQ09L7Tz8VcWjKDbxJcBiGKvkqyozl9zrGo8fA3WHBmwiAgS61Merx77ZGY4PFR37+j/YMSC14prCN15DtMRv2xA1SGSb4w=="
       },
       {
         "unsigned": "LMMFc34ASPnvNPFzBbMbr9FProS/Zu2P8zF/xzk5hVQ=",
         "signed": "HBImKnHmw+6R2TpFEpfiAg4+hu2pFNwn43ClhKPkn2higbEhUD0JVi+4MerSyvU/NN79iWVxDvJ9Ito+jpiRQjTfTGEoIteyuAr1v/Bzh+HjmrO53OQpZaJ/VXGIgApD0myuu/ZGNKQTCSkkL7+V81FG7yR1Nm22jUeGa735zvm/E+cenvZdy0VVx6A7WeWrl3JEKKBweHbi+7BwbaW+PTdCuIRd4Ug76Sy+cFhsvcG1k7cMwDh8MgXzIZ2m1f/hdy2j8qAxORTLlmwyUOYvPYOvUhc+s83hx36QpGwGcD7RA0bPT5OrTx7PHd0N1CL+Wwy91We8yIOFBS6nxo1R7w=="
       },
       {
         "unsigned": "dzeHbwhiVXQqcUGj563z51/7sLUdxjL93SbOUyZRjH8=",
         "signed": "VgQPvrTsvGljVBFxHnswduq16x8ZrnxfcYVYGf/N7gEzI4At3GDs2EVZWTRdvS0uGHdkFYp1apHgJZ7PDVmGcTkIXVD2lFYppcgNlSzkYlftr5EOjqS9ZjYEqgGuB4g//MxaBaRbJai/6BlcE92NIdBusTtreIm3yTpjIXNAVoeRSnkfuw7wZcL96QoklNb1WUuSHw+psUyeIVtIwFMHEfFoRC0t+VhmnlnFnkjGPb9W3Aprw2dRRvFM3R2ZTDvMCiOYDzUCd43GftGq2LfxH3qSD51oFHglHQVOY0jyVzzlAvub5HQdtOQdErIeO0/9dGx5yot07o3xaGl5yQRhwA=="
       }
     ]
   }
   ```

1. 现在，您的令牌文件已包含所有必需签名，您可以继续操作。输入包含签名令牌的文件名称，然后按 Enter 键。现在，您应该已成功登录。

   ```
   aws-cloudhsm > login --username <username> --role <role> mfa-token-sign --token <unsigned-tokens.json>
   Enter password:
   Enter signed token file path (press enter if same as the unsigned token file):
   {
     "error_code": 0,
     "data": {
       "username": "<username>",
       "role": "<role>"
     }
   }
   ```

# 为针对 CloudHSM CLI 启用了 MFA 的用户轮换密钥
<a name="rotate-mfa-cloudhsm-cli"></a>

按照以下步骤为启用了多重身份验证 (MFA) 的 AWS CloudHSM 用户轮换密钥。

1. 使用 CloudHSM CLI 以任何管理员或启用 MFA 的特定用户身份登录 HSM（有关详细信息，请参阅[登录启用 MFA 的用户]()）。

1. 接下来，执行命令以更改您的 MFA 策略。您必须提供参数 **--token**。此参数指定将写入未签名令牌的文件。

   ```
   aws-cloudhsm > user change-mfa token-sign --token unsigned-tokens.json --username <username> --role crypto-user --change-quorum
   Enter password:
   Confirm password:
   ```

1. 使用待签名的未签名令牌识别文件：`unsigned-tokens.json`。此文件中的令牌数量取决于您的集群 HSMs 中的令牌数量。每个令牌均代表一个 HSM。此文件采用 JSON 格式，包含能证明您拥有私有密钥的待签名令牌。这将是您希望用于轮换当前注册的公 public/private 钥的新 RSA key pair 中的新私钥。

   ```
   $ cat unsigned-tokens.json
   {
     "version": "2.0",
     "tokens": [
       {
         "unsigned": "Vtf/9QOFY45v/E1osvpEMr59JsnP/hLDm4ItOO2vqL8=",
         "signed": ""
       },
       {
         "unsigned": "wVbC0/5IKwjyZK2NBpdFLyI7BiayZ24YcdUdlcxLwZ4=",
         "signed": ""
       },
       {
         "unsigned": "z6aW9RzErJBL5KqFG5h8lhTVt9oLbxppjod0Ebysydw=",
         "signed": ""
       }
     ]
   }
   ```

1. 使用您之前在设置期间创建的私有密钥对这些令牌签名。首先，必须提取和解码 base64 编码的令牌。

   ```
   $ echo "Vtf/9QOFY45v/E1osvpEMr59JsnP/hLDm4ItOO2vqL8=" > token1.b64
   $ echo "wVbC0/5IKwjyZK2NBpdFLyI7BiayZ24YcdUdlcxLwZ4=" > token2.b64
   $ echo "z6aW9RzErJBL5KqFG5h8lhTVt9oLbxppjod0Ebysydw=" > token3.b64
   $ base64 -d token1.b64 > token1.bin
   $ base64 -d token2.b64 > token2.bin
   $ base64 -d token3.b64 > token3.bin
   ```

1. 现在，您有了二进制代币。使用您之前在设置期间创建的 RSA 私有密钥对其签名。

   ```
   $ openssl pkeyutl -sign \
         -inkey officer1.key \
         -pkeyopt digest:sha256 \
         -keyform PEM \
         -in token1.bin \
         -out token1.sig.bin
   $ openssl pkeyutl -sign \
         -inkey officer1.key \
         -pkeyopt digest:sha256 \
         -keyform PEM \
         -in token2.bin \
         -out token2.sig.bin
   $ openssl pkeyutl -sign \
         -inkey officer1.key \
         -pkeyopt digest:sha256 \
         -keyform PEM \
         -in token3.bin \
         -out token3.sig.bin
   ```

1. 现在，您有了令牌的二进制签名。使用 base64 对其进行编码，然后将其放回令牌文件。

   ```
   $ base64 -w0 token1.sig.bin > token1.sig.b64
   $ base64 -w0 token2.sig.bin > token2.sig.b64 
   $ base64 -w0 token3.sig.bin > token3.sig.b64
   ```

1. 最后，将 base64 值复制并粘贴回令牌文件中：

   ```
   {
     "version": "2.0",
     "tokens": [
       {
         "unsigned": "1jqwxb9bJOUUQLiNb7mxXS1uBJsEXh0B9nj05BqnPsE=",
         "signed": "eiw3fZeCKIY50C4zPeg9Rt90M1Qlq3WlJh6Yw7xXm4nF6e9ETLE39+9M+rUqDWMRZjaBfaMbg5d9yDkz5p13U7ch2tlF9LoYabsWutkT014KRq/rcYMvFsU9n/Ey/TK0PVaxLN42X+pebV4juwMhN4mK4CzdFAJgM+UGBOj4yB9recpOBB9K8QFSpJZALSEdDgUc/mS1eDq3rU0int6+4NKuLQjpR+LSEIWRZ6g6+MND2vXGskxHjadCQ09L7Tz8VcWjKDbxJcBiGKvkqyozl9zrGo8fA3WHBmwiAgS61Merx77ZGY4PFR37+j/YMSC14prCN15DtMRv2xA1SGSb4w=="
       },
       {
         "unsigned": "LMMFc34ASPnvNPFzBbMbr9FProS/Zu2P8zF/xzk5hVQ=",
         "signed": "HBImKnHmw+6R2TpFEpfiAg4+hu2pFNwn43ClhKPkn2higbEhUD0JVi+4MerSyvU/NN79iWVxDvJ9Ito+jpiRQjTfTGEoIteyuAr1v/Bzh+HjmrO53OQpZaJ/VXGIgApD0myuu/ZGNKQTCSkkL7+V81FG7yR1Nm22jUeGa735zvm/E+cenvZdy0VVx6A7WeWrl3JEKKBweHbi+7BwbaW+PTdCuIRd4Ug76Sy+cFhsvcG1k7cMwDh8MgXzIZ2m1f/hdy2j8qAxORTLlmwyUOYvPYOvUhc+s83hx36QpGwGcD7RA0bPT5OrTx7PHd0N1CL+Wwy91We8yIOFBS6nxo1R7w=="
       },
       {
         "unsigned": "dzeHbwhiVXQqcUGj563z51/7sLUdxjL93SbOUyZRjH8=",
         "signed": "VgQPvrTsvGljVBFxHnswduq16x8ZrnxfcYVYGf/N7gEzI4At3GDs2EVZWTRdvS0uGHdkFYp1apHgJZ7PDVmGcTkIXVD2lFYppcgNlSzkYlftr5EOjqS9ZjYEqgGuB4g//MxaBaRbJai/6BlcE92NIdBusTtreIm3yTpjIXNAVoeRSnkfuw7wZcL96QoklNb1WUuSHw+psUyeIVtIwFMHEfFoRC0t+VhmnlnFnkjGPb9W3Aprw2dRRvFM3R2ZTDvMCiOYDzUCd43GftGq2LfxH3qSD51oFHglHQVOY0jyVzzlAvub5HQdtOQdErIeO0/9dGx5yot07o3xaGl5yQRhwA=="
       }
     ]
   }
   ```

1. 现在，您的令牌文件已包含所有必需签名，您可以继续操作。输入包含签名令牌的文件名称，然后按 Enter 键。最后，输入新公有密钥的路径。现在，您将看到以下内容作为[ user list ]()输出的一部分。

   ```
   Enter signed token file path (press enter if same as the unsigned token file):
   Enter public key PEM file path:officer1.pub
   {
     "error_code": 0,
     "data": {
       "username": "<username>",
       "role": "crypto-user"
     }
   }
   ```

   现在，已经对用户设置了 MFA。

   ```
   {
       "username": "<username>",
       "role": "crypto-user",
       "locked": "false",
       "mfa": [
         {
           "strategy": "token-sign",
           "status": "enabled"
         }
       ],
       "cluster-coverage": "full"
   },
   ```

您已使用私有密钥对生成的 JSON 格式的令牌文件签名，并注册了新的 MFA 公有密钥。

# 使用 CloudHSM CLI 取消注册 MFA 公有密钥
<a name="deregister-mfa-cloudhsm-cli"></a>

注册 MFA 公有密钥后，按照以下步骤取消注册 AWS CloudHSM 管理员用户的多重身份验证（MFA）公有密钥。

1. 使用 CloudHSM CLI 以启用 MFA 的管理员身份登录 HSM。

1. 使用 **user change-mfa token-sign** 命令删除用户的 MFA。

   ```
   aws-cloudhsm > user change-mfa token-sign --username <username> --role admin --deregister --change-quorum
   Enter password:
   Confirm password:
   {
     "error_code": 0,
     "data": {
       "username": "<username>",
       "role": "admin"
     }
   }
   ```

# 使用 CloudHSM CLI 的 MFA 的令牌文件参考
<a name="reference-mfa-cloudhsm-cli"></a>

注册多重身份验证（MFA）公有密钥或尝试使用 MFA 登录 CloudHSM CLI 时生成的令牌文件包含以下内容：
+ **代币：**以 JSON 对象字面值的形式进行 base64 编码的 unsigned/signed 令牌对的数组。
+ **未签名：**一个 base64 编码并 SHA256 经过哈希处理的令牌。
+ **已签名：**未签名令牌的 base64 编码签名令牌（签名），使用 RSA 2048 位私有密钥。

```
{
  "version": "2.0",
  "tokens": [
    {
      "unsigned": "1jqwxb9bJOUUQLiNb7mxXS1uBJsEXh0B9nj05BqnPsE=",
      "signed": "eiw3fZeCKIY50C4zPeg9Rt90M1Qlq3WlJh6Yw7xXm4nF6e9ETLE39+9M+rUqDWMRZjaBfaMbg5d9yDkz5p13U7ch2tlF9LoYabsWutkT014KRq/rcYMvFsU9n/Ey/TK0PVaxLN42X+pebV4juwMhN4mK4CzdFAJgM+UGBOj4yB9recpOBB9K8QFSpJZALSEdDgUc/mS1eDq3rU0int6+4NKuLQjpR+LSEIWRZ6g6+MND2vXGskxHjadCQ09L7Tz8VcWjKDbxJcBiGKvkqyozl9zrGo8fA3WHBmwiAgS61Merx77ZGY4PFR37+j/YMSC14prCN15DtMRv2xA1SGSb4w=="
    },
    {
      "unsigned": "LMMFc34ASPnvNPFzBbMbr9FProS/Zu2P8zF/xzk5hVQ=",
      "signed": "HBImKnHmw+6R2TpFEpfiAg4+hu2pFNwn43ClhKPkn2higbEhUD0JVi+4MerSyvU/NN79iWVxDvJ9Ito+jpiRQjTfTGEoIteyuAr1v/Bzh+HjmrO53OQpZaJ/VXGIgApD0myuu/ZGNKQTCSkkL7+V81FG7yR1Nm22jUeGa735zvm/E+cenvZdy0VVx6A7WeWrl3JEKKBweHbi+7BwbaW+PTdCuIRd4Ug76Sy+cFhsvcG1k7cMwDh8MgXzIZ2m1f/hdy2j8qAxORTLlmwyUOYvPYOvUhc+s83hx36QpGwGcD7RA0bPT5OrTx7PHd0N1CL+Wwy91We8yIOFBS6nxo1R7w=="
    },
    {
      "unsigned": "dzeHbwhiVXQqcUGj563z51/7sLUdxjL93SbOUyZRjH8=",
      "signed": "VgQPvrTsvGljVBFxHnswduq16x8ZrnxfcYVYGf/N7gEzI4At3GDs2EVZWTRdvS0uGHdkFYp1apHgJZ7PDVmGcTkIXVD2lFYppcgNlSzkYlftr5EOjqS9ZjYEqgGuB4g//MxaBaRbJai/6BlcE92NIdBusTtreIm3yTpjIXNAVoeRSnkfuw7wZcL96QoklNb1WUuSHw+psUyeIVtIwFMHEfFoRC0t+VhmnlnFnkjGPb9W3Aprw2dRRvFM3R2ZTDvMCiOYDzUCd43GftGq2LfxH3qSD51oFHglHQVOY0jyVzzlAvub5HQdtOQdErIeO0/9dGx5yot07o3xaGl5yQRhwA=="
    }
  ]
}
```

# 使用 CloudHSM CLI 管理仲裁身份验证（M of N 访问控制）
<a name="quorum-auth-chsm-cli"></a>

AWS CloudHSM 集群支持法定身份验证，也称为 M of N 访问控制。此功能要求 HSM 用户合作完成某些操作，从而增加了一层额外的保护。

对于仲裁身份验证，HSM 上的单个用户不能在 HSM 上执行仲裁控制型操作。必须有最少数量 (至少 2 个) 的 HSM 用户合作才能执行这些操作。

仲裁身份验证可以控制以下操作：
+ [管理员](understanding-users.md#admin) HSM 用户管理：创建和删除 HSM 用户，或者更改其他 HSM 用户的密码。有关更多信息，请参阅 [使用 AWS CloudHSM CloudHSM CLI 时启用了法定身份验证的用户管理](quorum-auth-chsm-cli-admin.md)。

 AWS CloudHSM中有关仲裁身份验证的要点。
+ HSM 用户可为自己的仲裁令牌签名，也就是说，提供仲裁身份验证所需的批准之一。
+ 您可以选择仲裁批准者的最小数量，介于二（2）到八（8）范围之内。
+ HSMs 最多可以存储 1024 个法定代币。达到此限制后，HSM 会清除过期的令牌以创建新令牌。
+ 默认情况下，令牌将在创建 10 分钟后过期。
+ 对于启用了 MFA 的集群，将使用同一密钥进行仲裁身份验证和多重身份验证（MFA）。有关更多信息，请参阅[使用 CloudHSM CLI 管理 MFA](login-mfa-token-sign.md)。
+ 针对每项管理服务，每个 HSM 可以包含一个令牌，针对每项加密用户服务，每个 HSM 可以包含多个令牌。

下列主题提供了有关 AWS CloudHSM中的仲裁身份验证的更多信息。

**Topics**
+ [CloudHSM CLI 的仲裁身份验证过程](quorum-auth-chsm-cli-overview.md)
+ [使用 CloudHSM CLI 进行法定身份验证支持的 AWS CloudHSM 服务名称和类型](quorum-auth-chsm-cli-service-names.md)
+ [AWS CloudHSM 使用 CloudHSM CLI 为管理员设置法定身份验证](quorum-auth-chsm-cli-first-time.md)
+ [使用 AWS CloudHSM CloudHSM CLI 时启用了法定身份验证的用户管理](quorum-auth-chsm-cli-admin.md)
+ [更改使用 AWS CloudHSM CloudHSM CLI 时的最小法定人数值](quorum-auth-chsm-cli-min-value.md)

# CloudHSM CLI 的仲裁身份验证过程
<a name="quorum-auth-chsm-cli-overview"></a>

以下步骤概括了 CloudHSM CLI 的仲裁身份验证过程。有关特定步骤和工具，请参阅[使用 AWS CloudHSM CloudHSM CLI 时启用了法定身份验证的用户管理](quorum-auth-chsm-cli-admin.md)。

1. 每个硬件安全模块（HSM）用户创建用于签名的非对称密钥。用户在 HSM 外部执行此操作，并注意适当地保护密钥。

1. 每个 HSM 用户都将登录 HSM 并向 HSM 注册其签名密钥的公有部分 (公有密钥)。

1. 当 HSM 用户要执行仲裁控制型操作时，同一用户将登录 HSM 并获取*仲裁令牌*。

1. HSM 用户将仲裁令牌提供给一个或多个其他 HSM 用户并请求其批准。

1. 其他 HSM 用户通过使用其密钥对仲裁令牌进行加密签名来进行批准。上述操作是在 HSM 外部进行的。

1. 当 HSM 用户获得所需数量的批准时，同一用户将登录 HSM 并使用 **--approval** 参数运行仲裁控制操作，提供包含所有必要批准（签名）的已签名仲裁令牌文件。

1. HSM 将使用每个签署人的已注册公有密钥来验证签名。如果签名有效，则 HSM 将批准该令牌并执行仲裁控制操作。

# 使用 CloudHSM CLI 进行法定身份验证支持的 AWS CloudHSM 服务名称和类型
<a name="quorum-auth-chsm-cli-service-names"></a>

**管理员服务**：仲裁身份验证用于管理员特权服务，例如创建用户、删除用户、更改用户密码、设置仲裁值以及停用仲裁和 MFA 功能。

**加密用户服务**：法定身份验证用于与特定密钥关联的加密用户特权服务，例如使用密钥、密钥、 sharing/unsharing 密钥进行签名以及设置密钥的属性。 wrapping/unwrapping 关联密钥的仲裁值是在生成、导入或解包密钥时配置的。仲裁值必须等于或小于与该密钥关联的用户数，其中包括与之共享密钥的用户和密钥所有者。

每个服务类型都进一步细分为限定服务名称，其中包含一组特定的、可执行的仲裁支持服务操作。


****  

| 服务名称 | 服务类型 | 服务操作 | 
| --- | --- | --- | 
| 用户 | Admin |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/quorum-auth-chsm-cli-service-names.html)  | 
| 仲裁 | Admin |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/quorum-auth-chsm-cli-service-names.html)  | 
| cluster1 | Admin |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/quorum-auth-chsm-cli-service-names.html)  | 
| 密钥管理 | 加密用户 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/quorum-auth-chsm-cli-service-names.html)  | 
| 密钥使用 | 加密用户 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/quorum-auth-chsm-cli-service-names.html)  | 

[1] 集群服务仅在 hsm2m.medium 上可用

# AWS CloudHSM 使用 CloudHSM CLI 为管理员设置法定身份验证
<a name="quorum-auth-chsm-cli-first-time"></a>

以下主题描述了配置硬件安全模块 (HSM) 以便 AWS CloudHSM [管理员](understanding-users.md#admin)可以使用法定身份验证时必须完成的步骤。当您首次为管理员配置仲裁身份验证时，只需执行下列步骤一次。完成这些步骤后，请参阅 [使用 AWS CloudHSM CloudHSM CLI 时启用了法定身份验证的用户管理](quorum-auth-chsm-cli-admin.md)。

**Topics**
+ [先决条件](#quorum-admin-prerequisites)
+ [步骤 1：创建并注册签名密钥](#quorum-admin-create-and-register-key)
+ [步骤 2：在 HSM 上设置仲裁最小值](#quorum-admin-set-quorum-minimum-value-chsm-cli)
+ [仲裁最小值](#cloudhsm_cli-qm-list-minimum)

## 先决条件
<a name="quorum-admin-prerequisites"></a>

要理解此示例，应熟悉 [CloudHSM CLI](cloudhsm_cli.md)。

## 步骤 1：创建并注册签名密钥
<a name="quorum-admin-create-and-register-key"></a>

要使用仲裁身份验证，每个管理员都必须完成以下*所有*操作：

**Topics**
+ [创建 RSA 密钥对](#mofn-key-pair-create-chsm-cli)
+ [创建注册令牌并签名](#mofn-registration-token-chsm-cli)
+ [通过 HSM 注册公钥](#mofn-register-key-chsm-cli)

### 创建 RSA 密钥对
<a name="mofn-key-pair-create-chsm-cli"></a>

创建和保护密钥对的方式有多种。以下示例说明如何使用 [OpenSSL](https://www.openssl.org/) 执行该操作。

**Example - 使用 OpenSSL 创建私有密钥**  
以下示例演示如何使用 OpenSSL 创建 2048 位 RSA 密钥。要使用此示例，请*<admin.key>*替换为要存储密钥的文件的名称。  

```
$ openssl genrsa -out <admin.key>
Generating RSA private key, 2048 bit long modulus
.....................................+++
.+++
e is 65537 (0x10001)
```

接下来，使用您刚刚创建的私钥生成公有密钥。

**Example - 使用 OpenSSL 创建公有密钥**  
以下示例演示如何使用 OpenSSL，根据您刚刚创建的私有密钥创建公钥。  

```
$ openssl rsa -in admin.key -outform PEM -pubout -out admin1.pub
writing RSA key
```

### 创建注册令牌并签名
<a name="mofn-registration-token-chsm-cli"></a>

创建一个令牌，并使用上一步生成的私有密钥签名。

**Example – 创建注册令牌**  

1. 使用以下命令启动 CloudHSM CLI。

------
#### [ Linux ]

   ```
   $ /opt/cloudhsm/bin/cloudhsm-cli interactive
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\cloudhsm-cli.exe" interactive
   ```

------

1. 通过运行[quorum token-sign generate](cloudhsm_cli-qm-token-gen.md)命令创建注册令牌：

   ```
   aws-cloudhsm > quorum token-sign generate --service registration --token /path/tokenfile
   {
     "error_code": 0,
     "data": {
       "path": "/path/tokenfile"
     }
   }
   ```

1. [quorum token-sign generate](cloudhsm_cli-qm-token-gen.md)命令在指定的文件路径上生成注册令牌。检查令牌文件：

   ```
   $ cat /path/tokenfile
   {
     "version": "2.0",
     "tokens": [
       {
         "approval_data": <approval data in base64 encoding>,
         "unsigned": <unsigned token in base64 encoding>,
         "signed": ""
       }
     ]
   }
   ```

   令牌路径包含以下内容：
   + **approval\$1data**：base64 编码的随机数据令牌，其原始数据最大不超过 245 字节。
   + **unsigned**：approval\$1data 的 base64 编码和 SHA256 哈希令牌。
   + **签名**：未签名令牌的 base64 编码签名令牌（签名），使用之前由 OpenSSL 生成的 RSA 2048 位私钥。

   您通过私钥对未签名令牌进行签名，以证明您有权访问私钥。您需要在注册令牌文件中完全填充签名和公钥，才能将管理员注册为集群的法定用户。 AWS CloudHSM 

**Example – 对未签名注册令牌签名**  

1. 解码 base64 编码的未签名令牌，并将其放入二进制文件：

   ```
   $ echo -n '6BMUj6mUjjko6ZLCEdzGlWpR5sILhFJfqhW1ej3Oq1g=' | base64 -d > admin.bin
   ```

1. 使用 OpenSSL 和私钥对当前未签名的二进制注册令牌签名，并创建二进制注册文件：

   ```
   $ openssl pkeyutl -sign \
   -inkey admin.key \
   -pkeyopt digest:sha256 \
   -keyform PEM \
   -in admin.bin \
   -out admin.sig.bin
   ```

1. 将二进制签名编码为 base64：

   ```
   $ base64 -w0 admin.sig.bin > admin.sig.b64
   ```

1. 将 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 注册公钥
<a name="mofn-register-key-chsm-cli"></a>

创建密钥后，管理员必须向 AWS CloudHSM 集群注册公钥。

**向 HSM 注册公有密钥**

1. 使用以下命令启动 CloudHSM CLI。

------
#### [ Linux ]

   ```
   $ /opt/cloudhsm/bin/cloudhsm-cli interactive
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\cloudhsm-cli.exe" interactive
   ```

------

1. 使用 CloudHSM CLI，以管理员身份登录。

   ```
   aws-cloudhsm > login --username <admin> --role admin
   Enter password:
   {
     "error_code": 0,
     "data": {
       "username": "<admin>",
       "role": "admin"
     }
   }
   ```

1. 使用 **[使用 CloudHSM CLI 注册用户的令牌签名仲裁策略](cloudhsm_cli-user-chqm-token-reg.md)** 命令注册公有密钥。有关更多信息，请参阅以下示例或使用 **help user change-quorum token-sign register** 命令。

**Example — 向集 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 集群有两个 HSMs，每个集群都有相同的管理员，如**user list**命令的以下输出所示。有关创建用户的更多信息，请参阅 [使用 CloudHSM CLI 进行用户管理](manage-hsm-users-chsm-cli.md)

## 步骤 2：在 HSM 上设置仲裁最小值
<a name="quorum-admin-set-quorum-minimum-value-chsm-cli"></a>

要使用仲裁身份验证，管理员必须登录 HSM，然后设置*仲裁最小值*。这是执行管理员用户管理操作所需的最少数量的 CO 审批。HSM 上的任何管理员 (包括尚未注册签名密钥的管理员) 都可设置仲裁最小值。您可以随时更改仲裁最小值。有关更多信息，请参阅 [更改最小值](quorum-auth-chsm-cli-min-value.md)。

**在 HSM 上设置仲裁最小值**

1. 使用以下命令启动 CloudHSM CLI。

------
#### [ Linux ]

   ```
   $ /opt/cloudhsm/bin/cloudhsm-cli interactive
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\cloudhsm-cli.exe" interactive
   ```

------

1. 使用 CloudHSM CLI，以管理员身份登录。

   ```
   aws-cloudhsm > login --username <admin> --role admin
   Enter password:
   {
     "error_code": 0,
     "data": {
       "username": "<admin>",
       "role": "admin"
     }
   }
   ```

1. 使用 **[使用 CloudHSM CLI 更新仲裁值](cloudhsm_cli-qm-token-set-qm.md)** 命令设置仲裁最小值。`--service` 标志用于标识您要为其设置值的 HSM 服务。有关更多信息，请参阅以下示例或使用 **help quorum token-sign set-quorum-value** 命令。

**Example - 在 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 显示仲裁值](cloudhsm_cli-qm-token-list-qm.md)** 命令列出了服务中包含的 HSM 服务类型、名称和描述。

## 仲裁最小值
<a name="cloudhsm_cli-qm-list-minimum"></a>

使用 **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）进行用户管理](quorum-auth-chsm-cli-admin.md)。

**管理员服务**：仲裁身份验证用于管理员特权服务，例如创建用户、删除用户、更改用户密码、设置仲裁值以及停用仲裁和 MFA 功能。

**加密用户服务**：法定身份验证用于与特定密钥关联的加密用户特权服务，例如使用密钥、密钥、 sharing/unsharing 密钥进行签名以及设置密钥的属性。 wrapping/unwrapping 关联密钥的仲裁值是在生成、导入或解包密钥时配置的。仲裁值必须等于或小于与该密钥关联的用户数，其中包括与之共享密钥的用户和密钥所有者。

每个服务类型都进一步细分为限定服务名称，其中包含一组特定的、可执行的仲裁支持服务操作。


****  

| 服务名称 | 服务类型 | 服务操作 | 
| --- | --- | --- | 
| 用户 | Admin |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/quorum-auth-chsm-cli-first-time.html)  | 
| 仲裁 | Admin |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/quorum-auth-chsm-cli-first-time.html)  | 
| cluster1 | Admin |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/quorum-auth-chsm-cli-first-time.html)  | 
| 密钥管理 | 加密用户 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/quorum-auth-chsm-cli-first-time.html)  | 
| 密钥使用 | 加密用户 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/quorum-auth-chsm-cli-first-time.html)  | 

[1] 集群服务仅在 hsm2m.medium 上可用

# 使用 AWS CloudHSM CloudHSM CLI 时启用了法定身份验证的用户管理
<a name="quorum-auth-chsm-cli-admin"></a>

硬件安全模块 (HSM) 的 AWS CloudHSM [管理员](understanding-users.md#admin)可以为集群中的以下操作配置法定身份验证： AWS CloudHSM 
+ **[使用 CloudHSM CLI 创建 AWS CloudHSM 用户](cloudhsm_cli-user-create.md)**
+ **[使用 CloudHSM CLI 删除 AWS CloudHSM 用户](cloudhsm_cli-user-delete.md)**
+ **[使用 CloudHSM CLI 更改用户的密码](cloudhsm_cli-user-change-password.md)**
+ **[CloudHSM CLI 中的 user change-mfa 类别](cloudhsm_cli-user-change-mfa.md)**

 AWS CloudHSM 集群配置为法定身份验证后，管理员无法自行执行 HSM 用户管理操作。以下示例显示管理员尝试在 HSM 上创建新用户时的输出。该命令因出错而失败，指出需要进行仲裁身份验证。

```
aws-cloudhsm > user create --username user1 --role crypto-user
Enter password:
Confirm password:
{
  "error_code": 1,
  "data": "Quorum approval is required for this operation"
}
```

要执行 HSM 用户管理操作，管理员必须完成以下任务：

**Topics**
+ [步骤 1：获取仲裁令牌](#quorum-admin-gen-token-chsm-cli)
+ [步骤 2：获得批准管理员的签名](#quorum-admin-get-approval-signatures-chsm-cli)
+ [步骤 3：在 AWS CloudHSM 集群上批准令牌并执行用户管理操作](#quorum-admin-approve-token-chsm-cli)

## 步骤 1：获取仲裁令牌
<a name="quorum-admin-gen-token-chsm-cli"></a>

首先，管理员必须使用 CloudHSM CLI 申请*仲裁令牌*。

**获取仲裁令牌**

1. 使用以下命令启动 CloudHSM CLI。

------
#### [ Linux ]

   ```
   $ /opt/cloudhsm/bin/cloudhsm-cli interactive
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\cloudhsm-cli.exe" interactive
   ```

------

1. 使用 CloudHSM CLI，以管理员身份登录。

   ```
   aws-cloudhsm > login --username <admin> --role admin
   Enter password:
   {
     "error_code": 0,
     "data": {
       "username": "<admin>",
       "role": "admin"
     }
   }
   ```

1. 使用 **quorum token-sign generate** 命令获取仲裁令牌。有关更多信息，请参阅以下示例或使用 **help quorum token-sign generate** 命令。

**Example – 生成仲裁令牌**  
此示例将为用户名为 `admin` 的管理员获取一个仲裁令牌，并将该令牌保存到一个名为 `admin.token` 的文件中。要使用示例命令，可将这些值替换为您自己的值：  
+ *<admin>*— 获取令牌的管理员的姓名。这必须是已登录 HSM 并且正在运行此命令的管理员。
+ *<admin.token>*— 用于存储法定令牌的文件的名称。
在以下命令中，`user` 标识您可为之使用所生成之令牌的*服务名称*。在此示例中，令牌用于 HSM 用户管理操作 (`user` 服务)。  

```
aws-cloudhsm > login --username <admin> --role admin --password <password>
{
  "error_code": 0,
  "data": {
    "username": "<admin>",
    "role": "admin"
  }
}
```

```
aws-cloudhsm > quorum token-sign generate --service user --token </path/admin.token>
{
  "error_code": 0,
  "data": {
    "path": "/home/tfile"
  }
}
```
该 **quorum token-sign generate** 命令在指定的文件路径上生成用户服务仲裁令牌。可查看以下令牌文件：  

```
$ cat </path/admin.token>
{
  "version": "2.0",
  "service": "user-management",
  "approval_data": "AAEAAwAAABgAAAAAAAAAAJ9eFkfcP3mNzJAlfK+OWbNhZG1pbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABj5vbeAAAAAAAAAAAAAQADAAAAFQAAAAAAAAAAW/v5Euk83amq1fij0zyvD2FkbWluAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGPm9t4AAAAAAAAAAAABAAMAAAAUAAAAAAAAAABDw2XDwfK4hB8a15Xh1E0nYWRtaW4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY+b23gAAAAAAAAAA",
  "token": "0l2LZkmAHZyAc1hPhyckOoVW33aGrgG77qmDHWQ3CJ8=",
  "signatures": []
}
```
令牌路径包含以下内容：  
+ **service**：与令牌关联的仲裁服务的标识符。
+ **approval\$1data**：由 HSM 生成的 base64 编码原始数据令牌。
+ **令牌**：approval\$1data 的 base64 编码和 SHA-256 哈希令牌
+ **签名**：base64 编码签名令牌阵列，其中每个批准者签名均采用 JSON 对象常量形式：

  ```
  {
        "username": "<APPROVER_USERNAME>",
        "role": "<APPROVER_ROLE>",
        "signature": "<APPROVER_RSA2048_BIT_SIGNATURE>"
  }
  ```

  每个签名均由批准者使用相应的 RSA 2048 位私有密钥创建，其公有密钥通过 HSM 注册。
通过运行 **quorum token-sign list** 命令，确认 CloudHSM 集群中包含已生成用户服务仲裁令牌。  

```
aws-cloudhsm > quorum token-sign list
{
  "error_code": 0,
  "data": {
    "tokens": [
      {
        "username": "admin",
        "service": "user",
        "approvals-required": {
          "value": 2
        },
        "number-of-approvals": {
          "value": 0
        },
        "token-timeout-seconds": {
          "value": 597
        },
        "cluster-coverage": "full"
      }
    ]
  }
}
```
`token-timeout-seconds` 时间表示生成的令牌在过期之前获批的超时时间（以秒为单位）。

## 步骤 2：获得批准管理员的签名
<a name="quorum-admin-get-approval-signatures-chsm-cli"></a>

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

可通过多种不同方式对令牌进行签名。以下示例说明如何使用 [OpenSSL](https://www.openssl.org/) 执行该操作。要使用其他签名工具，请确保该工具使用管理员的私有密钥 (签名密钥) 对令牌的 SHA-256 摘要进行签名。

**Example - 获得批准管理员的签名**  
在此示例中，具有令牌 (`admin`) 的管理员至少需要两 (2) 次批准。以下示例命令说明两 (2) 个管理员如何使用 OpenSSL 以加密方式对令牌进行签名。  

1. 解码 base64 编码的未签名令牌，并将其放入二进制文件：

   ```
   $ echo -n '0l2LZkmAHZyAc1hPhyckOoVW33aGrgG77qmDHWQ3CJ8=' | base64 -d > admin.bin
   ```

1. 使用 OpenSSL 和相应的批准者 `(admin3)` 私钥为当前未签名的二进制仲裁令牌签名，以获取用户服务和创建二进制签名文件：

   ```
   $ openssl pkeyutl -sign \
   -inkey admin3.key \
   -pkeyopt digest:sha256 \
   -keyform PEM \
   -in admin.bin \
   -out admin.sig.bin
   ```

1. 将二进制签名编码为 base64：

   ```
   $ base64 -w0 admin.sig.bin > admin.sig.b64
   ```

1. 最后，按此前批准者签名指定的 JSON 对象常量形式，将 base64 编码签名复制并粘贴至令牌文件。

   ```
   {
     "version": "2.0",
     "approval_data": "AAEAAwAAABgAAAAAAAAAAJ9eFkfcP3mNzJAlfK+OWbNhZG1pbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABj5vbeAAAAAAAAAAAAAQADAAAAFQAAAAAAAAAAW/v5Euk83amq1fij0zyvD2FkbWluAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGPm9t4AAAAAAAAAAAABAAMAAAAUAAAAAAAAAABDw2XDwfK4hB8a15Xh1E0nYWRtaW4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY+b23gAAAAAAAAAA",
     "token": "0l2LZkmAHZyAc1hPhyckOoVW33aGrgG77qmDHWQ3CJ8=",
     "signatures": [
       {
         "username": "admin2",
         "role": "admin",
         "signature": "O6qx7/mUaVkYYVr1PW7l8JJko+Kh3e8zBIqdk3tAiNy+1rW+OsDtvYujhEU4aOFVLcrUFmyB/CX9OQmgJLgx/pyK+ZPEH+GoJGqk9YZ7X1nOXwZRP9g7hKV+7XCtg9TuDFtHYWDpBfz2jWiu2fXfX4/jTs4f2xIfFPIDKcSP8fhxjQ63xEcCf1jzGha6rDQMu4xUWWdtDgfT7um7EJ9dXNoHqLB7cTzphaubNaEFbFPXQ1siGmYKmvETlqe/ssktwyruGFLpXs1n0tJOEglGhx2qbYTs+omKWZdORl5WIWEXW3IXw/Dg5vVObrNpvG0eZKO8nSMc27+cyPySc+ZbNw=="
       },
       {
         "username": "admin3",
         "role": "admin",
         "signature": "O6qx7/mUaVkYYVr1PW7l8JJko+Kh3e8zBIqdk3tAiNy+1rW+OsDtvYujhEU4aOFVLcrUFmyB/CX9OQmgJLgx/pyK+ZPEH+GoJGqk9YZ7X1nOXwZRP9g7hKV+7XCtg9TuDFtHYWDpBfz2jWiu2fXfX4/jTs4f2xIfFPIDKcSP8fhxjQ63xEcCf1jzGha6rDQMu4xUWWdtDgfT7um7EJ9dXNoHqLB7cTzphaubNaEFbFPXQ1siGmYKmvETlqe/ssktwyruGFLpXs1n0tJOEglGhx2qbYTs+omKWZdORl5WIWEXW3IXw/Dg5vVObrNpvG0eZKO8nSMc27+cyPySc+ZbNw=="
       }
     ]
   }
   ```

## 步骤 3：在 AWS CloudHSM 集群上批准令牌并执行用户管理操作
<a name="quorum-admin-approve-token-chsm-cli"></a>

管理员获得必要的批准/签名（如上一节所述）后，管理员可以向 AWS CloudHSM 集群提供该令牌，并执行以下用户管理操作之一：
+ **[创建](cloudhsm_cli-user-create.md)**
+ **[删除](cloudhsm_cli-user-delete.md)**
+ **[更改密码](cloudhsm_cli-user-change-password.md)**
+ **[user change-mfa](cloudhsm_cli-user-change-mfa.md)**

有关使用这些命令的更多信息，请参阅[使用 CloudHSM CLI 进行用户管理](manage-hsm-users-chsm-cli.md)。

在交易过程中，令牌将在 AWS CloudHSM 集群内获得批准并执行请求的用户管理操作。用户管理操作的成功取决于已批准的仲裁令牌和用户管理操作是否有效。

管理员只能将令牌用于一项操作。在该操作成功后，该令牌不再有效。若要执行其他 HSM 用户管理操作，管理员必须重复上述进程。那就是，管理员必须生成新的仲裁令牌、获取来自批准者的新签名，并按照所请求的用户管理操作批准和在 HSM 上使用新令牌。

**注意**  
仅当您当前登录会话打开时，仲裁令牌才有效。如果您登出 CloudHSM CLI 或者断开网络连接，则令牌将不再有效。同样，授权令牌只能用于 CloudHSM CLI 中。它无法用于在其他应用程序中进行身份验证。

**Example 以管理员身份创建新用户**  
在以下示例命令中，已登录管理员将在 HSM 上创建一个新用户：  

```
aws-cloudhsm > user create --username user1 --role crypto-user --approval /path/admin.token
Enter password:
Confirm password:
{
  "error_code": 0,
  "data": {
    "username": "user1",
    "role": "crypto-user"
  }
}
```
然后，管理员输入 **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": "user1",
        "role": "crypto-user",
        "locked": "false",
        "mfa": [],
        "quorum": [],
        "cluster-coverage": "full"
      },
      {
        "username": "app_user",
        "role": "internal(APPLIANCE_USER)",
        "locked": "false",
        "mfa": [],
        "quorum": [],
        "cluster-coverage": "full"
      }
    ]
  }
}
```
如果管理员尝试执行其他 HSM 用户管理操作，该操作将失败并出现仲裁身份验证错误：  

```
aws-cloudhsm > user delete --username user1 --role crypto-user
{
  "error_code": 1,
  "data": "Quorum approval is required for this operation"
}
```
如下所示，该 **quorum token-sign list** 命令显示管理员未批准令牌。若要执行其他 HSM 用户管理操作，管理员必须生成新的仲裁令牌，从批准者处获取新签名，然后使用 --approver 参数执行所需的用户管理操作，以提供待批准并在用户管理操作中使用的仲裁令牌。  

```
aws-cloudhsm > quorum token-sign list
{
  "error_code": 0,
  "data": {
    "tokens": []
  }
}
```

# 更改使用 AWS CloudHSM CloudHSM CLI 时的最小法定人数值
<a name="quorum-auth-chsm-cli-min-value"></a>

为 CloudHSM [管理员](understanding-users.md#admin)[设置仲裁最小值](quorum-auth-chsm-cli-first-time.md#quorum-admin-set-quorum-minimum-value-chsm-cli)后，可能需要调整仲裁最小值。仅当批准者数量达到或超过当前值时，HSM 才允许更改仲裁最小值。例如，仲裁最小值为二（2），则必须至少有两（2）个管理员批准任何更改。

**注意**  
用户服务的仲裁值必须小于或等于仲裁服务的仲裁值。有关服务名称的信息，请参阅 [使用 CloudHSM CLI 进行法定身份验证支持的 AWS CloudHSM 服务名称和类型](quorum-auth-chsm-cli-service-names.md)。

要获取更改仲裁最小值的仲裁批准，您需要一个使用 **quorum token-sign set-quorum-value** 命令用于 **quorum service** 的*仲裁令牌*。若要使用 **quorum token-sign set-quorum-value** 命令为 **quorum service** 生成仲裁令牌，仲裁服务值必须大于一 (1)。这意味着，您可能需要先更改*用户服务*的仲裁最小值，然后才能更改*仲裁服务*的仲裁最小值。

**更改管理员的仲裁最小值的步骤**

1. 启动 CloudHSM CLI 交互模式。

------
#### [ Linux ]

   ```
   $ /opt/cloudhsm/bin/cloudhsm-cli interactive
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\cloudhsm-cli.exe" interactive
   ```

------

1. 使用 CloudHSM CLI，以管理员身份登录。

   ```
   aws-cloudhsm > login --username <admin> --role admin
   Enter password:
   {
     "error_code": 0,
     "data": {
       "username": "<admin>",
       "role": "admin"
     }
   }
   ```

1. 检查当前的仲裁最小值：

   ```
   aws-cloudhsm > quorum token-sign list-quorum-values
   ```

1. 如果仲裁服务的仲裁最小值小于用户服务的相应值，请更改*仲裁服务*值：

   ```
   aws-cloudhsm > quorum token-sign set-quorum-value --service quorum --value <3>
   ```

1. 为仲裁服务[生成仲裁令牌](quorum-auth-chsm-cli-admin.md#quorum-admin-gen-token-chsm-cli)。

1. [获得其他管理员的批准 (签名)](quorum-auth-chsm-cli-admin.md#quorum-admin-get-approval-signatures-chsm-cli)。

1. [批准 CloudHSM 集群上的令牌，执行用户管理操作](quorum-auth-chsm-cli-admin.md#quorum-admin-approve-token-chsm-cli)。

1. 更改*用户服务*的仲裁最小值：

   ```
   aws-cloudhsm > quorum token-sign set-quorum-value
   ```

**Example 调整*仲裁服务*最小值**  

1. **检查当前值**。示例显示了*用户服务*的仲裁最小值当前为二（2）。

   ```
   aws-cloudhsm > quorum token-sign list-quorum-values
   {
     "error_code": 0,
     "data": {
       "user": 2,
       "quorum": 1
     }
   }
   ```

1. **更改仲裁服务值**。将*仲裁服务*的仲裁最小值设置为等于或大于*用户服务*的相应值的值。本示例将*仲裁服务*的仲裁最小值设置为二（2），与上一示例中为*用户服务*设置的值相同。

   ```
   aws-cloudhsm > quorum token-sign set-quorum-value --service quorum --value 2
   {
     "error_code": 0,
     "data": "Set quorum value successful"
   }
   ```

1. **验证更改**。本示例显示了*用户服务*和*仲裁服务*的仲裁最小值现在为二（2）。

   ```
   aws-cloudhsm > quorum token-sign list-quorum-values
   {
     "error_code": 0,
     "data": {
       "user": 2,
       "quorum": 2
     }
   }
   ```

# 使用 CloudHSM 管理实用程序（CMU）管理 HSM 用户
<a name="manage-hsm-users-cmu"></a>

 要在中管理硬件安全模块 (HSM) 用户 AWS CloudHSM，必须使用[加密人员](understanding-users-cmu.md#crypto-officer) (CO) 的用户名和密码登录 HSM。 COs 只能管理用户。HSM 包含名为 admin 的默认 CO。在[激活集群](activate-cluster.md)时，您可以设置 admin 的密码。

本主题提供有关使用管理实用程序 (CMU) AWS CloudHSM 管理 HSM 用户的 step-by-step说明和详细信息。

**Topics**
+ [先决条件](understand-users.md)
+ [用户类型](understanding-users-cmu.md)
+ [权限表](user-permissions-table-cmu.md)
+ [创建 用户](create-users-cmu.md)
+ [列出所有用户](list-users.md)
+ [更改密码](change-user-password-cmu.md)
+ [删除用户](delete-user.md)
+ [管理用户 2FA](manage-2fa.md)
+ [使用 CMU 管理仲裁身份认证](quorum-authentication.md)

# 在管理实用程序中进行用户 AWS CloudHSM 管理的先决条件
<a name="understand-users"></a>

在使用 AWS CloudHSM 管理实用程序 (CMU) 管理中的硬件安全模块 (HSM) 用户之前 AWS CloudHSM，必须完成以下先决条件。以下主题介绍了如何开始使用 CMU。

**Topics**
+ [获取 HSM 的 IP 地址 AWS CloudHSM](#user-cmu-prereq-ip)
+ [通过客户端软件开发工具包 3.2.1 及更早版本使用 CMU](#downlevel-cmu)
+ [下载 CloudHSM 管理实用程序](#get-cli-users-cmu)

## 获取 HSM 的 IP 地址 AWS CloudHSM
<a name="user-cmu-prereq-ip"></a>

 要使用 CMU，必须使用配置工具更新本地配置。CMU 创建自己的集群连接，但此连接*不*具备集群感知功能。为了跟踪集群信息，CMU 会维护一个本地配置文件。这意味着，*每次*使用 CMU 时，都应首先通过运行带有 `--cmu` 参数的[配置](configure-tool.md)命令行工具来更新配置文件。如果您正在使用客户端软件开发工具包 3.2.1 或更早版本，则必须使用与 `--cmu` 不同的参数。有关更多信息，请参阅 [通过客户端软件开发工具包 3.2.1 及更早版本使用 CMU](#downlevel-cmu)。

 `--cmu` 参数要求您在集群中添加 HSM 的 IP 地址。如果您有多个 IP 地址 HSMs，则可以使用任何 IP 地址。这可确保 CMU 可以将您所做的任何变更传播到整个集群中。请记住，CMU 使用其本地文件来跟踪集群信息。如果自上次在特定主机上使用 CMU 以来该集群已更改，则必须将此类更改添加到存储在该主机上的本地配置文件中。使用 CMU 时，切勿添加或删除 HSM。

**获取 HSM 的 IP 地址（控制台）**

1. 在家中打开[https://console.aws.amazon.com/cloudhsm/主 AWS CloudHSM](https://console.aws.amazon.com/cloudhsm/home)机。

1. 要更改 Amazon Web Services Region，请使用页面右上角的区域选择器（Region selector）。

1. 要打开该集群的详细信息页面，请在集群表中选择集群 ID。

1. 要获取 IP 地址，请转到 HSMs 选项卡。对于 IPv4 集群，请选择 **ENI 地址下列出 IPv4 的地址**。对于双栈集群，请使用 ENI IPv4 或 **ENI IPv6 地址**。

**获取 HSM 的 IP 地址（AWS CLI）**
+ 使用 AWS CLI中的 **[describe-clusters](https://docs.aws.amazon.com/cli/latest/reference/cloudhsmv2/describe-clusters.html)** 命令获取 HSM 的 IP 地址。在命令的输出中，的 IP 地址 HSMs 是`EniIp`和的值`EniIpV6`（如果是双栈群集）。

  ```
  $ aws cloudhsmv2 describe-clusters
  {
      "Clusters": [
          { ... }
              "Hsms": [
                  {
  ...
                      "EniIp": "10.0.0.9",
  ...
                  },
                  {
  ...
                      "EniIp": "10.0.1.6",
                      "EniIpV6": "2600:113f:404:be09:310e:ed34:3412:f733",
  ...
  ```

## 通过客户端软件开发工具包 3.2.1 及更早版本使用 CMU
<a name="downlevel-cmu"></a>

在 Client SDK 3.3.0 AWS CloudHSM 中，增加了对`--cmu`参数的支持，这简化了更新 CMU 配置文件的过程。如果您正在使用来自客户端软件开发工具包 3.2.1 或更早版本的 CMU，则必须继续使用 `-a` 和 `-m` 参数来更新配置文件。有关这些参数的更多信息，请参阅[配置工具](configure-tool.md)。

## 下载 CloudHSM 管理实用程序
<a name="get-cli-users-cmu"></a>

无论您正在使用客户端软件开发工具包 5 还是客户端软件开发工具包 3，最新版本的 CMU 都可用于 HSM 用户管理任务。

**下载并安装 CMU。**
+ 下载并安装 CMU。

------
#### [ Amazon Linux ]

  ```
  $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL6/cloudhsm-mgmt-util-latest.el6.x86_64.rpm
  ```

  ```
  $ sudo yum install ./cloudhsm-mgmt-util-latest.el6.x86_64.rpm
  ```

------
#### [ Amazon Linux 2 ]

  ```
  $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL7/cloudhsm-mgmt-util-latest.el7.x86_64.rpm
  ```

  ```
  $ sudo yum install ./cloudhsm-mgmt-util-latest.el7.x86_64.rpm
  ```

------
#### [ CentOS 7.8\$1 ]

  ```
  $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL7/cloudhsm-mgmt-util-latest.el7.x86_64.rpm
  ```

  ```
  $ sudo yum install ./cloudhsm-mgmt-util-latest.el7.x86_64.rpm
  ```

------
#### [ CentOS 8.3\$1 ]

  ```
  $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL8/cloudhsm-mgmt-util-latest.el8.x86_64.rpm
  ```

  ```
  $ sudo yum install ./cloudhsm-mgmt-util-latest.el8.x86_64.rpm
  ```

------
#### [ RHEL 7 (7.8\$1) ]

  ```
  $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL7/cloudhsm-mgmt-util-latest.el7.x86_64.rpm
  ```

  ```
  $ sudo yum install ./cloudhsm-mgmt-util-latest.el7.x86_64.rpm
  ```

------
#### [ RHEL 8 (8.3\$1) ]

  ```
  $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL8/cloudhsm-mgmt-util-latest.el8.x86_64.rpm
  ```

  ```
  $ sudo yum install ./cloudhsm-mgmt-util-latest.el8.x86_64.rpm
  ```

------
#### [ Ubuntu 16.04 LTS ]

  ```
  $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Xenial/cloudhsm-mgmt-util_latest_amd64.deb
  ```

  ```
  $ sudo apt install ./cloudhsm-mgmt-util_latest_amd64.deb
  ```

------
#### [ Ubuntu 18.04 LTS ]

  ```
  $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Bionic/cloudhsm-mgmt-util_latest_u18.04_amd64.deb
  ```

  ```
  $ sudo apt install ./cloudhsm-mgmt-util_latest_u18.04_amd64.deb
  ```

------
#### [ Windows Server 2012 ]

  1. 下载 [CloudHSM 管理实用程序](https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Windows/AWSCloudHSMManagementUtil-latest.msi)。

  1. 使用 Windows 管理权限运行 C **AWSCloudHSMManagementUtil-latestMU 安装程序 (.msi**)。

------
#### [ Windows Server 2012 R2 ]

  1. 下载 [CloudHSM 管理实用程序](https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Windows/AWSCloudHSMManagementUtil-latest.msi)。

  1. 使用 Windows 管理权限运行 C **AWSCloudHSMManagementUtil-latestMU 安装程序 (.msi**)。

------
#### [ Windows Server 2016 ]

  1. 下载 [CloudHSM 管理实用程序](https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Windows/AWSCloudHSMManagementUtil-latest.msi)。

  1. 使用 Windows 管理权限运行 C **AWSCloudHSMManagementUtil-latestMU 安装程序 (.msi**)。

------

# AWS CloudHSM 管理实用程序的 HSM 用户类型
<a name="understanding-users-cmu"></a>

 您在硬件安全模块 (HSM) 上执行的大多数操作都需要 H AWS CloudHSM *SM* 用户的凭证。HSM 对每个 HSM 用户进行身份验证，每个 HSM 用户都有一种*类型*，其可确定您可以在 HSM 上以该用户身份执行的操作。

**注意**  
HSM 用户与 IAM 用户不同。拥有正确证书的 IAM 用户可以通过通过 AWS API 与资源交互来创建 HSMs 。创建 HSM 后，您必须使用 HSM 用户凭证对 HSM 上的操作进行身份验证。

**Topics**
+ [准加密员 (PRECO)](#preco)
+ [加密员 (CO, Crypto officer)](#crypto-officer)
+ [加密用户 (CU)](#crypto-user-cmu)
+ [设备用户 (AU)](#appliance-user-cmu)

## 准加密员 (PRECO)
<a name="preco"></a>

在云管理实用程序 (CMU, cloud management utility) 和密钥管理实用程序 (KMU, key management utility) 中，PRECO 都是临时用户，仅存在于 AWS CloudHSM 集群中的第一个 HSM 上。新集群中的第一个 HSM 包含一个 PRECO 用户，表示该集群从未被激活。要[激活集群](activate-cluster.md)，可以执行 cloudhsm-cli 并运行 **cluster activate** 命令。登录到 HSM 并更改 PRECO 的密码。更改密码后，该用户就会变成加密员 (CO, crypto officer)。

## 加密员 (CO, Crypto officer)
<a name="crypto-officer"></a>

在云管理实用程序 (CMU, cloud management utility) 和密钥管理实用程序 (KMU, key management utility) 中，加密员（CO）都可以执行用户管理操作。例如，它们可以创建和删除用户以及更改用户密码。有关 CO 用户的更多信息，请参阅 [AWS CloudHSM 管理实用程序的 HSM 用户权限表](user-permissions-table-cmu.md)。激活新集群时，用户将从[加密前官员 (PREC](#preco) O) 变为加密官员 (CO)。

## 加密用户 (CU)
<a name="crypto-user-cmu"></a>

加密用户 (CU) 可以执行以下密钥管理和加密操作。
+ **密钥管理** – 创建、删除、共享、导入和导出加密密钥。
+ **加密操作** – 使用加密密钥来执行加密、解密、签名、验证及更多操作。

有关更多信息，请参阅[AWS CloudHSM 管理实用程序的 HSM 用户权限表](user-permissions-table-cmu.md)。

## 设备用户 (AU)
<a name="appliance-user-cmu"></a>

设备用户 (AU) 可以在您的集群上执行克隆和同步操作 HSMs。 AWS CloudHSM 使用 AU 同步集 AWS CloudHSM 群 HSMs 中的。AU 存在于 HSMs 提供的所有内容上 AWS CloudHSM，并且权限有限。有关更多信息，请参阅[AWS CloudHSM 管理实用程序的 HSM 用户权限表](user-permissions-table-cmu.md)。

AWS 无法对您的执行任何操作 HSMs 。 AWS 无法查看或修改您的用户或密钥，也无法使用这些密钥执行任何加密操作。

# AWS CloudHSM 管理实用程序的 HSM 用户权限表
<a name="user-permissions-table-cmu"></a>

下表列出了按可在 AWS CloudHSM中执行操作的 HSM 用户或会话类型排序的硬件安全模块（HSM）操作。


|  | 加密员 (CO, Crypto officer) | 加密用户 (CU) | 设备用户 (AU) | 未经身份验证的会话 | 
| --- | --- | --- | --- | --- | 
| 获取基本集群信息¹ | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | 
| 更改自己的密码 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | 不适用 | 
| 更改任意用户的密码 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png) 不支持 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png) 不支持 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png)否 | 
| 添加、删除用户 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png) 不支持 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png) 不支持 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png)否 | 
| 获取同步状态² | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png) 不支持 | 
| 提取、插入遮蔽对象³ | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png) 不支持 | 
| 密钥管理功能⁴ | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png)否 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png) 不支持 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png)否 | 
| 加密、解密 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png)否 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png) 不支持 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png)否 | 
| 签署、验证 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png)否 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png) 不支持 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png)否 | 
| 生成摘要和 HMACs | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png)否 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-yes.png) 是 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png) 不支持 | ![\[No\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/icon-no.png)否 | 
+  [1] 基本集群信息包括集群 HSMs 中的数量以及每个 HSM 的 IP 地址、型号、序列号、设备 ID、固件 ID 等。
+  [2] 用户可以获取与 HSM 上的密钥对应的一组摘要（哈希值）。应用程序可以比较这些摘要集，以了解集群 HSMs 中的同步状态。
+  [3] 遮蔽对象是在离开 HSM 之前进行加密的密钥。它们无法在 HSM 外部加密。只有在将其插入 HSM 之后，并且该 HSM 所在集群与提取它们时的 HSM 的集群相同，才会解密它们。应用程序可以提取和插入被屏蔽的对象，以便 HSMs 在群集中同步。
+  [4] 密钥管理功能包括创建、删除、包装、解开包装和修改密钥的属性。

# 使用 AWS CloudHSM 管理实用程序创建 HSM 用户
<a name="create-users-cmu"></a>

**createUser**在 AWS CloudHSM 管理实用程序 (CMU) 中使用，在硬件安全模块 (HSM) 上创建新用户。必须以 CO 身份登录才能创建用户。

**创建一个新的 CO 用户**

1. 使用配置工具更新 CMU 配置。

------
#### [ Linux ]

   ```
   $ sudo /opt/cloudhsm/bin/configure --cmu <IP address>
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\configure.exe" --cmu <IP address>
   ```

------

1. 启动 CMU。

------
#### [ Linux ]

   ```
   $ /opt/cloudhsm/bin/cloudhsm_mgmt_util /opt/cloudhsm/etc/cloudhsm_mgmt_util.cfg
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\cloudhsm_mgmt_util.exe" C:\ProgramData\Amazon\CloudHSM\data\cloudhsm_mgmt_util.cfg
   ```

------

1. 以 CO 用户身份登录 HSM。

   ```
   aws-cloudhsm > loginHSM CO admin co12345
   ```

   确保 CMU 列表的连接数与集群 HSMs 中的连接数相匹配。如果没有，请注销并重新开始。

1. 使用 **createUser** 创建名为 **example\$1officer** 的 CO 用户，密码为 **password1**。

   ```
   aws-cloudhsm > createUser CO example_officer password1
   ```

   CMU 会提示您关于创建用户操作的信息。

   ```
   *************************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)?
   ```

1. 键入。**y**

**创建一个新的 CU 用户**

1. 使用配置工具更新 CMU 配置。

------
#### [ Linux ]

   ```
   $ sudo /opt/cloudhsm/bin/configure --cmu <IP address>
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\configure.exe" --cmu <IP address>
   ```

------

1. 启动 CMU。

------
#### [ Linux ]

   ```
   $ /opt/cloudhsm/bin/cloudhsm_mgmt_util /opt/cloudhsm/etc/cloudhsm_mgmt_util.cfg
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\cloudhsm_mgmt_util.exe" C:\ProgramData\Amazon\CloudHSM\data\cloudhsm_mgmt_util.cfg
   ```

------

1. 以 CO 用户身份登录 HSM。

   ```
   aws-cloudhsm > loginHSM CO admin co12345
   ```

   确保 CMU 列表的连接数与集群 HSMs 中的连接数相匹配。如果没有，请注销并重新开始。

1. 使用 **createUser** 创建名为 **example\$1user** 的 CU 用户，密码为 **password1**。

   ```
   aws-cloudhsm > createUser CU example_user password1
   ```

   CMU 会提示您关于创建用户操作的信息。

   ```
   *************************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)?
   ```

1. 键入。**y**

有关 **createUser** 的更多信息，请参阅 [createUser](cloudhsm_mgmt_util-createUser.md)。

# 使用 AWS CloudHSM 管理实用程序列出集群中的所有 HSM 用户
<a name="list-users"></a>

 使用 AWS CloudHSM 管理实用程序 (CMU) 中的**listUsers**命令列出 AWS CloudHSM 集群中的所有用户。您无需登录即可运行 **listUsers**，且所有用户类型都可以列出用户。

**列出集群上的所有用户**

1. 使用配置工具更新 CMU 配置。

------
#### [ Linux ]

   ```
   $ sudo /opt/cloudhsm/bin/configure --cmu <IP address>
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\configure.exe" --cmu <IP address>
   ```

------

1. 启动 CMU。

------
#### [ Linux ]

   ```
   $ /opt/cloudhsm/bin/cloudhsm_mgmt_util /opt/cloudhsm/etc/cloudhsm_mgmt_util.cfg
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\cloudhsm_mgmt_util.exe" C:\ProgramData\Amazon\CloudHSM\data\cloudhsm_mgmt_util.cfg
   ```

------

1.  使用 **listUsers** 列出集群上的所有用户。

   ```
   aws-cloudhsm > listUsers
   ```

   CMU 会列出集群上的所有用户。

   ```
   Users on server 0(10.0.2.9):
   Number of users found:4
   
       User Id             User Type       User Name                          MofnPubKey    LoginFailureCnt         2FA
            1              AU              app_user                                 NO               0               NO
            2              CO              example_officer                          NO               0               NO
            3              CU              example_user                             NO               0               NO
   Users on server 1(10.0.3.11):
   Number of users found:4
   
       User Id             User Type       User Name                          MofnPubKey    LoginFailureCnt         2FA
            1              AU              app_user                                 NO               0               NO
            2              CO              example_officer                          NO               0               NO
            3              CU              example_user                             NO               0               NO
   Users on server 2(10.0.1.12):
   Number of users found:4
   
       User Id             User Type       User Name                          MofnPubKey    LoginFailureCnt         2FA
            1              AU              app_user                                 NO               0               NO
            2              CO              example_officer                          NO               0               NO
            3              CU              example_user                             NO               0               NO
   ```

有关 **listUsers** 的更多信息，请参阅 [listUsers](cloudhsm_mgmt_util-listUsers.md)。

# 使用 AWS CloudHSM 管理实用程序更改 HSM 用户密码
<a name="change-user-password-cmu"></a>

 **changePswd**在 AWS CloudHSM 管理实用程序 (CMU) 中使用来更改硬件安全模块 (HSM) 用户的密码。

 用户类型和密码区分大小写，但是用户名不区分大小写。

 CO、加密用户（CU）和应用程序用户（AU）能更改自己的密码。要更改其他用户的密码，必须以 CO 身份登录。您无法更改当前已登录用户的密码。

**更改您自己的密码**

1. 使用配置工具更新 CMU 配置。

------
#### [ Linux ]

   ```
   $ sudo /opt/cloudhsm/bin/configure --cmu <IP address>
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\configure.exe" --cmu <IP address>
   ```

------

1. 启动 CMU。

------
#### [ Linux ]

   ```
   $ /opt/cloudhsm/bin/cloudhsm_mgmt_util /opt/cloudhsm/etc/cloudhsm_mgmt_util.cfg
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\cloudhsm_mgmt_util.exe" C:\ProgramData\Amazon\CloudHSM\data\cloudhsm_mgmt_util.cfg
   ```

------

1. 登录到 HSM。

   ```
   aws-cloudhsm > loginHSM CO admin co12345
   ```

   确保 CMU 列表的连接数与集群 HSMs 中的连接数相匹配。如果没有，请注销并重新开始。

1. 使用 **changePswd** 更改您自己的密码。

   ```
   aws-cloudhsm > changePswd CO example_officer <new password>
   ```

   CMU 会提示您更改密码的操作。

   ```
   *************************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)?
   ```

1. 键入。**y**

   CMU 会提示您更改密码的操作。

   ```
   Changing password for example_officer(CO) on 3 nodes
   ```

**更改其他用户的密码**

1. 使用配置工具更新 CMU 配置。

------
#### [ Linux ]

   ```
   $ sudo /opt/cloudhsm/bin/configure --cmu <IP address>
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\configure.exe" --cmu <IP address>
   ```

------

1. 启动 CMU。

------
#### [ Linux ]

   ```
   $ /opt/cloudhsm/bin/cloudhsm_mgmt_util /opt/cloudhsm/etc/cloudhsm_mgmt_util.cfg
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\cloudhsm_mgmt_util.exe" C:\ProgramData\Amazon\CloudHSM\data\cloudhsm_mgmt_util.cfg
   ```

------

1. 以 CO 用户身份登录 HSM。

   ```
   aws-cloudhsm > loginHSM CO admin co12345
   ```

   确保 CMU 列表的连接数与集群 HSMs 中的连接数相匹配。如果没有，请注销并重新开始。

1.  使用 **changePswd** 更改其他用户的密码。

   ```
   aws-cloudhsm > changePswd CU example_user <new password>
   ```

   CMU 会提示您更改密码的操作。

   ```
   *************************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)?
   ```

1. 键入。**y**

   CMU 会提示您更改密码的操作。

   ```
   Changing password for example_user(CU) on 3 nodes
   ```

有关 **changePswd** 的更多信息，请参阅 [changePswd](cloudhsm_mgmt_util-changePswd.md)。

# 使用 AWS CloudHSM 管理实用程序删除 HSM 用户
<a name="delete-user"></a>

**deleteUser**在 AWS CloudHSM 管理实用程序 (CMU) 中使用来删除硬件安全模块 (HSM) 用户。您必须以 CO 身份登录才能删除其他用户。

**提示**  
 您无法删除拥有密钥的加密用户 (CU)。

**删除用户**

1. 使用配置工具更新 CMU 配置。

------
#### [ Linux ]

   ```
   $ sudo /opt/cloudhsm/bin/configure --cmu <IP address>
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\configure.exe" --cmu <IP address>
   ```

------

1. 启动 CMU。

------
#### [ Linux ]

   ```
   $ /opt/cloudhsm/bin/cloudhsm_mgmt_util /opt/cloudhsm/etc/cloudhsm_mgmt_util.cfg
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\cloudhsm_mgmt_util.exe" C:\ProgramData\Amazon\CloudHSM\data\cloudhsm_mgmt_util.cfg
   ```

------

1. 以 CO 用户身份登录 HSM。

   ```
   aws-cloudhsm > loginHSM CO admin co12345
   ```

   确保 CMU 列表的连接数与集群 HSMs 中的连接数相匹配。如果没有，请注销并重新开始。

1.  使用 **deleteUser** 删除用户。

   ```
   aws-cloudhsm > deleteUser CO example_officer
   ```

   CMU 会删除该用户。

   ```
   Deleting user example_officer(CO) on 3 nodes
   deleteUser success on server 0(10.0.2.9)
   deleteUser success on server 1(10.0.3.11)
   deleteUser success on server 2(10.0.1.12)
   ```

有关 **deleteUser** 的更多信息，请参阅 [deleteUser](cloudhsm_mgmt_util-deleteUser.md)。

# 使用管理实用程序为用户 AWS CloudHSM 管理 2FA
<a name="manage-2fa"></a>

为了提高安全性，可以配置双重身份验证（2FA）来帮助保护 AWS CloudHSM 集群。您只能为加密员（CO）启用 2FA。

使用启用 2FA 的硬件服务模（HSM）账户登录集群时，您需要向 cloudhsm\$1mgmt\$1util（CMU）提供您的密码（第一重身份，即您所知道的），CMU 将为您提供令牌并提示您签署令牌。要提供第二重身份（即您所拥有的），您可以使用已经创建并与 HSM 用户关联的密钥对中的私有密钥签署令牌。要访问集群，您需要向 CMU 提供已签署的令牌。

**注意**  
您无法为加密用户（CU）或应用程序启用 2FA。双重身份验证（2FA）仅适用于 CO 用户。

**Topics**
+ [仲裁身份验证](quorum-2fa.md)
+ [密钥对要求](enable-2fa-kms.md)
+ [创建 用户](create-2fa.md)
+ [管理用户 2FA](rotate-2fa.md)
+ [禁用 2FA](disable-2fa.md)
+ [配置参考](reference-2fa.md)

# 使用管理实用程序在 AWS CloudHSM 集群中进行法定身份验证和 2FA AWS CloudHSM
<a name="quorum-2fa"></a>

集群使用相同的密钥进行仲裁身份验证和双重身份验证（2FA）。这意味着启用了 2FA 的用户实际上已经注册了 M-of-N-access-control (MofN)。要成功使用同一 HSM 用户的 2FA 和仲裁身份验证，请考虑以下事项：
+ 如果现在对用户使用仲裁身份验证，则应使用为仲裁用户创建的同一密钥对，为该用户启用 2FA。
+ 如果为非仲裁身份验证用户的非 2FA 用户增加了 2FA 要求，则可以将该用户注册为采用 2FA 身份验证的 MofN 用户。
+ 如果删除了 2FA 要求或更改了同时也是仲裁身份验证用户的 2FA 用户的密码，则将同时删除该仲裁用户的 MofN 用户注册。
+ 如果删除了 2FA 要求或更改了同时也是仲裁身份验证用户的 2FA 用户的密码，但*仍希望该用户参与仲裁身份验证*，则必须将该用户重新注册为 MofN 用户。

有关仲裁身份验证的更多信息，请参阅 [使用 CMU 管理仲裁身份认证](quorum-authentication.md)。

# AWS CloudHSM 使用 AWS CloudHSM 管理实用程序的 2FA 密钥对要求
<a name="enable-2fa-kms"></a>

要为 AWS CloudHSM 硬件安全模块 (HSM) 用户启用双因素身份验证 (2FA)，请使用满足以下要求的密钥。

您可以创建新的密钥对或使用满足以下要求的现有密钥。
+ 密钥类型：非对称密钥
+ 密钥用法：签名和验证
+ 密钥规范：RSA\$12048
+ 签名算法包含：
  + `sha256WithRSAEncryption`

**注意**  
如果您正在使用仲裁身份验证或计划使用仲裁身份验证，请参阅 [使用管理实用程序在 AWS CloudHSM 集群中进行法定身份验证和 2FA AWS CloudHSM](quorum-2fa.md)。

# 为 AWS CloudHSM 管理实用程序用户创建启用 2FA 的用户
<a name="create-2fa"></a>

使用 AWS CloudHSM 管理实用程序 CMU (CMU) 和 key pair 创建启用了双重身份验证 (2FA) 的新加密办公室 (CO) 用户。

**创建启用 2FA 的 CO 用户**

1. 在一个终端中执行以下步骤：

   1. 访问您的 HSM 并登录 CloudHSM 管理实用程序：

      ```
      /opt/cloudhsm/bin/cloudhsm_mgmt_util /opt/cloudhsm/etc/cloudhsm_mgmt_util.cfg
      ```

   1. 以 CO 身份登录，使用以下命令创建启用 2FA 的新用户 MFA：

      ```
      aws-cloudhsm > createUser CO MFA <CO USER PASSWORD> -2fa /home/ec2-user/authdata
      *************************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 exampleuser3(CO) on 1 nodesAuthentication data written to: "/home/ec2-user/authdata"Generate Base64-encoded signatures for SHA256 digests in the authentication datafile. 
      To generate the signatures, use the RSA private key, which is the second factor ofauthentication for this user. Paste the signatures and the corresponding public keyinto the authentication data file and provide 
      the file path below.Leave this field blank to use the path initially provided.Enter filename:
      ```

   1. 使上述终端保持该状态。请勿按回车键或输入任何文件名。

1. 在另一个终端中执行以下步骤：

   1. 访问您的 HSM 并登录 CloudHSM 管理实用程序：

      ```
      /opt/cloudhsm/bin/cloudhsm_mgmt_util /opt/cloudhsm/etc/cloudhsm_mgmt_util.cfg
      ```

   1. 使用以下命令生成公有密钥/私有密钥对：

      ```
      openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048
      ```

      ```
      openssl rsa -pubout -in private_key.pem -out public_key.pem
      ```

   1. 运行以下命令安装 json 查询功能，以从 authdata 文件中提取摘要：

      ```
      sudo yum install jq
      ```

   1. 要提取摘要值，请先在 authdata 文件中找到以下数据：

      ```
      {
        "Version":"1.0",
        "PublicKey":"",
        "Data":[
          {
            "HsmId": <"HSM ID">,
            "Digest": <"DIGEST">,
            "Signature": ""
          }
        ]
      }
      ```
**注意**  
所得摘要采用 base64 编码，但如要签署摘要，则需先解码文件再进行签名。以下命令将解码摘要并将解码后的内容存储在 ‘digest1.bin’ 中  

      ```
      cat authdata | jq '.Data[0].Digest' | cut -c2- | rev | cut -c2- | rev | base64 -d > digest1.bin
      ```

   1. 转换公有密钥内容，添加 "\$1n" 并删除空格，如下所示：

      ```
      -----BEGIN PUBLIC KEY-----\n<PUBLIC KEY>\n-----END PUBLIC KEY----- 
      ```
**重要**  
上述命令显示了如何在 **BEGIN PUBLIC KEY-----** 后立即添加 "\$1n"、如何删除 "\$1n" 与公有密钥的第一个字符之间的空格，如何在 **-----END PUBLIC KEY** 前添加 "\$1n"，以及如何删除 "\$1n" 与公有密钥结尾处之间的空格。

      这是 authdata 文件中接受的公有密钥的 PEM 格式。

   1. 将公有密钥 pem 格式的内容粘贴到 authdata 文件中的公有密钥部分。

      ```
      vi authdata
      ```

      ```
      {
        "Version":"1.0",
        "PublicKey":"-----BEGIN PUBLIC KEY-----\n<"PUBLIC KEY">\n-----END PUBLIC KEY-----",
        "Data":[    
          {      
            "HsmId":<"HSM ID">,
            "Digest":<"DIGEST">,      
            "Signature": ""   
          }  
        ]
      }
      ```

   1. 使用以下命令签署令牌文件：

      ```
      openssl pkeyutl -sign -in digest1.bin -inkey private_key.pem -pkeyopt digest:sha256 | base64
      Output Expected:
      <"THE SIGNATURE">
      ```
**注意**  
如上述命令所示，使用 **openssl pkeyutl** 而不是 **openssl dgst** 进行签名。

   1. 在 Authdata 文件的“签名”字段中添加已签名的摘要。

      ```
      vi authdata
      ```

      ```
      {
          "Version": "1.0",
          "PublicKey": "-----BEGIN PUBLIC KEY----- ... -----END PUBLIC KEY-----",
          "Data": [
              {
                  "HsmId": <"HSM ID">,
                  "Digest": <"DIGEST">,
                  "Signature": <"Kkdl ... rkrvJ6Q==">
              },
              {
                  "HsmId": <"HSM ID">,
                  "Digest": <"DIGEST">,
                  "Signature": <"K1hxy ... Q261Q==">
              }
          ]
      }
      ```

1. 返回第一个终端并按 **Enter**：

   ```
   Generate Base64-encoded signatures for SHA256 digests in the authentication datafile. To generate the signatures, use the RSA private key, 
   which is the second factor ofauthentication for this user. Paste the signatures and the corresponding public keyinto the authentication data file and provide the file path below. Leave this field blank to use the path initially provided. 
   Enter filename: >>>>> Press Enter here
   
   createUser success on server 0(10.0.1.11)
   ```

# 使用 AWS CloudHSM 管理实用程序管理 HSM 用户的双重身份验证
<a name="rotate-2fa"></a>

**changePswd**在 AWS CloudHSM 管理实用程序 (CMU) 中使用来修改用户的双重身份验证 (2FA)。每次启用 2FA 时，均须为 2FA 登录提供公有密钥。

**changePswd** 执行以下任何场景：
+ 更改 2FA 用户的密码
+ 更改非 2FA 用户的密码
+ 对非 2FA 用户添加 2FA
+ 删除 2FA 用户的 2FA
+ 轮换 2FA 用户的密钥

您还可以合并任务。例如，您可以删除用户的 2FA 并同时更改密码，或轮换 2FA 密钥并更改用户密码。

**更改启用 2FA 的 CO 用户的密码或轮换其密钥**

1. 通过 CMU 以启用 2FA 的 CO 身份登录 HSM。

1.  使用 **changePswd** 更改启用 2FA 的 CO 用户的密码或轮换其密钥。使用 `-2fa` 参数并在文件系统中添加系统写入 `authdata` 文件的位置。此文件包含集群中每个 HSM 的摘要。

   ```
   aws-cloudhsm > changePswd CO example-user <new-password> -2fa /path/to/authdata
   ```

   CMU 将提示您使用私有密钥签署 `authdata` 文件中的摘要，并使用公有密钥返回签名。

1. 使用私有密钥签署 `authdata` 文件中的摘要，将签名和公有密钥添加到 JSON 格式 `authdata` 的文件中，然后向 CMU 提供 `authdata` 文件的位置。有关更多信息，请参阅 [使用 AWS CloudHSM 管理实用程序的 2FA 配置参考](reference-2fa.md)。
**注意**  
集群使用相同的密钥进行仲裁身份验证和双因素身份验证。如果您正在使用仲裁身份验证或计划使用仲裁身份验证，请参阅 [使用管理实用程序在 AWS CloudHSM 集群中进行法定身份验证和 2FA AWS CloudHSM](quorum-2fa.md)。

# 使用 AWS CloudHSM 管理实用程序为 HSM 用户禁用 2FA
<a name="disable-2fa"></a>

使用 AWS CloudHSM 管理实用程序 (CMU) 为中的硬件安全模块 (HSM) 用户禁用双因素身份验证 (2FA)。 AWS CloudHSM

**要禁用启用 2FA 的 CO 用户的 2FA**

1. 通过 CMU 以启用 2FA 的 CO 身份登录 HSM。

1.  使用 **changePswd** 移除启用 2FA 的 CO 用户的 2FA。

   ```
   aws-cloudhsm > changePswd CO example-user <new password>
   ```

   CMU 将提示您确认更改密码操作。
**注意**  
如果删除了 2FA 要求或更改了同时也是仲裁身份验证用户的 2FA 用户的密码，则将同时删除该仲裁用户的 MofN 用户注册。有关仲裁用户和 2FA 的更多信息，请参阅 [使用管理实用程序在 AWS CloudHSM 集群中进行法定身份验证和 2FA AWS CloudHSM](quorum-2fa.md)。

1. 键入。**y**

   CMU 将确认更改密码操作。

# 使用 AWS CloudHSM 管理实用程序的 2FA 配置参考
<a name="reference-2fa"></a>

以下是`authdata`文件中 AWS CloudHSM 管理实用程序 (CMU) 生成的请求和您的响应的双因素身份验证 (2FA) 属性的示例。

```
{
    "Version": "1.0",
    "PublicKey": "-----BEGIN PUBLIC KEY----- ... -----END PUBLIC KEY-----",
    "Data": [
        {
            "HsmId": "hsm-lgavqitns2a",
            "Digest": "k5O1p3f6foQRVQH7S8Rrjcau6h3TYqsSdr16A54+qG8=",
            "Signature": "Kkdl ... rkrvJ6Q=="
        },
        {
            "HsmId": "hsm-lgavqitns2a",
            "Digest": "IyBcx4I5Vyx1jztwvXinCBQd9lDx8oQe7iRrWjBAi1w=",
            "Signature": "K1hxy ... Q261Q=="
        }
    ]
}
```

**数据**  
顶级节点。包含集群中每个 HSM 的从属节点。出现在所有 2FA 命令的请求和响应中。

**摘要**  
这是您必须签名才能提供第二重身份验证。在所有 2FA 命令的请求中生成的 CMU。

**HsmId**  
您的 HSM 的 ID。出现在所有 2FA 命令的请求和响应中。

**PublicKey**  
作为 PEM 格式的字符串插入的您所生成的密钥对的公有密钥部分。您输入此内容以响应 **createUser** 和 **changePswd**。

**签名**  
Base 64 编码的签名摘要。您输入此内容以响应所有 2FA 命令。

**版本**  
JSON 格式的身份验证数据文件的版本。出现在所有 2FA 命令的请求和响应中。

# 使用 CloudHSM 管理实用程序 (CMU, CloudHSM Management Utility) 管理仲裁身份验证（M of N 访问控制）
<a name="quorum-authentication"></a>

 AWS CloudHSM 集群 HSMs 中的支持法定身份验证，也称为 M of N 访问控制。对于仲裁身份验证，HSM 上的单个用户不能在 HSM 上执行仲裁控制型操作。必须有最少数量 (至少 2 个) 的 HSM 用户合作才能执行这些操作。对于仲裁身份验证，要求多个 HSM 用户批准，这样可以增加一层额外的保护。

仲裁身份验证可以控制以下操作：
+ [加密官员的 HSM 用户管理 (COs)](understanding-users-cmu.md#crypto-officer) — 创建和删除 HSM 用户，以及更改其他 HSM 用户的密码。有关更多信息，请参阅 [管理实用程序启用了法定身份验证的 AWS CloudHSM 用户管理](quorum-authentication-crypto-officers.md)。

注意以下有关在 AWS CloudHSM中使用仲裁身份验证的更多信息。
+ HSM 用户可为自己的仲裁令牌签名，也就是说，请求用户可提供仲裁身份验证所需的批准之一。
+ 为仲裁控制型操作选择最小数量的仲裁审批者。您可以选择的最小数字是二（2），您可以选择的最大数字是八（8）。
+ HSM 可容纳多达 1024 个仲裁令牌。如果 HSM 在您尝试创建新的令牌时已有 1024 个令牌，HSM 将清除过期令牌之一。默认情况下，令牌将在创建 10 分钟后过期。
+ 集群使用相同的密钥进行仲裁身份验证和双重身份验证 (2FA, two-factor authentication)。有关使用仲裁身份验证和双因素身份验证的更多信息，请参阅[仲裁身份验证和双因素身份验证](quorum-2fa.md)。

下列主题提供了有关 AWS CloudHSM中的仲裁身份验证的更多信息。

**Topics**
+ [仲裁身份验证过程](quorum-authentication-overview.md)
+ [首次设置](quorum-authentication-crypto-officers-first-time-setup.md)
+ [使用仲裁（M of N）进行用户管理](quorum-authentication-crypto-officers.md)
+ [更改最小值](quorum-authentication-crypto-officers-change-minimum-value.md)

# 管理实用程序的法定身份验证流程 AWS CloudHSM
<a name="quorum-authentication-overview"></a>

下列步骤概括了仲裁身份验证过程。有关特定步骤和工具，请参阅[管理实用程序启用了法定身份验证的 AWS CloudHSM 用户管理](quorum-authentication-crypto-officers.md)。

1. 每个 HSM 用户都将创建用于签名的非对称密钥。他们在 HSM 外部执行此操作，并注意适当保护密钥。

1. 每个 HSM 用户都将登录 HSM 并向 HSM 注册其签名密钥的公有部分 (公有密钥)。

1. 当 HSM 用户要执行仲裁控制型操作时，该用户将登录 HSM 并获取*仲裁令牌*。

1. HSM 用户将仲裁令牌提供给一个或多个其他 HSM 用户并请求其批准。

1. 其他 HSM 用户通过使用其密钥对仲裁令牌进行加密签名来进行批准。上述操作是在 HSM 外部进行的。

1. 当 HSM 用户获得所需数量的批准后，同一用户将登录 HSM 并向 HSM 提供仲裁令牌和批准 (签名)。

1. HSM 将使用每个签署人的已注册公有密钥来验证签名。如果签名有效，HSM 将批准此令牌。

1. HSM 用户现在可以执行仲裁控制型操作。

# 为加密官员设置法定人数认证 AWS CloudHSM
<a name="quorum-authentication-crypto-officers-first-time-setup"></a>

以下主题描述了配置硬件安全模块 (HSM) 以便 AWS CloudHSM [加密官员 (COs)](understanding-users-cmu.md#crypto-officer) 可以使用法定身份验证时必须完成的步骤。首次为其配置法定身份验证时，只需执行一次这些步骤。 COs完成这些步骤后，请参阅 [管理实用程序启用了法定身份验证的 AWS CloudHSM 用户管理](quorum-authentication-crypto-officers.md)。

**Topics**
+ [先决条件](#quorum-crypto-officers-prerequisites)
+ [步骤 1：创建并注册签名密钥](#quorum-crypto-officers-create-and-register-key)
+ [步骤 2：在 HSM 上设置仲裁最小值](#quorum-crypto-officers-set-quorum-minimum-value)

## 先决条件
<a name="quorum-crypto-officers-prerequisites"></a>

要理解此示例，应熟悉 [cloudhsm\$1mgmt\$1util (CMU) 命令行工具](cloudhsm_mgmt_util.md)。在此示例中， AWS CloudHSM 集群有两个 HSMs，每个集群都相同 COs，如**listUsers**命令的以下输出所示。有关创建用户的更多信息，请参见 [HSM 用户](manage-hsm-users.md)。

```
aws-cloudhsm > listUsers
Users on server 0(10.0.2.14):
Number of users found:7

    User Id             User Type       User Name                          MofnPubKey    LoginFailureCnt         2FA
         1              PRECO           admin                                    NO               0               NO
         2              AU              app_user                                 NO               0               NO
         3              CO              officer1                                 NO               0               NO
         4              CO              officer2                                 NO               0               NO
         5              CO              officer3                                 NO               0               NO
         6              CO              officer4                                 NO               0               NO
         7              CO              officer5                                 NO               0               NO
Users on server 1(10.0.1.4):
Number of users found:7

    User Id             User Type       User Name                          MofnPubKey    LoginFailureCnt         2FA
         1              PRECO           admin                                    NO               0               NO
         2              AU              app_user                                 NO               0               NO
         3              CO              officer1                                 NO               0               NO
         4              CO              officer2                                 NO               0               NO
         5              CO              officer3                                 NO               0               NO
         6              CO              officer4                                 NO               0               NO
         7              CO              officer5                                 NO               0               NO
```

## 步骤 1：创建并注册签名密钥
<a name="quorum-crypto-officers-create-and-register-key"></a>

要使用仲裁身份验证，每个 CO 都必须完成以下*所有*步骤：

**Topics**
+ [创建 RSA 密钥对](#mofn-key-pair-create)
+ [创建注册令牌并签名](#mofn-registration-token)
+ [通过 HSM 注册公钥](#mofn-register-key)

### 创建 RSA 密钥对
<a name="mofn-key-pair-create"></a>

创建和保护密钥对的方式有多种。以下示例说明如何使用 [OpenSSL](https://www.openssl.org/) 执行该操作。

**Example - 使用 OpenSSL 创建私有密钥**  
以下示例演示如何使用 OpenSSL 创建受密码保护的 2048 位 RSA 密钥。要使用此示例，请*officer1.key*替换为要存储密钥的文件的名称。  

```
$ openssl genrsa -out <officer1.key> -aes256 2048
        Generating RSA private key, 2048 bit long modulus
.....................................+++
.+++
e is 65537 (0x10001)
Enter pass phrase for officer1.key:
Verifying - Enter pass phrase for officer1.key:
```

接下来，使用您刚刚创建的私钥生成公有密钥。

**Example - 使用 OpenSSL 创建公有密钥**  
以下示例演示如何使用 OpenSSL，根据您刚刚创建的私有密钥创建公钥。  

```
$ openssl rsa -in officer1.key -outform PEM -pubout -out officer1.pub
Enter pass phrase for officer1.key:
writing RSA key
```

### 创建注册令牌并签名
<a name="mofn-registration-token"></a>

 创建一个令牌，并使用上一步生成的私有密钥签名。

**Example - 创建令牌**  
注册令牌只是一个包含任何随机数据的文件，其大小不超过 245 字节的最大值。您通过私有密钥对令牌进行签名，以证明您有权访问私钥。以下命令使用“回显”将字符串重定向到文件。  

```
$ echo <token to be signed> > officer1.token
```

对令牌进行签名并将其保存到签名文件中。您需要已签名令牌、未签名令牌和公有密钥才能在 HSM 中将 CO 注册为 MofN 用户。

**Example ：签署令牌**  
使用 OpenSSL 和私钥对注册令牌签名，并创建签名文件：  

```
$ openssl dgst -sha256 \
    -sign officer1.key \
    -out officer1.token.sig officer1.token
```

### 通过 HSM 注册公钥
<a name="mofn-register-key"></a>

在创建密钥之后，CO 必须向 HSM 注册密钥的公有部分 (公有密钥)。

**向 HSM 注册公有密钥**

1. 使用以下命令启动 cloudhsm\$1mgmt\$1util 命令行工具。

   ```
   $ /opt/cloudhsm/bin/cloudhsm_mgmt_util /opt/cloudhsm/etc/cloudhsm_mgmt_util.cfg
   ```

1. 使用 **loginHSM** 命令以 CO 身份登录 HSM。有关更多信息，请参阅 [使用 CloudHSM 管理实用程序（CMU）管理 HSM 用户](manage-hsm-users-cmu.md)。

1. 使用 **[registerQuorumPubKey](cloudhsm_mgmt_util-registerQuorumPubKey.md)** 命令注册公有密钥。有关更多信息，请参阅以下示例或使用 **help registerQuorumPubKey** 命令。

**Example ：向 HSM 注册公有密钥**  
以下示例说明如何使用 cloudhsm\$1mgmt\$1util 命令行工具中的 **registerQuorumPubKey** 命令向 HSM 注册 CO 的公有密钥。要使用此命令，CO 必须登录 HSM。将这些值替换为您自己的值：  

```
aws-cloudhsm > registerQuorumPubKey CO <officer1> <officer1.token> <officer1.token.sig> <officer1.pub>
*************************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
registerQuorumPubKey success on server 0(10.0.2.14)
```  
**<officer1.token>**  
包含未签名注册令牌的文件路径。可以有最大文件大小为 245 字节的任何随机数据。  
是否必需：是  
**<officer1.token.sig>**  
包含注册令牌的 SHA256 \$1PKCS 机制签名哈希值的文件路径。  
是否必需：是  
**<officer1.pub>**  
包含非对称 RSA-2048 密钥对公有密钥的文件路径。使用私有密钥对注册令牌进行签名。  
是否必需：是
在所有人 COs 注册其公钥之后，**listUsers**命令的输出将显示在`MofnPubKey`列中，如以下示例所示。  

```
aws-cloudhsm > listUsers
Users on server 0(10.0.2.14):
Number of users found:7

    User Id             User Type       User Name                          MofnPubKey    LoginFailureCnt         2FA
         1              PRECO           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
Users on server 1(10.0.1.4):
Number of users found:7

    User Id             User Type       User Name                          MofnPubKey    LoginFailureCnt         2FA
         1              PRECO           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
```

## 步骤 2：在 HSM 上设置仲裁最小值
<a name="quorum-crypto-officers-set-quorum-minimum-value"></a>

*要使用法定身份验证 COs，CO 必须登录 HSM，然后设置法定*人数最小值，也称为 m 值*。*这是执行 HSM 用户管理操作所需的最少数量的 CO 审批。HSM 上的任何 CO 都可以设置法定人数的最小值 COs ，包括尚未注册用于签名的密钥。您可以随时更改仲裁最小值；有关更多信息，请参阅[更改最小值](quorum-authentication-crypto-officers-change-minimum-value.md)。

**在 HSM 上设置仲裁最小值**

1. 使用以下命令启动 cloudhsm\$1mgmt\$1util 命令行工具。

   ```
   $ /opt/cloudhsm/bin/cloudhsm_mgmt_util /opt/cloudhsm/etc/cloudhsm_mgmt_util.cfg
   ```

1. 使用 **loginHSM** 命令以 CO 身份登录 HSM。有关更多信息，请参阅 [使用 CloudHSM 管理实用程序（CMU）管理 HSM 用户](manage-hsm-users-cmu.md)。

1. 使用 **setMValue** 命令设置仲裁最小值。有关更多信息，请参阅以下示例或使用 **help setMValue** 命令。

**Example - 在 HSM 上设置仲裁最小值**  
此示例使用仲裁最小值 2。您可以选择两 (2) 到八 (8) 之间的任何值，最多不超过 HSM COs 上的总数。在此示例中，HSM 有六个 COs，因此可能的最大值为六。  
要使用以下示例命令，请将最后一个数字 (*2*) 替换为首选法定人数最小值。  

```
aws-cloudhsm > setMValue 3 <2>
*************************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
Setting M Value(2) for 3 on 2 nodes
```

在前面的示例中，第一个数字 (3) 标识您将为其设置仲裁最小值的 *HSM 服务*。

下表列出了 HSM 服务标识符及其名称、描述和服务所包含命令。


| 服务标识符 | 服务名称 | 服务描述 | HSM 命令 | 
| --- | --- | --- | --- | 
| 3 | USER\$1MGMT | HSM 用户管理 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/quorum-authentication-crypto-officers-first-time-setup.html)  | 
| 4 | MISC\$1CO | 其他 CO 服务 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/quorum-authentication-crypto-officers-first-time-setup.html)  | 

要获取服务的仲裁最小值，请使用 **getMValue** 命令，如以下示例所示。

```
aws-cloudhsm > getMValue 3
MValue of service 3[USER_MGMT] on server 0 : [2]
MValue of service 3[USER_MGMT] on server 1 : [2]
```

来自前面的 **getMValue** 命令的输出显示，HSM 用户管理操作（服务 3）的仲裁最小值现在为 2。

完成这些步骤后，请参阅 [管理实用程序启用了法定身份验证的 AWS CloudHSM 用户管理](quorum-authentication-crypto-officers.md)。

# 管理实用程序启用了法定身份验证的 AWS CloudHSM 用户管理
<a name="quorum-authentication-crypto-officers"></a>

硬件安全模块 [(HSM) 上的 AWS CloudHSM 加密官员 (CO](understanding-users-cmu.md#crypto-officer)) 可以为 HSM 上的以下操作配置法定身份验证：
+ 创建 HSM 用户
+ 删除 HSM 用户
+ 更改其他 HSM 用户的密码

在 HSM 配置为法定身份验证后， COs 无法自行执行 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 必须完成以下任务：

1. [获取 *quorum 令牌*](#quorum-crypto-officers-get-token)。

1. [从其他人那里获得批准（签名） COs](#quorum-crypto-officers-get-approval-signatures)。

1. [批准 HSM 上的令牌](#quorum-crypto-officers-approve-token)。

1. [执行 HSM 用户管理操作](#quorum-crypto-officers-use-token)。

如果您尚未为 HSM 配置法定身份验证 COs，请立即执行此操作。有关更多信息，请参阅 [首次设置](quorum-authentication-crypto-officers-first-time-setup.md)。

## 步骤 1：获取仲裁令牌
<a name="quorum-crypto-officers-get-token"></a>

首先，CO 必须使用 cloudhsm\$1mgmt\$1util 命令行工具请求*仲裁令牌*。

**获取仲裁令牌**

1. 使用以下命令启动 cloudhsm\$1mgmt\$1util 命令行工具。

   ```
   $ /opt/cloudhsm/bin/cloudhsm_mgmt_util /opt/cloudhsm/etc/cloudhsm_mgmt_util.cfg
   ```

1. 使用 **loginHSM** 命令以 CO 身份登录 HSM。有关更多信息，请参阅 [使用 CloudHSM 管理实用程序（CMU）管理 HSM 用户](manage-hsm-users-cmu.md)。

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

**Example ：获取仲裁令牌**  
此示例将为用户名为 officer1 的 CO 获取一个 quorum 令牌，并将该令牌保存到一个名为 `officer1.token` 的文件中。要使用示例命令，可将这些值替换为您自己的值：  
+ *officer1*— 获得代币的 CO 的名称。这必须是已登录 HSM 并且正在运行此命令的 CO。
+ *officer1.token*— 用于存储法定令牌的文件的名称。
在以下命令中，`3` 标识可将获取的令牌用于的*服务*。在此示例中，令牌用于 HSM 用户管理操作 (服务 3)。有关更多信息，请参阅 [步骤 2：在 HSM 上设置仲裁最小值](quorum-authentication-crypto-officers-first-time-setup.md#quorum-crypto-officers-set-quorum-minimum-value)。  

```
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
```

## 步骤 2：通过批准获取签名 COs
<a name="quorum-crypto-officers-get-approval-signatures"></a>

拥有法定人数令牌的 CO 必须获得其他人的批准。 COs为了获得批准，另一个人 COs 使用他们的签名密钥对令牌进行加密签名。他们在 HSM 外部执行此操作。

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

**Example — 通过批准获取签名 COs**  
在此示例中，具有令牌的 CO (officer1) 至少需要两次批准。以下示例命令显示了 COs 如何使用 OpenSSL 对令牌进行加密签名。  
在第一条命令中，officer1 对自己的令牌进行签名。要使用以下示例命令，请将这些值替换为您自己的值：  
+ *officer1.key*和 *officer2.key* — 包含 CO 签名密钥的文件的名称。
+ *officer1.token.sig1*和 *officer1.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:
```

## 步骤 3：批准 HSM 上的已签名令牌
<a name="quorum-crypto-officers-approve-token"></a>

在 CO 从他人那里获得最低数量的批准（签名）后 COs，他或她必须在 HSM 上批准已签名的令牌。

**批准 HSM 上的已签名令牌**

1. 创建一个令牌批准文件。有关更多信息，请参阅以下示例。

1. 使用以下命令启动 cloudhsm\$1mgmt\$1util 命令行工具。

   ```
   $ /opt/cloudhsm/bin/cloudhsm_mgmt_util /opt/cloudhsm/etc/cloudhsm_mgmt_util.cfg
   ```

1. 使用 **loginHSM** 命令以 CO 身份登录 HSM。有关更多信息，请参阅 [使用 CloudHSM 管理实用程序（CMU）管理 HSM 用户](manage-hsm-users-cmu.md)。

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

**Example - 创建一个令牌批准文件并批准 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\$1mgmt\$1util 命令行工具登录 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
```

## 步骤 4：将令牌用于用户管理操作
<a name="quorum-crypto-officers-use-token"></a>

在 CO 拥有具有所需数量的批准的令牌后 (如上一部分中所示)，CO 可以执行下列 HSM 用户管理操作之一：
+ 使用 [createUser](cloudhsm_mgmt_util-createUser.md) 命令创建 HSM 用户
+ 使用 **deleteUser** 命令删除 HSM 用户
+ 使用 **changePswd** 命令更改其他 HSM 用户的密码

有关使用这些命令的更多信息，请参阅[HSM 用户](manage-hsm-users.md)。

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

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

在以下示例命令中，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
```

# 使用 AWS CloudHSM 管理实用程序更改法定人数最小值
<a name="quorum-authentication-crypto-officers-change-minimum-value"></a>

在[设置了法定人数最小值](quorum-authentication-crypto-officers-first-time-setup.md#quorum-crypto-officers-set-quorum-minimum-value)以便 AWS CloudHSM [加密官员 (COs)](understanding-users-cmu.md#crypto-officer) 可以使用法定人数身份验证之后，您可能需要更改法定人数的最小值。仅当审批者的数量大于或等于当前仲裁最小值时，HSM 才允许您更改 quorum 最小值。例如，如果法定人数最小值为二，则 COs 必须至少有两个批准才能更改法定人数最小值。

要获取更改仲裁最小值的仲裁批准，您需要一个用于 **setMValue** 命令 (服务 4) 的*仲裁令牌*。要获取用于 **setMValue** 命令（服务 4）的仲裁令牌，服务 4 的仲裁最小值必须大于 1。这意味着，在更改 COs（服务 3）的法定人数最小值之前，可能需要更改服务 4 的最小法定人数值。

下表列出了 HSM 服务标识符及其名称、描述和服务所包含命令。


| 服务标识符 | 服务名称 | 服务描述 | HSM 命令 | 
| --- | --- | --- | --- | 
| 3 | USER\$1MGMT | HSM 用户管理 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/quorum-authentication-crypto-officers-change-minimum-value.html)  | 
| 4 | MISC\$1CO | 其他 CO 服务 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/quorum-authentication-crypto-officers-change-minimum-value.html)  | 

**为加密员更改仲裁最小值**

1. 使用以下命令启动 cloudhsm\$1mgmt\$1util 命令行工具。

   ```
   $ /opt/cloudhsm/bin/cloudhsm_mgmt_util /opt/cloudhsm/etc/cloudhsm_mgmt_util.cfg
   ```

1. 使用 **loginHSM** 命令以 CO 身份登录 HSM。有关更多信息，请参阅 [使用 CloudHSM 管理实用程序（CMU）管理 HSM 用户](manage-hsm-users-cmu.md)。

1. 使用 **getMValue** 命令获取服务 3 的仲裁最小值。有关更多信息，请参阅以下示例。

1. 使用 **getMValue** 命令获取服务 4 的仲裁最小值。有关更多信息，请参阅以下示例。

1. 如果服务 4 的仲裁最小值小于服务 3 的相应值，请使用 **setMValue** 命令更改服务 4 的值。将服务 4 的值更改为大于或等于服务 3 的值。有关更多信息，请参阅以下示例。

1. [获取一个 *quorum 令牌*](quorum-authentication-crypto-officers.md#quorum-crypto-officers-get-token)，并注意指定服务 4 作为您可以对其使用令牌的服务。

1. [从其他人那里获得批准（签名） COs](quorum-authentication-crypto-officers.md#quorum-crypto-officers-get-approval-signatures)。

1. [批准 HSM 上的令牌](quorum-authentication-crypto-officers.md#quorum-crypto-officers-approve-token)。

1. 使用**setMValue**命令更改服务 3（由 COs执行的用户管理操作）的最小法定值。

**Example – 获取仲裁最小值并更改服务 4 的相应值**  
以下示例命令显示了服务 3 的 quorum 最小值当前为 2。  

```
aws-cloudhsm > getMValue 3
MValue of service 3[USER_MGMT] on server 0 : [2]
MValue of service 3[USER_MGMT] on server 1 : [2]
```
以下示例命令显示了服务 4 的 quorum 最小值当前为 1。  

```
aws-cloudhsm > getMValue 4
MValue of service 4[MISC_CO] on server 0 : [1]
MValue of service 4[MISC_CO] on server 1 : [1]
```
要更改服务 4 的仲裁最小值，请使用 **setMValue** 命令，并设置一个大于或等于服务 3 的相应值的值。以下示例将服务 4 的 quorum 最小值设置为二 (2)，与为服务 3 设置的值相同。  

```
aws-cloudhsm > setMValue 4 2
*************************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
Setting M Value(2) for 4 on 2 nodes
```
以下命令显示了服务 3 和服务 4 的 quorum 最小值现在为 2。  

```
aws-cloudhsm > getMValue 3
MValue of service 3[USER_MGMT] on server 0 : [2]
MValue of service 3[USER_MGMT] on server 1 : [2]
```

```
aws-cloudhsm > getMValue 4
MValue of service 4[MISC_CO] on server 0 : [2]
MValue of service 4[MISC_CO] on server 1 : [2]
```