最新バージョンへの移行に関するトラブルシューティング - AWS Encryption SDK

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

最新バージョンへの移行に関するトラブルシューティング

アプリケーションを AWS Encryption SDK のバージョン 2.0.x 以降に更新する前に、AWS Encryption SDK の最新 1.x バージョンに更新して完全にデプロイします。これにより、バージョン 2.0.x 以降への更新時に発生する可能性のあるほとんどのエラーを回避できます。例を含む詳細なガイダンスについては、「AWS Encryption SDK の移行」を参照してください。

重要

最新 1.x バージョンが AWS Encryption SDK のバージョン 1.7.x 以降であることを確認します。

注記

AWS Encryption CLI: このガイドで AWS Encryption SDK のバージョン 1.7.x について言及することは、AWS Encryption CLI のバージョン 1.8.x にも適用されます。このガイドで AWS Encryption SDK のバージョン 2.0.x について言及することは、AWS Encryption CLI のバージョン 2.1.x にも適用されます。

新しいセキュリティ機能は、AWS Encryption CLI バージョン 1.7.x および 2.0.x で最初にリリースされました。ただし、AWS Encryption CLI バージョン 1.7.x はバージョン 1.8.x に、AWS Encryption CLI 2.0.x は 2.1.x に置き換わります。詳細については、GitHub の aws-encryption-sdk-cli リポジトリで関連するセキュリティアドバイザリを参照してください。

このトピックは、発生する可能性のある最も一般的なエラーを認識し、解決するのに役立つように設計されています。

非推奨または削除されたオブジェクト

バージョン 2.0.x には、バージョン 1.7.x で非推奨になったレガシーコンストラクタ、メソッド、関数、クラスの削除など、いくつかの重大な変更が含まれています。コンパイラのエラー、インポートエラー、構文エラー、シンボルが見つからないエラー (プログラミング言語によって異なります) を回避するには、まず使用するプログラミング言語の AWS Encryption SDK の最新 1.x バージョンにアップグレードしてください。(これはバージョン 1.7.x 以降である必要があります。) 最新 1.x バージョンを使用中、元のシンボルが削除される前に置換要素の使用を開始できます。

バージョン 2.0.x にすぐにアップグレードする必要がある場合は、使用中のプログラミング言語の 変更履歴を参照し、レガシーシンボルを変更履歴が推奨するシンボルに置き換えます。

構成の競合: コミットメントポリシーとアルゴリズムスイート

コミットメントポリシーと競合するアルゴリズムスイートを指定した場合は、暗号化の呼び出しが構成の競合というエラーで失敗します。

このタイプのエラーを回避するには、アルゴリズムスイートを指定しないでください。デフォルトでは、AWS Encryption SDK は、コミットメントポリシーと互換性のある最も安全なアルゴリズムを選択します。ただし、署名なしなどのアルゴリズムスイートを指定する必要がある場合は、コミットメントポリシーと互換性のあるアルゴリズムスイートを必ず選択してください。

コミットメントポリシー 互換性のあるアルゴリズムスイート
ForbidEncryptAllowDecrypt

次のようにキーコミットメントのないアルゴリズムスイート

AES_256_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384 (03 78) (署名付き)

AES_256_GCM_IV12_TAG16_HKDF_SHA256 (01 78) (署名なし)

RequireEncryptAllowDecrypt

RequireEncryptRequireDecrypt

次のようにキーコミットメントのあるアルゴリズムスイート

AES_256_GCM_HKDF_SHA512_COMMIT_KEY_ECDSA_P384 (05 78) (署名付き)

AES_256_GCM_HKDF_SHA512_COMMIT_KEY (04 78) (署名なし)

アルゴリズムスイートを指定していないときにこのエラーが発生した場合は、競合するアルゴリズムスイートが暗号化マテリアルマネージャー (CMM) によって選択されている可能性があります。デフォルト CMM では、競合するアルゴリズムスイートは選択されませんが、カスタム CMM はそれを選択する可能性があります。ヘルプについては、カスタム CMM のドキュメントを参照してください。

構成の競合: コミットメントポリシーと暗号化テキスト

RequireEncryptRequireDecrypt コミットメントポリシーでは、AWS Encryption SDK はキーコミットメントなしで暗号化されたメッセージを復号できません。キーコミットメントのないメッセージの復号を AWS Encryption SDK に要求すると、構成の競合というエラーが返されます。

