カスタムキーストアのトラブルシューティング - AWS Key Management Service

カスタムキーストアのトラブルシューティング

カスタムキーストアは、有用で優れた復元力を持つように設計されています。ただし、カスタムキーストアをオペレーション可能にするために修復する必要のあるエラー条件がいくつかあります。

使用できない KMS キーを修正するには

カスタムキーストアでの AWS KMS keys のキーステータスは通常 Enabled です。すべての KMS キーと同様、カスタムキーストアで KMS キーを無効にするか、削除するようにスケジュールすると、キーステータスが変更されます。ただし、他の KMS キーとは異なり、カスタムキーストアの KMS キーには、Unavailableキーステータスもあります。

Unavailable のキーステータスは、KMS キーが AWS CloudHSM クラスターから意図的に切断されたカスタムキーストアに存在し、再接続の試行 (実行した場合) が失敗したことを示します。KMS キーは使用できませんが、KMS キーを表示および管理することはできます。ただし、暗号化オペレーションで使用することはできません。

KMS キーのキーステータスを確認するには、[Customer managed keys] (カスタマーマネージドキー) ページで、KMS キーの [Status] (ステータス) フィールドを表示します。または、 DescribeKey オペレーションを使用して、レスポンスの KeyState 要素を表示します。詳細については、「キーの表示」を参照してください。

切断されたカスタムキーストアの KMS キーは、Unavailable または PendingDeletion のキーステータスとなります。カスタムキーストアが AWS CloudHSM クラスターから切断されている場合でも、カスタムキーストアからの削除がスケジュールされている KMS キーは、Pending Deletion のキーステータスです。これにより、カスタムキーストアに再接続することなく、スケジュールされたキーの削除をキャンセルできます。

使用できない KMS キーを修正するには、カスタムキーストアを再接続します。カスタムキーストアを再接続すると、カスタムキーストア内の KMS キーのキーステータスは、EnabledDisabled などの以前のステータスに自動的に復元されます。削除保留中の KMS キーは PendingDeletion ステータスのままです。ただし、問題が解決しない間は、使用できない KMS キーを有効および無効にしても、キーステータスは変更されません。有効または無効のアクションは、キーが使用可能になったときにのみ適用されます。

接続の失敗に関するヘルプについては、「接続障害の修復方法」を参照してください。

失敗した KMS キーを修正するには

カスタムキーストアで KMS キーを作成して使用する際の問題は、カスタムキーストア、関連付けられた AWS CloudHSM クラスター、KMS キー、またはそのキーマテリアルの問題に起因する可能性があります。

カスタムキーストアが AWS CloudHSM クラスターから切断されると、カスタムキーストア内の KMS キーのキーステータスは Unavailable になります。切断されたカスタムキーストアの KMS キーを作成するすべてのリクエストは、CustomKeyStoreInvalidStateException の例外を返します。データキーを暗号化、復号、再暗号化、または生成するすべてのリクエストは、KMSInvalidStateException 例外を返します。問題を修正するには、カスタムキーストアを再接続します

ただし、キーステータスが Enabled でカスタムキーストアの接続ステータスが Connected であっても、暗号化オペレーションでカスタムキーストアの KMS キーを使用する試みは失敗する可能性があります。これは、以下のいずれかの条件によって発生する可能性があります。

  • KMS キーのキーマテリアルが、関連付けられた AWS CloudHSM クラスターから削除された可能性があります。調査するには、KMS キーのキーマテリアルのキーハンドルを探し、必要に応じてキーマテリアルの復旧を試みます

  • すべての HSM は、カスタムキーストアに関連付けられた AWS CloudHSM クラスターから削除されました。暗号化オペレーションでカスタムキーストアの KMS キーを使用するには、その AWS CloudHSM クラスターに 1 つ以上のアクティブな HSM が含まれている必要があります。AWS CloudHSM クラスター内の HSM の数と状態を確認するには、AWS CloudHSM コンソールDescribeClusters オペレーションを使用します。HSM をクラスターに追加するには、AWS CloudHSM コンソールまたは CreateHsm オペレーションを使用します。

  • カスタムキーストアに関連付けられた AWS CloudHSM クラスターが削除されました。この問題を解決するには、元のクラスターのバックアップ、または元のクラスターの作成に使用されたバックアップなど、元のクラスターに関連するバックアップからクラスターを作成します。次に、カスタムキーストアの設定で、クラスター ID を編集します。手順については、「KMS キーの削除されたキーマテリアルを復旧するには」を参照してください。

