

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

# 使用 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
     }
   }
   ```