CloudHSM で特定の暗号機能のみを許可するために、他のユーザーとキーを共有する方法を教えてください。

最終更新日: 2019 年 5 月 28 日

あるユーザーがキーをラップできるようにし、別のユーザーがその同じキーだけをラップ解除できるようにする方法を教えてください。

簡単な説明

AWS CloudHSM クラスターの HSM に保存されているキーへのユーザーのアクセスを共有できます。ただしこれで、ユーザーはラップ、ラップ解除、暗号化、復号化などすべてにアクセス許可できるようになります。

解決方法

キーをエクスポートして、2 度インポートし直します。インポートしたキー属性は、ラップまたはラップ解除のアクセス許可によって変わります。つまりキーはさまざまなユーザーと共有され、ラップまたはラップ解除機能が実行されます。

cloudhsm_mgmt_util コマンドラインツールを使用して、クラスター内のすべてのユーザーを一覧表示する

cloudhsm_mgmt_util ツールの使用を開始する前に、「cloudhsm_mgmt_util の開始方法」をご参照ください。

次のような listUsers コマンドを実行します。

Number of users found:8

    User Id             User Type       User Name                          MofnPubKey    LoginFailureCnt         2FA
         1              CO              admin                                    NO               0               NO
         2              AU              app_user                                 NO               0               NO
         3              CO              officer1                                 NO               0               NO
         4              CO              crypto_user1                             NO               0               NO
         5              CO              crypto_user2                             NO               0               NO
         6              CU              crypto_user3                             NO               0               NO
         7              CU              crypto_user4                             NO               0               NO
         8              CU              crypto_user5                             NO               0               NO

crypto_user1 と crypto_user2 は crypto officer であるため、キーを所有できません。この例では、暗号ユーザーの crypto_user3、crypto_user4、crypto_user5 を使用しています。

key_mgmt_util コマンドラインツールとともに genSymKey コマンドを使用して、HSM で AES 対称キーを作成する

crypto_user3 を使用して HSM にログインし、key_mgmt_util ツールで暗号化と復号化のための対称キーを作成します。genSymKey コマンドを使用して、次のようなラベル masterKey を持つ AES 256 ビットキーを作成します。

Command:  genSymKey -t 31 -s 32 -l masterKey

        Cfm3GenerateSymmetricKey returned: 0x00 : HSM Return: SUCCESS

        Symmetric Key Created.  Key Handle: 786512

        Cluster Error Status
        Node id 3 and err state 0x00000000 : HSM Return: SUCCESS
        Node id 4 and err state 0x00000000 : HSM Return: SUCCESS

この例ではキーハンドル 786512 を使用しています。

genSymKey コマンドを使用してセッションキーを作成し、キーをディスクにラップし、HSM に戻ってラップ解除する

-sess パラメータを使用して、セッションキーを作成します。セッションウィンドウが開いたままで、接続が確立され、crypto_user3 がログインしたままであることを確認します。genSymKey コマンド (ラベル sessionKey を持つ) を使用して、後でこのキーを識別します。

Command:  genSymKey -t 31 -s 32 -sess -l sessionKey

        Cfm3GenerateSymmetricKey returned: 0x00 : HSM Return: SUCCESS

        Symmetric Key Created.  Key Handle: 786511

        Cluster Error Status
        Node id 3 and err state 0x00000000 : HSM Return: SUCCESS
        Node id 4 and err state 0x00000000 : HSM Return: SUCCESS

この例では、セッションキー 786511 はオペレーション wrapKeyunWrapKey を実行します。

注: セッションキーはセッション終了後に削除されます。

wrapKey コマンドを使用して、キーをディスクに書き込み、キーを秘密にする

対称キー 786512 をローカルドライブのファイルにエクスポートします。対称キー 786512 はセッションキー 786511 で暗号化します。この暗号化によって、対称キー 786512 を HSM の外部にテキストで格納することはありません。masterKey をローカルドライブにラップしたら、unWrapKey コマンドを使用して masterKey 786512 を HSM にインポートします。別のキーハンドルを使用して、HSM 内に masterKey のコピーを作成します。その後、masterKey コピーの属性を変更して、キーの使用方法を制限します。

