

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# CloudHSM CLI AWS CloudHSM の使用に対してクォーラム認証を有効にしたユーザー管理
<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": []
}
```
トークンファイルは、次のもので構成されます。  
+ **service**: トークンが関連付けられているクォーラムサービスの識別子。
+ **approval\$1data**: HSM によって生成された base64 でエンコードされた raw データトークン。
+ **token**: base64 でエンコードされ、SHA-256 ハッシュされた approval\$1data のトークン
+ **signatures**: base64 でエンコードされた署名なしトークンの署名済みトークン (署名) の配列。承認者の各署名は JSON オブジェクトリテラルの形式になっています。

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

  各署名は、パブリックキーが HSM に登録されている承認者が、対応する RSA 2,048 ビットプライベートキーを使用した結果から作成されます。
生成されたユーザーサービスのクォーラムトークンが CloudHSM クラスターに存在していることは、**quorum token-sign list** コマンドを実行することによって確認できます。  

```
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)**
+ **[change-password](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 クラスター内で承認され、リクエストされたユーザー管理オペレーションを実行します。ユーザー管理オペレーションが成功するかどうかは、承認された有効なクォーラムトークンと有効なユーザー管理オペレーションの両方に左右されます。

管理者は、トークンを 1 つのオペレーションにのみ使用できます。そのオペレーションが成功すると、トークンは無効になります。別の 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 ユーザー管理オペレーションを実行するには、管理者は新しいクォーラムトークンを生成し、承認者から新しい署名を取得し、--approval 引数を使用して目的のユーザー管理オペレーションを実行して、ユーザー管理オペレーションの実行中に承認され使用されるクォーラムトークンを供給する必要があります。  

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