

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

# 針對 Management Utility 啟用規定人數身分驗證的使用者 AWS CloudHSM 管理
<a name="quorum-authentication-crypto-officers"></a>

硬體安全模組 AWS CloudHSM [(HSM) 上的 Ancrypto officer (CO](understanding-users-cmu.md#crypto-officer)) 可以為 HSM 上的下列操作設定規定人數身分驗證：
+ 建立 HSM 使用者
+ 刪除 HSM 使用者
+ 變更另一個 HSM 使用者的密碼

在將 HSM 設定為使用規定人數身分驗證之後，CO 無法自行執行 HSM 使用者管理操作。以下範例示範當 CO 嘗試在 HSM 上建立新使用者時的輸出。命令失敗，出現 `RET_MXN_AUTH_FAILED` 錯誤，這表示規定人數身分驗證失敗。

```
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-crypto-officers-get-token)。

1. [取得其他 CO 的核准 (簽章)](#quorum-crypto-officers-get-approval-signatures)。

1. [在 HSM 上核准字符](#quorum-crypto-officers-approve-token)。

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

如果您尚未將 HSM 設定為使用 CO 的規定人數身分驗證，請立即設定。如需詳細資訊，請參閱[首次設定](quorum-authentication-crypto-officers-first-time-setup.md)。

## 步驟 1. 取得規定人數字符
<a name="quorum-crypto-officers-get-token"></a>

首先，CO 必須使用 cloudhsm\_mgmt\_util 命令列工具，以請求*規定人數權杖*。

**取得規定人數權杖**

1. 使用下列命令來啟動 cloudhsm\_mgmt\_util 命令列工具。

   ```
   $ /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 的規定人數字符，並將字符儲存至名為 `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. 取得核准 CO 的簽章
<a name="quorum-crypto-officers-get-approval-signatures"></a>

具有規定人數字符的 CO 必須取得其他 CO 核准的字符。為了提供核准，其他 CO 會使用其簽署金鑰來以密碼編譯形式簽署字符。他們會在 HSM 外部執行此操作。

簽署權杖的方式有很多。下列範例示範使用 [OpenSSL](https://www.openssl.org/) 的做法。若要使用不同的簽署工具，請確定工具使用 CO 的私有金鑰 (簽署金鑰) 來簽署字符的 SHA-256 摘要。

**Example – 取得核准 CO 的簽章**  
在這個範例中，具有字符 (officer1) 的 CO 需要至少兩個核准。以下範例命令示範兩個 CO 如何使用 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 在向其他 CO 取得最低數量的核准 (簽章) 後，必須在 HSM 上核准簽署的字符。

**在 HSM 上核准簽署的字符**

1. 建立字符核准檔案。如需詳細資訊，請參閱下列範例。

1. 使用下列命令來啟動 cloudhsm\_mgmt\_util 命令列工具。

   ```
   $ /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\_mgmt\_util 命令列工具來登入 HSM。接著 CO 會使用 **approveToken** 命令來核准字符，如下列範例所示。將 {{approval.txt}} 取代為字符核准檔案的名稱。  

```
aws-cloudhsm > approveToken {{approval.txt}}
approveToken success on server 0(10.0.2.14)
approveToken success on server 1(10.0.1.4)
```
此命令成功時，HSM 即已核准規定人數字符。若要檢查字符的狀態，請使用 **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 必須取得新的規定人數字符、向核准者取得新簽章，並在 HSM 上核准該新字符。

**注意**  
MofN 權杖僅在您目前的登入工作階段開啟時才有效。如果您登出 cloudhsm\_mgmt\_util 或網路連線中斷連線，則該權杖會失效。同樣地，授權的權杖只能在 cloudhsm\_mgmt\_util 中使用，而不能用於其他應用程式中進行身分驗證。

在下列範例命令中，CO 會在 HSM 上建立新使用者。

```
aws-cloudhsm > createUser CU user1 {{<password>}}
*************************CAUTION********************************
This is a CRITICAL operation, should be done on all nodes in the
cluster. AWS does NOT synchronize these changes automatically with the
nodes on which this operation is not executed or failed, please
ensure this operation is executed on all nodes in the cluster.
****************************************************************

Do you want to continue(y/n)? y
Creating User user1(CU) on 2 nodes
```

先前命令成功之後，後續的 **listUsers** 命令會顯示新使用者。

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

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

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

如果 CO 嘗試執行其他 HSM 使用者管理操作，會因為規定人數身分驗證錯誤而失敗，如以下範例所示。

```
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 必須取得新的規定人數字符、向核准者取得新的簽章，並在 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
```