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

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

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

使用できない CMKs を修正する方法

カスタムキーストアの カスタマーマスターキー (CMKs) の キーの状態 は、通常は Enabled です。すべての CMKs と同様に、カスタムキーストアで CMKs を無効にするか、削除するようスケジュールすると、キーの状態が変更されます。ただし、他の CMKs とは異なり、カスタムキーストアの CMKs は、Unavailable というキーの状態を持つこともできます。

Unavailable のキーの状態は、CMK が AWS CloudHSM クラスターから意図的に切断されたカスタムキーストアにあり、再接続を試みて失敗したことを示しています。CMK は使用できませんが、CMK を表示および管理することはできます。ただし、暗号化オペレーションで使用することはできません。

CMK のキーの状態を確認するには、[カスタマー管理型のキー] ページで、CMK の [ステータス] フィールドを表示します。または、DescribeKey オペレーションを使用し、レスポンスで KeyState 要素を表示します。詳細については、「キーの表示」を参照してください。

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

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

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

失敗した CMK を修正する方法

カスタムキーストアで CMKs を作成して使用する際の問題は、カスタムキーストア、関連する AWS CloudHSM クラスター、CMK、またはそのキーマテリアルの問題によって発生する可能性があります。

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

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

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

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

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

接続障害の修復方法

カスタムキーストアを AWS CloudHSM クラスター接続しようとしたが、オペレーションが失敗した場合、カスタムキーストアの接続ステータスは FAILED に変わります。カスタムキーステータスのステータスを確認するには、AWS マネジメントコンソール のカスタムキーステータスの [ステータス] 列か、DescribeCustomKeyStores レスポンスの ConnectionState 要素を参照してください。

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

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

注記

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

  • CLUSTER_NOT_FOUND は、AWS KMS が指定のクラスター ID を持つ AWS CloudHSM クラスターを見つけられないことを示します。これは、誤ったクラスター ID が API オペレーションに提供されたか、クラスターが削除されて置き換えられなかったために発生する可能性があります。このエラーを解決するには、AWS CloudHSM コンソールまたは DescribeClusters オペレーションを使用するなどして、クラスター ID を確認してください。クラスターが削除されている場合は、オリジナルの最新のバックアップからクラスターを作成します。次に、カスタムキーストアを切断しカスタムキーストアクラスター ID 設定を編集して、カスタムキーストアをクラスターに再接続します

  • INSUFFICIENT_CLOUDHSM_HSMS は、関連付けられた AWS CloudHSM クラスターに HSM が含まれていないことを示します。クラスターに接続するには、少なくとも 1 つの HSM を持っている必要があります。クラスターの HSM の数を調べるには、DescribeClusters オペレーションを使用します。このエラーを解決するには、少なくとも 1 つの HSM をクラスターに追加します。複数の HSM を追加する場合は、別のアベイラビリティーゾーンでそれらを作成することをお勧めします。

  • INTERNAL_ERROR は、内部エラーのために AWS KMS がリクエストを完了できなかったことを示します。リクエストを再実行してください。ConnectCustomKeyStore リクエストの場合、カスタムキーストアの接続を切断してから接続を再実行します。

  • INVALID_CREDENTIALSは、適切な kmsuser アカウントのパスワードがないため、AWS KMS が関連付けられた AWS CloudHSM クラスターにログインできないことを示します。このエラーに関するヘルプについては、「無効な kmsuser 認証情報の修正方法」を参照してください。

  • NETWORK_ERRORS は通常、一時的なネットワークの問題を示します。カスタムキーストアを切断し、数分待ってから、もう一度接続してください。

  • SUBNET_NOT_FOUND は、AWS CloudHSM クラスター設定のサブネットが少なくとも 1 つ削除されたことを示します。AWS KMS がクラスター構成内ですべてのサブネットを見つけることができない場合、カスタムキーストアを AWS CloudHSM クラスターに接続しようとすると失敗します。

    このエラーを修正するには、同じ AWS CloudHSM クラスターの最新のバックアップからクラスターを作成します。(このプロセスでは、VPC とプライベートサブネットを持つ新しいクラスター設定が作成されます)。 新しいクラスターが カスタムキーストアの要件を満たしていることを確認し、新しいクラスター ID を書き留めます。次に、新しいクラスターをカスタムキーストアに関連付けるには、 カスタムキーストアの接続を切断し、カスタムキーストアのクラスター ID を新しいクラスターの ID に変更して、もう一度接続を試みます。

    ヒント

    kmsuser パスワードをリセットしないようにするには、AWS CloudHSM クラスターの最新のバックアップを使用します。

  • USER_LOCKED_OUT は、失敗したパスワードの試行回数が多すぎるため、kmsuser Crypto User (CU) アカウントが関連付けられた AWS CloudHSM クラスターからロックアウトされたことを示します。このエラーに関するヘルプについては、「無効な kmsuser 認証情報の修正方法」を参照してください。

    このエラーを修正するには、カスタムキーストアを切断し、cloudhsm_mgmt_util の changePswd コマンドを使用してkmsuser アカウントのパスワードを変更します。次に、カスタムキーストアの kmsuser のパスワード設定を編集し、接続し直してみてください。ヘルプについては、無効な kmsuser 認証情報の修正方法トピックに説明されている手順を使用します。

  • USER_LOGGED_IN は、kmsuser CU アカウントが関連付けられた AWS CloudHSM クラスターにログインしていることを示します。これにより、AWS KMS が kmsuser アカウントパスワードをローテーションしてクラスターにログインするのを防ぐことができます。このエラーを修正するには、クラスターから kmsuser CU をログアウトします。クラスターにログインするために kmsuser パスワードを変更した場合は、カスタムキーストアのキーストアパスワード値も更新する必要があります。ヘルプについては、「ログアウトして再接続する方法」を参照してください。

  • USER_NOT_FOUND は、AWS KMS が関連付けられた AWS CloudHSM クラスターで kmsuser CU アカウントを見つけられないことを示します。このエラーを修正するには、クラスターで kmsuser CU アカウントを作成し、カスタムキーストアのキーストアのキーストアのパスワード値を更新します。ヘルプについては、「無効な kmsuser 認証情報の修正方法」を参照してください。

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

