

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

# CloudHSM CLI AWS CloudHSM を使用するためのクォーラム認証を有効にしたキー管理と使用状況
<a name="key-quorum-auth-chsm-cli-crypto-user"></a>

 AWS CloudHSM クラスターのクォーラム認証を設定した後、キーにクォーラム値が関連付けられている場合、暗号化ユーザーは HSM キー管理または使用操作を単独で実行できません。本トピックでは、Crypto User が HSM のキー管理オペレーションまたはキー使用オペレーションを実行するための一時的なトークンを取得する方法について説明します。

**注記**  
各クォーラムトークンは 1 回のオペレーションで有効です。そのオペレーションが成功すると、トークンは無効となり、Crypto User は新しいトークンを取得する必要があります。クォーラムトークンは、現在のログインセッション中のみ有効です。CloudHSM CLI からログアウトするか、ネットワークが切断された場合、トークンは無効になり、新しいトークンを取得する必要があります。CloudHSM トークンは CloudHSM CLI 内でのみ使用できます。別のアプリケーションの認証に使用することはできません。

次の例は、クォーラム認証が設定された後、Crypto User がクォーラムが関連付けられたキーを使用して HSM 上で署名を作成しようとした際の出力例です。このコマンドは `Quorum Failed` エラーで失敗します。これは、クォーラム認証が失敗したことを意味します。

```
aws-cloudhsm > crypto sign rsa-pkcs --key-filter attr.label=rsa-private-key-example --hash-function sha256 --data YWJjMTIz
{
  "error_code": 1,
  "data": "Quorum Failed"
}
```

Crypto User が HSM 上でキー管理オペレーションまたはキー使用オペレーションを実行するための一時的なトークンを取得するには、次の作業を完了する必要があります。