接続障害の修復方法

カスタムキーストアを AWS CloudHSM クラスター接続しようとしたが、オペレーションが失敗した場合、カスタムキーストアの接続ステータスは FAILED に変わります。カスタムキーストアのステータスを検索するには、AWS Management Console または ConnectionState 要素で、カスタムキーストアの [Status] (ステータス) 列の DescribeCustomKeyStores レスポンスを表示します。

また、簡単に検出できるクラスター設定エラーが原因で接続の試行がすぐに失敗することがあります。この場合、[Status] (ステータス) または ConnectionStateDISCONNECTED のままになります。これらのエラーは、試行が失敗した理由を説明するエラーメッセージまたは 例外 を返します。例外の説明とクラスターの要件を確認して問題を修正し、必要に応じてカスタムキーストアを更新して、接続を再試行してください。

接続ステータスが FAILED の場合、DescribeCustomKeyStores オペレーションを実行し、応答の ConnectionErrorCode 要素を確認します。

注記

カスタムキーストアの接続ステータスが FAILED の場合は、再接続を試みる前に カスタムキーストアを切断する必要があります。FAILED 接続ステータスでカスタムキーストアに接続することはできません。

暗号化オペレーションの失敗に対応するには

カスタムキーストアで KMS キーを使用する暗号化オペレーションは、次のようなエラーで失敗することがあります。

KMSInvalidStateException: KMS cannot communicate with your CloudHSM cluster

これは HTTPS 400 エラーですが、一時的なネットワークの問題が原因である可能性があります。対応するには、まずリクエストを再試行します。それでも失敗する場合は、ネットワークコンポーネントの設定を調べます。このエラーはほとんどの場合、発信トラフィックをブロックしているファイアウォールルールや VPC セキュリティグループルールなど、ネットワークコンポーネントの誤った設定が原因です。

無効な kmsuser 認証情報の修正方法

カスタムキーストアを接続すると、AWS KMS が関連付けられた AWS CloudHSM クラスターに kmsuser Crypto User (CU) としてログインします。カスタムキーストアが切断されるまで、ログインしたままになります。DescribeCustomKeyStores 応答は次の例に示すように、FAILEDConnectionState、および INVALID_CREDENTIALSConnectionErrorCode 値を示しています。

カスタムキーストアを切断して kmsuser パスワードを変更すると、AWS KMS は kmsuser CU アカウントの認証情報で AWS CloudHSM クラスターにログインできなくなります。その結果、カスタムキーストアへの接続はすべて失敗します。DescribeCustomKeyStores レスポンスは、次の例に示すように、INVALID_CREDENTIALSFAILEDConnectionErrorCode の値の ConnectionState を示します。

$ aws kms describe-custom-key-stores --custom-key-store-name ExampleKeyStore { "CustomKeyStores": [ "CloudHsmClusterId": "cluster-1a23b4cdefg", "ConnectionErrorCode": "INVALID_CREDENTIALS" "CustomKeyStoreId": "cks-1234567890abcdef0", "CustomKeyStoreName": "ExampleKeyStore", "TrustAnchorCertificate": "<certificate string appears here>", "CreationDate": "1.499288695918E9", "ConnectionState": "FAILED" ], }

また、誤ったパスワードでクラスターにログインしようとして 5 回失敗すると、AWS CloudHSM はユーザーアカウントをロックします。このクラスターにログインするには、アカウントのパスワードを変更する必要があります。

AWS KMS が kmsuser CU としてクラスターにログインしようとしたときにロックアウトレスポンスを受け取ると、カスタムキーストアの接続リクエストは失敗します。DescribeCustomKeyStores 応答には、次の例に示すように、FAILEDConnectionState、および USER_LOCKED_OUTConnectionErrorCode 値が含まれます。

$ aws kms describe-custom-key-stores --custom-key-store-name ExampleKeyStore { "CustomKeyStores": [ "CloudHsmClusterId": "cluster-1a23b4cdefg", "ConnectionErrorCode": "USER_LOCKED_OUT" "CustomKeyStoreId": "cks-1234567890abcdef0", "CustomKeyStoreName": "ExampleKeyStore", "TrustAnchorCertificate": "<certificate string appears here>", "CreationDate": "1.499288695918E9", "ConnectionState": "FAILED" ], }