このエラーを回避するには、RequireEncryptRequireDecrypt コミットメントポリシーの設定前に、キーコミットメントなしで暗号化されたすべての暗号化テキストを復号してキーコミットメントありで再暗号化するか、別のアプリケーションによって処理してください。このエラーが発生した場合は、競合する暗号化テキストのエラーを返すか、コミットメントポリシーを一時的に RequireEncryptAllowDecrypt に変更できます。

まず最新 1.x バージョン (バージョン 1.7.x 以降) へにアップグレードせずに、1.7.x より前のバージョンからバージョン 2.0.x 以降へアップグレードしたためにこのエラーが発生した場合、バージョン 2.0.x 以降にアップグレードする前に、最新 1.x バージョンに ロールバック し、そのバージョンをすべてのホストにデプロイすることを検討してください。ヘルプについては、「AWS Encryption SDK を移行してデプロイする方法」を参照してください。

キーコミットメントの検証の失敗

キーコミットメントで暗号化されたメッセージを復号するとき、「キーコミットメントの検証に失敗しました」というエラーメッセージが表示される場合があります。これは、暗号化されたメッセージのデータキーがメッセージの一意のデータキーと同一ではないために復号呼び出しが失敗したことを示します。復号時にデータキーを検証すると、キーコミットメントにより、複数のプレーンテキストが生成される可能性のあるメッセージを復号化しないように保護されます。

このエラーは、復号しようとした暗号化されたメッセージが、AWS Encryption SDK によって返されなかったことを示します。これは、手動で作成されたメッセージであるか、データ破損の結果である可能性があります。このエラーが発生した場合、アプリケーションはメッセージを拒否して続行するか、新しいメッセージの処理を停止できます。

その他の暗号化の失敗

暗号化は複数の理由で失敗する可能性があります。Discovery モードでは、AWS KMS 検出キーリングまたはマスターキープロバイダーを使用してメッセージを暗号化できません。

使用許可のあるラッピングキーを含むキーリングまたはマスターキープロバイダーを暗号化に指定してください。AWS KMS keys の権限に関するヘルプについては、「AWS Key Management Service デベロッパーガイド」の「キーポリシーの表示」および「AWS KMS key へのアクセスの特定」を参照してください。

その他の復号化の失敗

暗号化されたメッセージを復号化しようとして失敗した場合は、AWS Encryption SDK がメッセージ内の暗号化されたデータキーを復号できなかった (またはしなかった) ことを示します。

ラッピングキーを指定するキーリングまたはマスターキープロバイダーを使用した場合、AWS Encryption SDK では、指定したラッピングキーのみが使用されます。意図したラッピングキーを使用していて、ラッピングキーの少なくとも 1 つに対する kms:Decrypt 権限があることを確認してください。AWS KMS keys を使用している場合は、フォールバックとして、Discovery モードで AWS KMS 検出キーリングまたはマスターキープロバイダーを使用してメッセージの復号を試すことができます。オペレーションが成功した場合は、プレーンテキストを返す前に、メッセージの復号に使用されるキーが信頼できるキーであることを確認します。

ロールバックに関する考慮事項

アプリケーションがデータの暗号化または復号化に失敗した場合は、通常、コードシンボル、キーリング、マスターキープロバイダー、またはコミットメントポリシーを更新すると問題が解決することがあります。ただし、場合によっては、アプリケーションを以前のバージョンの AWS Encryption SDK にロールバックすることが最善であると判断することもあります。

ロールバックする必要がある場合は、注意して実行してください。バージョン 1.7.x より前の AWS Encryption SDK では、キーコミットメントで暗号化された暗号化テキストを復号化できません。

  • 最新 1.x バージョンから AWS Encryption SDK の前のバージョンにロールバックすることは、一般的には安全です。以前のバージョンでサポートされていないシンボルやオブジェクトを使用するには、コードに加えた変更を元に戻さなければならない場合があります。

  • バージョン 2.0.x 以降でキーコミットメントによる暗号化を開始した場合は (コミットメントポリシーを RequireEncryptAllowDecrypt に設定した場合は)、バージョン 1.7.x にロールバックできますが、それより前のバージョンにはロールバックできません。バージョン 1.7.x より前の AWS Encryption SDK では、キーコミットメントで暗号化された暗号化テキストを復号化できません。

すべてのホストがキーコミットメントで復号化できるようになる前に、誤ってキーコミットによる暗号化を有効にした場合は、ロールバックするのではなく、ロールアウトを続行することをお勧めします。メッセージが一時的であるか、安全にドロップできる場合は、メッセージの損失を伴うロールバックを検討してください。ロールバックが必要な場合は、すべてのメッセージを復号化して再暗号化するツールを作成することを検討してください。