

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 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 中的使用者 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": []
}
```
權杖檔案由以下項目組成：  
+ **服務**：權杖相關聯的規定人數服務識別符。
+ **approval\$1data**：由 HSM 產生的 base64 編碼原始資料權杖。
+ **token**：approval\$1data 的 base64 編碼和 SHA-256 雜湊權杖
+ **signatures**：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. 最後，將 base64 編碼的簽名複製並粘貼到權杖檔案中，遵循先前為核准者簽名指定的 JSON 物件常值格式：

   ```
   {
     "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)**
+ **[delete](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 使用者管理操作，管理員必須產生新的規定人數權杖、向核准者取得新簽章，並使用核准引數執行所需的使用者管理操作，以提供要在執行使用者管理操作期間核准和使用的規定人數權杖。  

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