この例では、sessionKey 786511 は masterKey 786512 をラップし、それをmaster.key ファイルとしてローカルドライブに保存します。

Command:  wrapKey -k 786512 -w 786511 -out master.key

        Key Wrapped.

        Wrapped Key written to file "master.key length 312
        
        Cfm2WrapKey returned: 0x00 : HSM Return: SUCCESS

注: ls コマンドを使用して、ローカルディレクトリ内のラップ済みキーを表示できます。

unWrapKey コマンドを使用して、新しいハンドルでキーを HSM にインポートする

キー master.keyunWrapKey コマンドを使用して、HSM にインポートします。この例では、新しいキーハンドル 786523 と 786524 を作成します。

重要: このステップを 2 度繰り返します。

Command:  unWrapKey -f master.key -w 786511

        Cfm3UnWrapKey returned: 0x00 : HSM Return: SUCCESS

        Key Unwrapped.  Key Handle: 786523

        Cluster Error Status
        Node id 3 and err state 0x00000000 : HSM Return: SUCCESS
        Node id 4 and err state 0x00000000 : HSM Return: SUCCESS

Command:  unWrapKey -f master.key -w 786511

        Cfm3UnWrapKey returned: 0x00 : HSM Return: SUCCESS

        Key Unwrapped.  Key Handle: 786524

        Cluster Error Status
        Node id 3 and err state 0x00000000 : HSM Return: SUCCESS
        Node id 4 and err state 0x00000000 : HSM Return: SUCCESS

キーハンドルを確認し、属性を割り当てる

cloudhsm_mgmt_util コマンドを使用して、crypto_user3 が所有するすべてのキーハンドルを確認します。この例では、masterKey 786512、インポート済みキーハンドル 786523、インポート済みキーハンドル 786524 に留意してください。crypto_user3 にユーザー ID 60 を入力して、すべてのキーのハッシュを計算しないことを示します。これにより、HSM で使用しているキーハンドルを確認できます。findAllKeys コマンドが表示するキーハンドルは、masterKey 786512 と同じ属性を持ち、暗号学的に同一です。

注: セッションキーハンドル 786511 はセッションの存続期間中しか残っていないため、表示されません。

aws-cloudhsm>findAllKeys 6 0
Keys on server 0(172.31.3.131):
Number of keys found 3
number of keys matched from start index 0::3
786512,786523,786524
findAllKeys success on server 0(172.31.3.131)
Keys on server 1(172.31.4.209):
Number of keys found 3
number of keys matched from start index 0::3
786512,786523,786524
findAllKeys success on server 1(172.31.4.209)

この例では、一方のキーハンドルをラップキー 786524 に割り当て、もう一方のキーハンドルをラップ解除キー 786523 に割り当てます。

コマンド setAttribute を持つ cloudhsm_mgmt_util を使用して、キーのラップ/ラップ解除属性を設定する

setAttribute コマンドには、キーハンドルと属性 ID が必要です。属性 ID はキー属性に相関する整数を表します。listAttibutes コマンドを使用して、これらを一覧表示します。キー 786523 を持つ aws-cloudhsm>setAttribute コマンドを使用して、OBJ_ATTR_WRAP 属性値を 2620 に設定します。

aws-cloudhsm>setAttribute 786523 262 0
*************************CAUTION********************************
This is a CRITICAL operation, should be done on all nodes in the
cluster. Cav server does NOT synchronize these changes 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
setAttribute success on server 0(172.31.3.131)
setAttribute success on server 1(172.31.4.209)

次に、キー 786524 を持つ setAttribute コマンドを使用して、OBJ_ATTR_UNWRAP 属性値を 2630 に設定します。OBJ_ATTR_WRAP 属性は 263 です。

aws-cloudhsm>setAttribute 786524 263 0
*************************CAUTION********************************
This is a CRITICAL operation, should be done on all nodes in the
cluster. Cav server does NOT synchronize these changes 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
setAttribute success on server 0(172.31.3.131)
setAttribute success on server 1(172.31.4.209)

