CloudHSM CLI を使用して AWS CloudHSM Crypto User のクォーラム認証を設定する
これらのトピックでは、Crypto User によるクォーラム認証を CloudHSM に設定する方法について説明します。これらの手順は初期セットアップ時に一度だけ実行します。その後のキー管理およびキー使用については、CloudHSM CLI を使用した AWS CloudHSM のクォーラム認証を有効にしたキー管理およびキー使用 を参照してください。
前提条件
CloudHSM CLI に精通していること
ステップ 1. 署名のためのキーの作成と登録
クォーラム認証を使用する場合、各 Crypto User が以下のすべてのステップを実行する必要があります。
RSA キーペアの作成
様々なキーペアを作成、保護する方法があります。次の例では、OpenSSL
例 — OpenSSL でプライベートキーを作成する
次の例は、OpenSSL を使用して 2,048 ビットの RSA キーを作成する方法を示しています。この例を使用するには、<crypto_user1.key> を、キーの保存先のファイル名に置き換えてください。
$openssl genrsa -out<crypto_user1.key>Generating RSA private key, 2048 bit long modulus .....................................+++ .+++ e is 65537 (0x10001)
次に、作成したプライベートキーを使用してパブリックキーを生成します。
例 — OpenSSL でパブリックキーを作成する
以下の例は、OpenSSL を使用して先ほど作成したプライベートキーからパブリックキーを作成する方法を示しています。
$openssl rsa -in crypto_user1.key -outform PEM -pubout -out crypto_user1.pubwriting RSA key
登録トークンの作成
トークンを作成し、前のステップで生成したプライベートキーを使用して署名します。
登録トークンの作成
-
CloudHSM CLI を起動するには、次のコマンドを使用します。
-
quorum token-sign generate コマンドを実行して登録トークンを作成します。
aws-cloudhsm >quorum token-sign generate --service registration --token /path/tokenfile{ "error_code": 0, "data": { "path": "/path/tokenfile" } } -
quorum token-sign generate コマンドは、指定されたファイルパスに登録トークンを生成します。トークンファイルを調査します。
$cat /path/tokenfile{ "version": "2.0", "tokens": [ { "approval_data":<approval data in base64 encoding>, "unsigned":<unsigned token in base64 encoding>, "signed": "" } ] }トークンファイルは、次のもので構成されます。
approval_data: base64 でエンコードされランダム化されたデータトークン。raw データが最大 245 バイトを超えないもの。
unsigned: base64 でエンコードされ、SHA256 ハッシュされた approval_data のトークン。
signed: OpenSSL で以前に生成された RSA 2,048 ビットのプライベートキーを使用した、署名されていないトークンの base64 でエンコードされた署名付きトークン (署名)。
プライベートキーを使用して署名なしトークンに署名し、プライベートキーへのアクセス権があることを示します。AWS CloudHSM クラスターのクォーラムユーザーとして Crypto User を登録する場合、署名とパブリックキーがすべて入力された登録トークンファイルが必要です。
署名なし登録トークンへ署名する
base64 でエンコードされた署名なしトークンをデコードし、バイナリファイルに入れます。
$echo -n '6BMUj6mUjjko6ZLCEdzGlWpR5sILhFJfqhW1ej3Oq1g=' | base64 -d > crypto_user.binOpenSSL とプライベートキーを使用して現在の署名なしバイナリ登録トークンに署名し、バイナリ署名ファイルを作成します。
$openssl pkeyutl -sign \ -inkey crypto_user1.key \ -pkeyopt digest:sha256 \ -keyform PEM \ -in crypto_user.bin \ -out crypto_user.sig.bin-
バイナリ署名を base64 にエンコードします。
$base64 -w0 crypto_user.sig.bin > crypto_user.sig.b64 -
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 でパブリックキーを登録する
キーを作成したら、Crypto User はパブリックキーを AWS CloudHSM クラスターに登録する必要があります。
-
CloudHSM CLI を起動します。
-
パブリックキーを登録する Crypto User としてサインインします。
aws-cloudhsm >login --username crypto_user1 --role crypto-userEnter password: { "error_code": 0, "data": { "username": "crypto_user1", "role": "crypto-user" } } -
CloudHSM CLI を使用してユーザーのトークン署名クォーラム戦略を登録する を使用してパブリックキーを登録します。詳細については、次の例を参照するか、または help user change-quorum token-sign register コマンドを使用してください。
例 - AWS CloudHSM クラスターのパブリックキーを登録する
以下の例では、CloudHSM CLI で user change-quorum token-sign register コマンドを使用して、Crypto User のパブリックキーを HSM に登録する方法を示しています。このコマンドを使用するには、Crypto User が HSM にログインしている必要があります。以下の値を自分の値に置き換えてください。
aws-cloudhsm >user change-quorum token-sign register --public-key</path/crypto_user.pub>--signed-token</path/tokenfile>{ "error_code": 0, "data": { "username": "crypto_user1", "role": "crypto-user" } }注記
/path/crypto_user.pub: パブリックキー PEM ファイルへのファイルパス
必須: はい
/path/token_file: ユーザーのプライベートキーによって署名されたトークンを含むファイルパス
必須: はい
-
すべての Crypto User がパブリックキーを登録すると、user list コマンドの出力にあるクォーラムフィールドに、有効になっているクォーラム戦略が表示されます。
この例では、AWS CloudHSM クラスターに 2 つの HSM があります。user list コマンドの次の出力が示すように、両方の HSM の Crypto User は同じです。ユーザー作成の詳細については、CloudHSM CLI によるユーザー管理 を参照してください。
aws-cloudhsm >user list{ "error_code": 0, "data": { "users": [ { "username": "admin", "role": "admin", "locked": "false", "mfa": [], "quorum": [], "cluster-coverage": "full" }, { "username": "crypto_user1", "role": "crypto-user", "locked": "false", "mfa": [], "quorum": [ { "strategy": "token-sign", "status": "enabled" } ], "cluster-coverage": "full" }, { "username": "crypto_user2", "role": "crypto-user", "locked": "false", "mfa": [], "quorum": [ { "strategy": "token-sign", "status": "enabled" } ], "cluster-coverage": "full" }, { "username": "crypto_user3", "role": "crypto-user", "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" } ] } }
ステップ 2. キー生成時にキークォーラム値を設定する
クォーラム認証を使用するには、Crypto User が HSM にログインし、関連付けられたキークォーラム値を設定する必要があります。これは、HSM ユーザー管理/使用オペレーションを実行するために必要な Crypto User 承認の最小数です。キー管理またはキーの使用に関連するキーコマンドの詳細については、サポートされているサービスとタイプ を参照してください。
キークォーラム値が設定されたキーペアを生成する
-
CloudHSM CLI を起動するには、次のコマンドを使用します。
-
CloudHSM CLI を使用して、Crypto User としてログインします。
aws-cloudhsm >login --username crypto_user1 --role crypto-userEnter password: { "error_code": 0, "data": { "username": "crypto_user1", "role": "crypto-user" } }
この例では、キー管理オペレーションとキー使用オペレーションの両方に対してクォーラム値 2 が設定された RSA キーペアを生成します。クォーラム値として設定できるのは、0 ~ 8 の範囲で、HSM 上の Crypto User の総数まで選択できます。この例では、HSM には 3 名の Crypto User が存在するため、設定可能な最大値は 3 になります。この例ではキー生成時に <crypto_user2> とキーを共有している点に注意してください。さらに、パブリックキーにはクォーラム値は存在しないことにも注意が必要です。
aws-cloudhsm >key generate-asymmetric-pair rsa \ --public-exponent 65537 \ --modulus-size-bits 2048 \ --public-label rsa-public-key-example \ --private-label rsa-private-key-example \ --public-attributes verify=true \ --private-attributes sign=true --share-crypto-users crypto_user2 \ --manage-private-key-quorum-value 2 \ --use-private-key-quorum-value 2{ "error_code": 0, "data": { "public_key": { "key-reference": "0x0000000000640006", "key-info": { "key-owners": [ { "username": "crypto_user", "key-coverage": "full" } ], "shared-users": [], "key-quorum-values": { "manage-key-quorum-value": 0, "use-key-quorum-value": 0 }, "cluster-coverage": "full" }, "attributes": { "key-type": "rsa", "label": "rsa-public-key-example", "id": "0x", "check-value": "0x218f50", "class": "public-key", "encrypt": false, "decrypt": false, "token": true, "always-sensitive": false, "derive": false, "destroyable": true, "extractable": true, "local": true, "modifiable": true, "never-extractable": false, "private": true, "sensitive": false, "sign": false, "trusted": false, "unwrap": false, "verify": true, "wrap": false, "wrap-with-trusted": false, "key-length-bytes": 512, "public-exponent": "0x010001", "modulus": "0xbdf471a3d2a869492f51c767bece8780730ae6479a9a75efffe7cea3594fb28ca518630e7b1d988b45d2fedc830b7ab848448c24c476cacb73d1523278aed289551e07af0fbfabe4811cc4601678bd097b5c0a578249ed1eb0e4878a80ba1ed85ac46eb1fee60d2a8bdd322075196dec4b57fa2cd82af44ad068115ac219bc073ec65c19c97bd883cf26931408d7bc51e237626b8b9b8f2485425907a0eb42f2f4c40018c8dac7ceeb1b646305a2e537ab904346883e41d568264abee0137048e4657d2cf72801810f3212f662b7a7ae134848b922771f6a30aa76718008d9cc74ff8ddcd8d867b05c3d40020d1514999af96889911467191b9f390d8de07f83", "modulus-size-bits": 2048 } }, "private_key": { "key-reference": "0x0000000000640007", "key-info": { "key-owners": [ { "username": "crypto_user", "key-coverage": "full" } ], "shared-users": [ { "username": "crypto_user2", "key-coverage": "full" } ], "key-quorum-values": { "manage-key-quorum-value": 2, "use-key-quorum-value": 2 }, "cluster-coverage": "full" }, "attributes": { "key-type": "rsa", "label": "rsa-private-key-example", "id": "0x", "check-value": "0x218f50", "class": "private-key", "encrypt": false, "decrypt": false, "token": true, "always-sensitive": true, "derive": false, "destroyable": true, "extractable": true, "local": true, "modifiable": true, "never-extractable": false, "private": true, "sensitive": true, "sign": true, "trusted": false, "unwrap": false, "verify": false, "wrap": false, "wrap-with-trusted": false, "key-length-bytes": 1216, "public-exponent": "0x010001", "modulus": "0xbdf471a3d2a869492f51c767bece8780730ae6479a9a75efffe7cea3594fb28ca518630e7b1d988b45d2fedc830b7ab848448c24c476cacb73d1523278aed289551e07af0fbfabe4811cc4601678bd097b5c0a578249ed1eb0e4878a80ba1ed85ac46eb1fee60d2a8bdd322075196dec4b57fa2cd82af44ad068115ac219bc073ec65c19c97bd883cf26931408d7bc51e237626b8b9b8f2485425907a0eb42f2f4c40018c8dac7ceeb1b646305a2e537ab904346883e41d568264abee0137048e4657d2cf72801810f3212f662b7a7ae134848b922771f6a30aa76718008d9cc74ff8ddcd8d867b05c3d40020d1514999af96889911467191b9f390d8de07f83", "modulus-size-bits": 2048 } } } }
クォーラム制御を使用してキーを生成する場合、キーには、キーの最大クォーラム値と同じ数以上のユーザーを関連付ける必要があります。関連付けられるユーザーには、キー所有者と、そのキーが共有されている Crypto User が含まれます。キーを共有すべき最小ユーザー数を決定するには、キー使用クォーラム値とキー管理クォーラム値のうち大きい方のクォーラム値を取得し、デフォルトでキーに関連付けられているキー所有者を考慮して 1 を差し引きます。キーをさらに多くのユーザーと共有するには、CloudHSM CLI を使用してキーを共有する コマンドを使用します。
キー生成時に、必要な人数のユーザーとキーを共有しないと、以下に示すように失敗します。
aws-cloudhsm >key generate-asymmetric-pair rsa \ --public-exponent 65537 \ --modulus-size-bits 2048 \ --public-label rsa-public-key-example \ --private-label rsa-private-key-example \ --public-attributes verify=true \ --private-attributes sign=true --share-crypto-users crypto_user2 crypto_user3 \ --manage-private-key-quorum-value 3 \ --use-private-key-quorum-value 4{ "error_code": 1, "data": "Invalid quorum value provided." }