これらの条件を修復するには、次の手順を実行します。

  1. カスタムキーストアを切断します

  2. DescribeCustomKeyStores オペレーションを実行し、レスポンスの ConnectionErrorCode 要素の値を表示します。

    • ConnectionErrorCode の値が INVALID_CREDENTIALS の場合は、kmsuser アカウントの現在のパスワードを特定します。必要に応じて、cloudhsm_mgmt_util で changePswd コマンドを使用して、パスワードを既知の値に設定します。

    • ConnectionErrorCode 値が USER_LOCKED_OUT の場合、cloudhsm_mgmt_util で changePswd コマンドを使用して kmsuser パスワードを変更する必要があります。

  3. kmsuser パスワード設定を編集して、クラスター内の現在の kmsuser パスワードと一致させます。このアクションは、AWS KMS にクラスターにログインするために使用するパスワードを指示します。クラスターの kmsuser パスワードは変更されません。

  4. カスタムキーストアを接続します

孤立したキーマテリアルを削除する方法

カスタムキーストアからの KMS キーの削除をスケジュールした後、関連付けられた AWS CloudHSM クラスターから該当するキーマテリアルを手動で削除する必要が生じる場合があります。

カスタムキーストアで KMS キーを作成すると、AWS KMS は AWS KMS で KMS キーメタデータを作成し、関連付けられた AWS CloudHSM クラスターでキーマテリアルを生成します。カスタムキーストアで KMS キーの削除をスケジュールすると、待機期間の後、AWS KMS は KMS キーメタデータを削除します。その後、AWS KMS は、AWS CloudHSM クラスターから対応するキーマテリアルを可能な限り削除します。カスタムキーストアから切断された場合や kmsuser パスワードが変更された場合など、AWS KMS がクラスターにアクセスできない場合には、試行が失敗する可能性があります。AWS KMS が、クラスターバックアップからキーマテリアルを削除しようと試みることはありません。

AWS KMS は、クラスターからキーマテリアルを削除しようと試みた結果を AWS CloudTrail ログの DeleteKey イベントエントリに報告します。この結果は、次のエントリ例に示されているように、additionalEventData 要素の backingKeysDeletionStatus 要素に表示されます。エントリには、KMS キー ARN、AWS CloudHSM クラスター ID、およびキーマテリアルのキーハンドル (backing-key-id) が含まれます。

{ "eventVersion": "1.08", "userIdentity": { "accountId": "111122223333", "invokedBy": "AWS Internal" }, "eventTime": "2021-12-10T14:23:51Z", "eventSource": "kms.amazonaws.com", "eventName": "DeleteKey", "awsRegion": "eu-west-1", "sourceIPAddress": "&AWS; Internal", "userAgent": "AWS Internal", "requestParameters": null, "responseElements": null, "additionalEventData": { "customKeyStoreId": "cks-1234567890abcdef0", "clusterId": "cluster-1a23b4cdefg", "backingKeys": "[{\"keyHandle\":\"01\",\"backingKeyId\":\"backing-key-id\"}]", "backingKeysDeletionStatus": "[{\"keyHandle\":\"16\",\"backingKeyId\":\"backing-key-id\",\"deletionStatus\":\"FAILURE\"}]" }, "eventID": "c21f1f47-f52b-4ffe-bff0-6d994403cf40", "readOnly": false, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:eu-west-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ], "eventType": "AwsServiceEvent", "recipientAccountId": "111122223333", "managementEvent": true, "eventCategory": "Management" }

関連する AWS CloudHSM クラスターからキーマテリアルを削除するには、次のような手順を使用します。この例では、AWS CLI および AWS CloudHSM コマンドラインツールを使用していますが、CLI の代わりに AWS Management Console を使用することもできます。

  1. カスタムキーストアを切断していない場合は、切断してから key_mgmt_util にログインします (「切断してログインする方法」を参照)。

  2. クラスター内の HSM から キーを削除するには、key_mgmt_util の DeleteKey コマンドを使用します。

    例えば、このコマンドは、クラスターの HSM 262162 からキーを削除します。キーハンドルは CloudTrail ログエントリにリストされます。

    Command: deleteKey -k 262162 Cfm3DeleteKey returned: 0x00 : HSM Return: SUCCESS Cluster Error Status Node id 0 and err state 0x00000000 : HSM Return: SUCCESS Node id 1 and err state 0x00000000 : HSM Return: SUCCESS Node id 2 and err state 0x00000000 : HSM Return: SUCCESS
  3. key_mgmt_util からログアウトし、ログアウトして再接続する方法 の説明に従ってカスタムキーストアを再接続します。