**Topics**
+ [ステップ 1. クォーラムトークンの取得](#key-quorum-admin-gen-token-chsm-cli)
+ [ステップ 2. 承認する Crypto User から署名を取得する](#key-quorum-crypto-user-get-approval-signatures-chsm-cli)
+ [ステップ 3. CloudHSM クラスターでトークンを承認し、オペレーションを実行する](#key-quorum-crypto-user-approve-token-chsm-cli)

## ステップ 1. クォーラムトークンの取得
<a name="key-quorum-admin-gen-token-chsm-cli"></a>

1. CloudHSM CLI を起動します。

------
#### [ Linux ]

   ```
   $ /opt/cloudhsm/bin/cloudhsm-cli interactive
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\cloudhsm-cli.exe" interactive
   ```

------

1. Crypto User としてクラスターにログインします。

   ```
   aws-cloudhsm > login --username <crypto_user1> --role crypto-user --password password123
   ```

   この例では、`crypto_user1` を `crypto-user` ロールで CloudHSM CLI にサインインさせています。以下の値を自分の値に置き換えてください。

   ```
   {
     "error_code": 0,
     "data": {
       "username": "crypto_user1",
       "role": "crypto-user"
     }
   }
   ```

1. **quorum token-sign generate** コマンドを使用してクォーラムトークンを生成します。

   次のコマンドでは、`key-usage` は生成するトークンを使用する*サービス名*を示します。この場合、トークンは key-usage オペレーション (`key-usage` サービス) 用です。この例では、`--filter` フラグを使用して、特定のキーにトークンを関連付けています。

   ```
   aws-cloudhsm > quorum token-sign generate --service key-usage --token </path/crypto_user1.token> --filter attr.label=rsa-private-key-example
   {
     "error_code": 0,
     "data": {
       "path": "/home/crypto_user1.token"
     }
   }
   ```

   この例では、ユーザー名 `crypto_user1` の Crypto User のクォーラムトークンを取得し、そのトークンを `crypto_user1.token` という名前のファイルに保存します。この例のコマンドを使用するには、以下の値を独自のものに置き換えてください。

   **quorum token-sign generate** コマンドは、指定されたファイルパスでキー使用サービスのクォーラムトークンを生成します。トークンファイルは以下のように検査できます。

   ```
   $ cat </path/crypto_user1.token>
   {
     "version": "2.0",
     "service": "key-usage",
     "key_reference": "0x0000000000680006",
     "approval_data": "AAIABQAAABkAAAAAAGgABi5CDa9x9VyyRIaFbkSrHgJjcnlwdG9fdXNlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnPQBLAAAAAAAAAAAAAgAFAAAAGgAAAAAAaAAGQvd2qKY+GJj8gXo9lKuANGNyeXB0b191c2VyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGc9AEsAAAAAAAAAAA==",
     "token": "5GlgoWOlQU4fw4QIlbxkPGZVOVoDugFGuSKE/k67ncM=",
     "signatures": []
   }
   ```

   トークンファイルは、次のもので構成されます。
   + **service**: トークンが関連付けられているクォーラムサービスの識別子。
   + **key\$1reference**: このクォーラムトークンが関連付けられているキーの識別子。
   + **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 ビットプライベートキーを使用した結果から作成されます。

1. 新しいユーザーサービスのクォーラムトークンを検証します。**quorum token-sign list** コマンドを実行すると、そのトークンが CloudHSM 上に存在することが確認できます。

   ```
   aws-cloudhsm > quorum token-sign list
   {
     "error_code": 0,
     "data": {
       "tokens": [
         {
           "username": "crypto_user",
           "service": "key-usage",
           "key-reference": "0x0000000000680006",
           "minimum-token-count": 2
         }
       ]
     }
   }
   ```

   `minimum-token-count` は、クラスター内の 1 台の HSM から取得される、ユーザー名、サービス、key-reference に対応するキートークンの使用可能な最小数をクラスター全体として集約したビューを示します。

   たとえば、2 台構成の HSM クラスターを想定します。クラスター内の一方の HSM から、ユーザー `crypto_user1` によりキー参照 `0x0000000000680006` に対して生成された key-usage トークンを 2 個取得し、さらにもう一方の HSM から、ユーザー `crypto_user1` によりキー参照 `0x0000000000680006` に対して生成された key-usage トークンを 1 個取得したとします。この場合、`"minimum-token-count": 1` が表示されます。

## ステップ 2. 承認する Crypto User から署名を取得する
<a name="key-quorum-crypto-user-get-approval-signatures-chsm-cli"></a>

クォーラムトークンを保持している Crypto User は、他の Crypto User からそのトークンの承認を得る必要があります。承認を与える Crypto User は、自身の署名キーを使用して、HSM の外部でトークンに対して暗号学的署名を行います。

トークンの署名にはさまざまな方法が使用されます。次の例は、[OpenSSL](https://www.openssl.org/) を使用してトークンに署名する方法を示しています。別の署名ツールを使用する場合は、そのツールが Crypto User のプライベートキー (署名キー) を使用して、トークンの SHA-256 ダイジェストに署名することを必ず確認してください。

この例では、トークン (`crypto-user`) を持つ Crypto User に少なくとも 2 つの承認が必要です。以下のコマンド例では、2 人の Crypto User が OpenSSL を使用してトークンに暗号で署名する方法を示します。

1. base64 でエンコードされた署名なしトークンをデコードし、バイナリファイルに入れます。

   ```
   $echo -n '5GlgoWOlQU4fw4QIlbxkPGZVOVoDugFGuSKE/k67ncM=' | base64 -d > crypto_user1.bin
   ```

1. ユーザーサービス用のバイナリ形式のクォーラム未署名トークンに対して、承認者のプライベートキーを使用して OpenSSL で署名し、バイナリ署名ファイルを作成します。

   ```
   $openssl pkeyutl -sign \
   -inkey crypto_user1.key \
   -pkeyopt digest:sha256 \
   -keyform PEM \
   -in crypto_user1.bin \
   -out crypto_user1.sig.bin
   ```

1. バイナリ署名を base64 にエンコードします。

   ```
   $ base64 -w0 crypto_user1.sig.bin > crypto_user1.sig.b64
   ```

1. 承認者署名用に以前に指定した JSON オブジェクトリテラル形式を使用して、base64 でエンコードされた署名をコピーしてトークンファイルに貼り付けます。

   ```
   {
     "version": "2.0",
     "service": "key-usage",
     "key_reference": "0x0000000000680006",
     "approval_data": "AAIABQAAABkAAAAAAGgABi5CDa9x9VyyRIaFbkSrHgJjcnlwdG9fdXNlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnPQBLAAAAAAAAAAAAAgAFAAAAGgAAAAAAaAAGQvd2qKY+GJj8gXo9lKuANGNyeXB0b191c2VyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGc9AEsAAAAAAAAAAA==",
     "token": "5GlgoWOlQU4fw4QIlbxkPGZVOVoDugFGuSKE/k67ncM=",
     "signatures": [
       {
         "username": "crypto_user1",
         "role": "crypto-user",
         "signature": "wa7aPzmGwBjcEoZ6jAzYASp841AfgOvcI27Y/tGlCj1E9DawnFw5Uf0IJT2Ca7T5XD2ThVkUi0B+dhAomdqYNl6aUUFrJyH9GBJ+E0PmA5jNVm25tzeRWBJzneTg4/zTeE2reNqrHFHicWnttQLe9jS09J1znuDGWDe0HaBKWUaz2gUInJRqmeXDsZYdSvZksrqUH5dci/RsaDE2+tGiS9g0RcIkFbsPW4HpGe2e5HVzGsqrV8O3PKlYQv6+fymfcNTTuoxKcHAkOjpl43QSuSIu2gVq7KI8mSmmWaPJL47NPjmcBVB5vdEQU+oiukaNfLJr+MoDKzAvCGDg4cDArg=="
       },
       {
         "username": "crypto_user2",
         "role": "crypto-user",
         "signature": "wa7aPzmGwBjcEoZ6jAzYASp841AfgOvcI27Y/tGlCj1E9DawnFw5Uf0IJT2Ca7T5XD2ThVkUi0B+dhAomdqYNl6aUUFrJyH9GBJ+E0PmA5jNVm25tzeRWBJzneTg4/zTeE2reNqrHFHicWnttQLe9jS09J1znuDGWDe0HaBKWUaz2gUInJRqmeXDsZYdSvZksrqUH5dci/RsaDE2+tGiS9g0RcIkFbsPW4HpGe2e5HVzGsqrV8O3PKlYQv6+fymfcNTTuoxKcHAkOjpl43QSuSIu2gVq7KI8mSmmWaPJL47NPjmcBVB5vdEQU+oiukaNfLJr+MoDKzAvCGDg4cDArg=="
       }
     ]
   }
   ```

## ステップ 3. CloudHSM クラスターでトークンを承認し、オペレーションを実行する
<a name="key-quorum-crypto-user-approve-token-chsm-cli"></a>

Crypto User が必要な承認および署名を取得すると、そのトークンをキー管理オペレーションまたはキー使用オペレーションとともに CloudHSM クラスターに提供できます。

キーのオペレーションが、クォーラムトークンに関連付けられた適切なクォーラムサービスに対応していることを必ず確認してください。詳細については、[サポートされているサービスとタイプ](key-quorum-auth-chsm-cli-service-names.md) を参照してください。

トランザクション中、トークンは AWS CloudHSM クラスター内で承認され、リクエストされたキーオペレーションを実行します。キーオペレーションが成功するには、承認済みで有効なクォーラムトークンと有効なキーオペレーションの両方が必要です。

**Example RSA-PKCS メカニズムを使用して署名を生成する**  
次の例では、ログイン中の Crypto User が、HSM 上のキーを使用して署名を作成します。  

```
aws-cloudhsm > crypto sign rsa-pkcs --key-filter attr.label=rsa-private-key-example --hash-function sha256 --data YWJjMTIz --approval /path/crypto_user1.token
      
{
  "error_code": 0,
  "data": {
    "key-reference": "0x0000000000640007",
    "signature": "h6hMqXacBrT3x3MXV13RXHdQno0+IQ6iy0kVrGzo23+eoWT0ZZgrSpBCu5KcuP6IYYHw9goQ5CfPf4jI1nO5m/IUJtF1A1lmcz0HjEy1CJ7ICXNReDRyeOU8m43dkJzt0OUdkbtkDJGAcxkbKHLZ02uWsGXaQ8bOKhoGwsRAHHF6nldTXquICfOHgSd4nimObKTqzUkghhJW5Ot5oUyLMYP+pZmUS38ythybney94Wj6fzYOER8v7VIY5ijQGa3LfxrjSG4aw6QijEEbno5LSf18ahEaVKmVEnDBL54tylCJBGvGsYSY9HNhuJoHPgiDL/TDd2wfvP4PaxbFRyyHaw=="
  }
}
```
Crypto User が同じトークンを使ってもう一度 HSM のキー使用オペレーションを試みると、その操作は失敗します。  

```
aws-cloudhsm > crypto sign rsa-pkcs --key-filter attr.label=rsa-private-key-example --hash-function sha256 --data YWJjMTIz --approval /home/crypto_user1.token
{
  "error_code": 1,
  "data": "Quorum approval is required for this operation"
}
```
別の HSM キーオペレーションを実行するには、Crypto User は新しいクォーラムトークンを生成し、承認者から新しい署名を取得し、--approval 引数でクォーラムトークンを指定して目的のキーオペレーションを実行する必要があります。  
利用可能なトークンを確認するには、**quorum token-sign list** を使用します。次の例では、Crypto User が承認済みトークンを持っていないことが示されています。  

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