

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

# 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 上可用