KMS キーの削除されたキーマテリアルを復旧するには

AWS KMS key のキーマテリアルが削除された場合、KMS キーは使用できず、KMS キーで暗号化されたすべての暗号文は復号できません。これは、カスタムキーストアの KMS キーのキーマテリアルが、関連付けられた AWS CloudHSM クラスターから削除された場合に発生します。ただし、キーマテリアルを復元することは可能な場合もあります。

カスタムキーストアで AWS KMS key (KMS キー) を作成すると、AWS KMS が関連付けられた AWS CloudHSM クラスターにログインし、KMS キーのキーマテリアルを作成します。また、それだけが知っている値にパスワードを変更し、カスタムキーストアが接続されている間だけ、ログインしたままになります。キー所有者、つまりキーを作成した CU のみがキーを削除できるため、誤って HSM からキーが削除されることはありません。

ただし、KMS キーのキーマテリアルがクラスター内の HSM から削除されると、KMS キーのキーステータスは最終的に UNAVAILABLE に変わります。暗号化オペレーションで KMS キーの使用を試みると、KMSInvalidStateException の例外によりオペレーションは失敗します。最も重大なのは、KMS キーで暗号化されたデータが復号できないことです。

特定の状況では、キーマテリアルを含む バックアップからクラスターを作成することで、 削除されたキーマテリアルを回復できます。この方法は、キーが存在していて削除される前に少なくとも 1 つのバックアップが作成された場合にのみ機能します。

キーマテリアルを復旧するには、次の手順を実行します。

  1. キーマテリアルが格納されているクラスターバックアップを見つけます。バックアップには、クラスターとその暗号化されたデータをサポートするために必要なすべてのユーザーとキーも含まれている必要があります。

    DescribeBackups オペレーションを使用して、クラスタのバックアップを一覧表示します。バックアップのタイムスタンプを使用すると、バックアップの選択に役立ちます。カスタムキーストアに関連付けられているクラスターへの出力を制限するには、次の例のように Filters パラメータを使用します。

    $ aws cloudhsmv2 describe-backups --filters clusterIds=<cluster ID> { "Backups": [ { "ClusterId": "cluster-1a23b4cdefg", "BackupId": "backup-9g87f6edcba", "CreateTimestamp": 1536667238.328, "BackupState": "READY" }, ... ] }
  2. 選択したバックアップからクラスタを作成します。バックアップに削除されたキーおよびクラスターに必要な他のユーザーとキーが含まれていることを確認します。

  3. カスタムキーストアを切断して、そのプロパティを編集できます。

  4. カスタムキーストアのクラスター ID を編集します。バックアップから作成したクラスターのクラスター ID を入力します。クラスターは元のクラスターとバックアップ履歴を共有するため、新しいクラスター ID が有効である必要があります。

  5. カスタムキーストアを再接続します。

kmsuser としてログインする方法

カスタムキーストアの AWS CloudHSM クラスターにキーマテリアルを作成して管理するために、AWS KMS は kmsuser Crypto User (CU) アカウントを使用します。クラスターに kmsuser CU アカウントを作成し、カスタムキーストアを作成するときにそのパスワードを AWS KMS に入力します。

一般的に、AWS KMS は kmsuser アカウントを管理します。ただし、カスタムキーストアを切断し、kmsuser CU としてクラスターにログインして、cloudhsm_mgmt_util および key_mgmt_util コマンドラインツールを使用する必要があるタスクもあります。

注記

カスタムキーストアが切断されている間は、カスタムキーストアで KMS キーを作成したり、暗号化オペレーションで既存の KMS キーを使用したりする試みはすべて失敗します。このオペレーションにより、ユーザーが機密データを保存したりアクセスしたりすることを防ぐことができます。

このトピックでは、カスタムキーストアを切断して kmsuser としてログインする、AWS CloudHSM コマンドラインツールを実行する、カスタムキーストアをログアウトする、および再接続する方法について説明します。

切断してログインする方法