カスタムキーストアを接続すると、AWS KMS は関連付けられた AWS CloudHSM クラスターに kmsuser暗号化ユーザー (CU) としてログインします。カスタムキーストアが切断されるまで、ログインしたままになります。DescribeCustomKeyStores レスポンスは、次の例に示すように、INVALID_CREDENTIALSFAILEDConnectionErrorCode の値の ConnectionState を示します。

カスタムキーストアを切断して 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 レスポンスは、次の例に示すように、USER_LOCKED_OUTFAILEDConnectionErrorCode の値の ConnectionState を含みます。

$ 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. カスタムキーストアを接続します

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

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

カスタムキーストアで CMK を作成すると、AWS KMS は AWS KMS に CMK メタデータを作成し、関連付けられた AWS CloudHSM クラスターにキーマテリアルを生成します。カスタムキーストアで CMK の削除をスケジュールすると、待機期間の後、AWS KMS は CMK メタデータを削除します。次に、AWS KMS は、できる限り対応するキーマテリアルをクラスターから削除します。AWS KMS はクラスターバックアップからキーマテリアルを削除しようとしません。

カスタムキーストアが切断された場合など、AWS KMS がキーマテリアルを削除できない場合は、AWS KMS はエントリを AWS CloudTrail ログに書き込みます。このエントリには、CMK ID、AWS CloudHSM クラスター ID、およびキーマテリアルのキーハンドルが含まれます。

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

  1. カスタムキーストアをまだ切断していない場合は切断し、「切断してログインする方法」で説明されているように、key_mgmt_util にログインします。

  2. key_mgmt_util で deleteKey コマンドを使用して、クラスターの HSM からキーを削除します。

    たとえば、このコマンドは、クラスターの 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 からログアウトして、「ログアウトして再接続する方法」で説明されているように、カスタムキーストアを再接続します。

CMK の削除されたキーマテリアルの復旧方法

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

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

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

特定の状況下では、キーマテリアルを含むバックアップからクラスターを作成して、削除されたキーマテリアルを復旧できます。この戦略は、キーが存在していて削除される前に少なくとも 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 暗号化ユーザー (CU) アカウントを使用します。クラスターに kmsuser CU アカウントを作成し、カスタムキーストアを作成するときにそのパスワードを AWS KMS に入力します。

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

注記

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

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

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

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

  1. カスタムキーストアがまだ切断されていない場合は、切断します。AWS マネジメントコンソール または 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 User Guide」の「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 マネジメントコンソール または KeyStorePassword パラメータを使用できます。

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

    $ 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" ], }