

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

# 最新バージョンへの移行に関するトラブルシューティング
<a name="troubleshooting-migration"></a>

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

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

**注記**  
**AWS Encryption CLI**: このガイドの のバージョン 1.7.*x* へのリファレンスは、 Encryption CLI のバージョン 1.8.*x* AWS AWS Encryption SDK に適用されます。このガイドの のバージョン 2.0.*x* AWS への参照は、Encryption CLI の 2.1.*x* AWS Encryption SDK に適用されます。  
新しいセキュリティ機能は、もともと AWS Encryption CLI バージョン 1.7.*x* および 2.0.*x* でリリースされました。ただし、 AWS Encryption CLI バージョン 1.8.*x* はバージョン 1.7.*x* AWS に置き換わり、Encryption CLI 2.1.*x* は 2.0.*x* に置き換わります。詳細については、GitHub の [aws-encryption-sdk-cli](https://github.com/aws/aws-encryption-sdk-cli/) リポジトリで関連する[セキュリティアドバイザリ](https://github.com/aws/aws-encryption-sdk-cli/security/advisories/GHSA-2xwp-m7mq-7q3r)を参照してください。

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

**Topics**
+ [非推奨または削除されたオブジェクト](#deprecated-removed)
+ [構成の競合: コミットメントポリシーとアルゴリズムスイート](#configuration-conflict_1)
+ [構成の競合: コミットメントポリシーと暗号化テキスト](#configuration-conflict_2)
+ [キーコミットメントの検証の失敗](#commitment-failed)
+ [その他の暗号化の失敗](#encrypt-failed)
+ [その他の復号化の失敗](#decrypt-failed)
+ [ロールバックに関する考慮事項](#migration-rollback)

## 非推奨または削除されたオブジェクト
<a name="deprecated-removed"></a>

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

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

## 構成の競合: コミットメントポリシーとアルゴリズムスイート
<a name="configuration-conflict_1"></a>

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

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


| コミットメントポリシー | 互換性のあるアルゴリズムスイート | 
| --- | --- | 
| ForbidEncryptAllowDecrypt | 次のようにキーコミットメントの*ない*アルゴリズムスイートAES\$1256\$1GCM\$1IV12\$1TAG16\$1HKDF\$1SHA384\$1ECDSA\$1P384 ([03 78](algorithms-reference.md)) (署名付き) `AES_256_GCM_IV12_TAG16_HKDF_SHA256` ([01 78](algorithms-reference.md)) (署名なし) | 
| RequireEncryptAllowDecryptRequireEncryptRequireDecrypt | 次のようにキーコミットメントの*ある*アルゴリズムスイートAES\$1256\$1GCM\$1HKDF\$1SHA512\$1COMMIT\$1KEY\$1ECDSA\$1P384 ([05 78](algorithms-reference.md)) (署名付き) `AES_256_GCM_HKDF_SHA512_COMMIT_KEY` ([04 78](algorithms-reference.md)) (署名なし) | 

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

## 構成の競合: コミットメントポリシーと暗号化テキスト
<a name="configuration-conflict_2"></a>

`RequireEncryptRequireDecrypt` [コミットメントポリシー](concepts.md#commitment-policy)では、 AWS Encryption SDK は[キーコミットメント](concepts.md#key-commitment)なしで暗号化されたメッセージを復号できません。キーコミットメントなしでメッセージを復号 AWS Encryption SDK するように に要求すると、*設定の競合*エラーが返されます。

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

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

## キーコミットメントの検証の失敗
<a name="commitment-failed"></a>

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

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

## その他の暗号化の失敗
<a name="encrypt-failed"></a>

暗号化は複数の理由で失敗する可能性があります。Discovery モードでは、[AWS KMS 検出キーリング](use-kms-keyring.md#kms-keyring-discovery)または[マスターキープロバイダー](migrate-mkps-v2.md)を使用してメッセージを暗号化できません。

[使用許可](use-kms-keyring.md#kms-keyring-permissions)のあるラッピングキーを含むキーリングまたはマスターキープロバイダーを暗号化に指定してください。アクセス許可の詳細については AWS KMS keys、「 *AWS Key Management Service デベロッパーガイド*[」の「キーポリシーの表示](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-viewing.html)」および[「 へのアクセスの確認 AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/determining-access.html)」を参照してください。

## その他の復号化の失敗
<a name="decrypt-failed"></a>

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

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

## ロールバックに関する考慮事項
<a name="migration-rollback"></a>

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

ロールバックする必要がある場合は、注意して実行してください。1.7.*x* AWS Encryption SDK より前のバージョンの では、[キーコミットメント](concepts.md#key-commitment)で暗号化された暗号文を復号できません。
+ 最新 1.x バージョンから AWS Encryption SDK の前のバージョンにロールバックすることは、一般的には安全です。以前のバージョンでサポートされていないシンボルやオブジェクトを使用するには、コードに加えた変更を元に戻さなければならない場合があります。
+ バージョン 2.0.x 以降でキーコミットメントによる暗号化を開始した場合は (コミットメントポリシーを `RequireEncryptAllowDecrypt` に設定した場合は)、バージョン 1.7.x にロールバックできますが、それより前のバージョンにはロールバックできません。1.7.*x* AWS Encryption SDK より前のバージョンの では、[キーコミットメント](concepts.md#key-commitment)で暗号化された暗号文を復号できません。

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