関連するクラスターに kmsuser CU としてログインする必要があるたびに、次の手順を実行します。

  1. カスタムキーストアがまだ切断されていない場合は、切断します。AWS Management Console または AWS KMS API を使用できます。

    カスタムキーが接続されている間、AWS KMS は kmsuser としてログインします。これにより、kmsuser としてログインしたり、kmsuser パスワードを変更することができなくなります。

    例えば、このコマンドは、 DisconnectCustomKeyStore を使用して、サンプルキーストアを切断します。カスタムキーストア ID 例を有効な ID と置き換えます。

    $ aws kms disconnect-custom-key-store --custom-key-store-id cks-1234567890abcdef0
  2. cloudhsm_mgmt_util を起動します。AWS CloudHSM ユーザーガイドPrepare to run cloudhsm_mgmt_util セクションで説明されている手順に従います。

  3. Crypto Officer (CO) として AWS CloudHSM クラスターの cloudhsm_mgmt_util にログインします。

    例えば、このコマンドは admin という名前の CO としてログインします。CO ユーザー名とパスワードの例を有効な値に置き換えます。

    aws-cloudhsm>loginHSM CO admin <password> loginHSM success on server 0(10.0.2.9) loginHSM success on server 1(10.0.3.11) loginHSM success on server 2(10.0.1.12)
  4. changePswd コマンドを使用して、kmsuser アカウントのパスワードを知っているものに変更します (AWS KMS は、カスタムキーストアに接続するときにパスワードをローテーションします)。パスワードは 7〜32 の英数字で構成する必要があります。大文字と小文字が区別され、特殊文字を含めることはできません。

    例えば、このコマンドは、kmsuser パスワードを tempPassword に変更します。

    aws-cloudhsm>changePswd CU kmsuser tempPassword *************************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 Changing password for kmsuser(CU) on 3 nodes
  5. 設定したパスワードを使用して、key_mgmt_util または cloudhsm_mgmt_util に kmsuser としてログインします。詳細な手順については、「 cloudhsm_mgmt_util の使用開始」および「key_mgmt_utilの使用開始」を参照してください。使用するツールは、タスクによって異なります。

    例えば、このコマンドは key_mgmt_util にログインします。

    Command: loginHSM -u CU -s kmsuser -p tempPassword Cfm3LoginHSM returned: 0x00 : HSM Return: SUCCESS Cluster Error Status Node id 0 and err state 0x00000000 : HSM Return: SUCCESS Node id 1 and err state 0x00000000 : HSM Return: SUCCESS Node id 2 and err state 0x00000000 : HSM Return: SUCCESS

ログアウトして再接続する方法

  1. タスクを実行し、コマンドラインツールからログアウトします。ログアウトしないと、カスタムキーストアへの再接続が失敗します。

    Command: logoutHSM Cfm3LogoutHSM returned: 0x00 : HSM Return: SUCCESS Cluster Error Status Node id 0 and err state 0x00000000 : HSM Return: SUCCESS Node id 1 and err state 0x00000000 : HSM Return: SUCCESS
  2. カスタムキーストアの kmsuser パスワード設定を編集します

    これにより、クラスターの kmsuser の現在のパスワードが AWS KMS に通知されます。このステップを省略すると、AWS KMS は kmsuser としてクラスターにログインできなくなり、カスタムキーストアの再接続がすべて失敗します。UpdateCustomKeyStore オペレーションの AWS Management Console または KeyStorePassword パラメータを使用できます。

    例えば、このコマンドは現在のパスワードが AWS KMS あることを tempPassword に通知します。例のパスワードを実際のパスワードに置き換えます。

    $ aws kms update-custom-key-store --custom-key-store-id cks-1234567890abcdef0 --key-store-password tempPassword
  3. カスタムキーストアを AWS KMS に再接続します。カスタムキーストア ID 例を有効な ID と置き換えます。接続処理中に、AWS KMS は kmsuser パスワードを、それだけが知っている値に変更します。

    ConnectCustomKeyStore オペレーションはすばやく返されますが、接続プロセスに長時間かかる場合があります。最初のレスポンスは、接続プロセスの成功を示していません。

    $ aws kms connect-custom-key-store --custom-key-store-id cks-1234567890abcdef0
  4. DescribeCustomKeyStores オペレーションを使用して、カスタムキーストアが接続されていることを確認します。カスタムキーストア ID 例を有効な ID と置き換えます。

    この例では、接続状態フィールドは、カスタムキーストアが接続されていることを示しています。

    $ aws kms describe-custom-key-stores --custom-key-store-id cks-1234567890abcdef0 { "CustomKeyStores": [ "CustomKeyStoreId": "cks-1234567890abcdef0", "CustomKeyStoreName": "ExampleKeyStore", "CloudHsmClusterId": "cluster-1a23b4cdefg", "TrustAnchorCertificate": "<certificate string appears here>", "CreationDate": "1.499288695918E9", "ConnectionState": "CONNECTED" ], }