これで、ラップとラップ解除の両方が可能な masterKey 786512、ラップのみ可能なキー 786524、ラップ解除のみが可能なキー 786523 が設定されました。

この例では、crypto_user3 はキー 786512、786523、786524を所有しており、キーを共有していません。

キーのラップをテストして、すべての属性が正しく設定されていることを確認する

wrapKey コマンドを key_mgmt_util コマンドラインツールを使用して、実行します。

ラップ解除用に割り当てたキーハンドル 786523 を使用して、masterKey 786512 をローカルドライブにラップします。

次に、ラップ用に割り当てたキーハンドル 786524 で masterKey 786512 をローカルドライブにラップします。

Command:  wrapKey -k 786512 -w 786523 -out wrapped.key

        Cfm2WrapKey returned: 0xb3

        HSM Error: This operation violates the current configured/FIPS policies

Command:  wrapKey -k 786512 -w 786524 -out wrapped.key

        Key Wrapped.

        Wrapped Key written to file "wrapped.key.test length 309

        Cfm2WrapKey returned: 0x00 : HSM Return: SUCCESS

この例では、HSM エラーに示されているように、ラップキー 786523 に対しコマンドが失敗します。HSMエラーは OBJ_ATTR_WRAP をラップする属性が 0 に設定されているために起こります。

getAttribute コマンドを実行して、キー属性値が false に設定されていることを確認する

getAttribute コマンドは key_mgmt_util ツールと cloudhsm_mgmt_util ツールを使用します。構文は両方のコマンドラインツールで異なりますが、それぞれ属性の結果を示します。この例では cloudhsm_mgmt_util を使用しています。これは、ファイルに保存するための属性が不要なためです。

aws-cloudhsm>getAttribute 786523 262
Attribute Value on server 0(172.31.3.131):
OBJ_ATTR_WRAP
0x00000000

Attribute Value on server 1(172.31.4.209):
OBJ_ATTR_WRAP
0x00000000

キーを他のユーザーと共有する

cloudhsm_mgm_util コマンドを使用して、crypto_user4 (ユーザー ID 7 を持つ) と crypto_user5 (ユーザー ID 8 を持つ) とキーを共有します。ラップ解除キー 786523 を crypto_user4 に、ラップキー 786524 を crypto_user5 と共有します。これでユーザー crypto_user4 と crypto_user5 は暗号化機能にキーを使用できるようになりますが、キーの属性を削除、エクスポート、共有、共有解除、変更することはできません。またこれにより、ユーザーの crypto_user4 と crypto_user5 はキー属性を割り当てるときに、crypto_user3 が指定した操作にのみキーを使用できるようになります。

aws-cloudhsm>shareKey 786523 7 1
*************************CAUTION********************************
This is a CRITICAL operation, should be done on all nodes in the
cluster. Cav server does NOT synchronize these changes 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
shareKey success on server 0(172.31.3.131)
shareKey success on server 1(172.31.4.209)


aws-cloudhsm>shareKey 786524 8 1
*************************CAUTION********************************
This is a CRITICAL operation, should be done on all nodes in the
cluster. Cav server does NOT synchronize these changes 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
shareKey success on server 0(172.31.3.131)
shareKey success on server 1(172.31.4.209)

ディスクと HSM の間で wrapKey コマンドを使用して、ラップとラップ解除の機能をテストする

crypto_user4 (ユーザーID 7) が crypto_user3 でラップされたキーをラップ解除できるかどうかをテストします。

キー crypto_user3 と crypto_user_4 は暗号的には同じもので、ラップとラップ解除の機能を別々に実行するために使用します。

Command:  unWrapKey -f wrapped.key -w 786523

        Cfm3UnWrapKey returned: 0x00 : HSM Return: SUCCESS

        Key Unwrapped.  Key Handle: 1048669

        Cluster Error Status
        Node id 3 and err state 0x00000000 : HSM Return: SUCCESS
        Node id 4 and err state 0x00000000 : HSM Return: SUCCESS

この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合