AWS Encryption SDK を移行してデプロイする方法 - AWS Encryption SDK

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

AWS Encryption SDK を移行してデプロイする方法

1.7.x より以前の AWS Encryption SDK バージョンからバージョン 2.0.x 以降に移行するときは、キーコミットメント による暗号化に安全に移行する必要があります。そうしないと、アプリケーションは復号できない暗号化テキストを検出します。AWS KMS マスターキープロバイダーを使用している場合は、Strict モードまたは Discovery モードでマスターキープロバイダーを作成する新しいコンストラクタに更新する必要があります。

注記

このトピックは、AWS Encryption SDK の以前のバージョンからバージョン 2.0.x 以降に移行するユーザーを対象としています。AWS Encryption SDK を初めて使用する場合は、利用可能な最新バージョンをデフォルト設定ですぐに使い始めることができます。

読む必要がある暗号化テキストを復号化できない重大な状況を回避するには、複数の異なるステージで移行およびデプロイすることをお勧めします。各ステージを完了して完全にデプロイしたことを確認してから、次のステージを開始してください。これは、複数のホストがある分散アプリケーションでは特に重要です。

ステージ 1: アプリケーションを最新 1.x バージョンに更新

ご使用のプログラミング言語の最新 1.x バージョンに更新します。慎重にテストし、変更をデプロイして、更新がすべての送信先ホストに反映されていることを確認してから、ステージ 2 を開始します。

重要

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

AWS Encryption SDK の最新 1.x バージョンには、AWS Encryption SDK のレガシーバージョンとの下位互換性があり、バージョン 2.0.x 以降との上位互換性もあります。これらはバージョン 2.0.x にある新機能が含まれていますが、この移行用に設計された安全なデフォルトが含まれています。AWS KMS マスターキープロバイダーを必要であればアップグレードでき、キーコミットメントによる暗号化テキストを復号できるアルゴリズムスイートで完全にデプロイできます。

  • レガシー AWS KMS マスターキープロバイダーのコンストラクタなど、非推奨の要素を置き換えます。Python では、非推奨の警告をオンにしてください。最新 1.x バージョンで非推奨になったコード要素は、バージョン 2.0.x 以降で削除されます。

  • コミットメントポリシーを明示的に ForbidEncryptAllowDecrypt に設定してください。最新 1.x バージョンではこれが唯一の有効な値ですが、この設定は、このリリースで導入された API を使用する場合に必要です。これにより、バージョン 2.0.x 以降への移行時に、キーコミットメントなしで暗号化された暗号化テキストがアプリケーションで拒否されるのを防ぎます。詳細については、「コミットメントポリシーの設定」を参照してください。

  • AWS KMS マスターキープロバイダーを使用する場合は、Strict モードDiscovery モードをサポートするマスターキープロバイダーにレガシーマスターキープロバイダーを更新する必要があります。この更新は、AWS Encryption SDK for Java、AWS Encryption SDK for Python、AWS Encryption CLI で必要です。Discovery モードでマスターキープロバイダーを使用する場合は、Discovery フィルターを実装して、使用するラッピングキーを特に AWS アカウント のものに制限することをお勧めします。この更新はオプションですが、お勧めのベストプラクティスです。詳細については、「AWS KMS マスターキープロバイダーの更新」を参照してください。

  • AWS KMS 検出キーリング を使用する場合は、復号化に使用するラッピングキーを特に AWS アカウント の制限する検出フィルターを含めることをお勧めします。この更新はオプションですが、お勧めのベストプラクティスです。詳細については、「AWS KMS キーリングの更新」を参照してください。

ステージ 2: アプリケーションを最新バージョンに更新

最新 1.x バージョンをすべてのホストに正常にデプロイしたら、バージョン 2.0.x 以降にアップグレードできます。バージョン 2.0.x では、すべての前バージョンの AWS Encryption SDK が大きく変更されています。ただし、ステージ 1 で推奨されるコードの変更を行うと、最新バージョンに移行するときにエラーを回避できます。

最新バージョンに更新する前に、コミットメントポリシーを一貫して ForbidEncryptAllowDecrypt に設定していることを確認してください。次に、データ構成に応じて、自分のペースで RequireEncryptAllowDecrypt に移行してからデフォルト設定の RequireEncryptRequireDecrypt に移行できます。次のパターンのような一連の移行手順を推奨します。

  1. 最初はコミットメントポリシーForbidEncryptAllowDecrypt に設定します。AWS Encryption SDK ではキーコミットメントによるメッセージを復号化できますが、キーコミットメントではまだ暗号化しません。

  2. 準備ができたら、コミットメントポリシーを RequireEncryptAllowDecrypt に更新します。AWS Encryption SDK でキーコミットメントによるデータの暗号化を開始します。キーコミットメントを使用しているかどうかにかかわらず、暗号化テキストを復号化できます。

    コミットメントポリシーを RequireEncryptAllowDecrypt に更新する前に、生成した暗号化テキストを復号するアプリケーションのホストを含め、すべてのホストに最新 1.x バージョンがデプロイされていることを確認します。バージョン 1.7.x より前の AWS Encryption SDK では、キーコミットメントで暗号化されたメッセージを復号化できません。

    この時点でアプリケーションにメトリクスを追加し、キーコミットメントによらない暗号化テキストをまだ処理しているかどうかを調査することもお勧めします。これにより、いつコミットメントポリシー設定を RequireEncryptRequireDecrypt に更新しても安全かを判断できるようになります。Amazon SQS キュー内のメッセージを暗号化するアプリケーションなど、一部のアプリケーションでは、古いバージョンで暗号化されたすべての暗号化テキストが再暗号化または削除されるのに時間がかかることがあります。暗号化された S3 オブジェクトなどの他のアプリケーションでは、すべてのオブジェクトをダウンロード、再暗号化、および再アップロードする必要がある場合があります。

  3. キーコミットメントなしで暗号化されたメッセージがないことが確認できたら、コミットメントポリシーを RequireEncryptRequireDecrypt に更新できます。この値により、キーコミットメントでデータが常に暗号化、復号化されます。この設定はデフォルトであるため、明示的に設定する必要はありませんが、推奨されています。明示的に設定すると、アプリケーションがキーコミットメントなしで暗号化された暗号化テキストを検出した場合に必要となる可能性のあるデバッグとロールバックが容易になります。