エンベロープ暗号化とデータキー
KMSが実データを暗号化するデータキーを保護する仕組みを確認します。
「エンベロープ暗号化とデータキー」はCoddyKit上の無料AWS Security Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAWS Security Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AWS Security Academyコースには全4レッスンが含まれています。
大量データの問題
KMSが直接暗号化できるのは、小さなペイロード(約4 KB)だけです。実際のデータ、ファイル、ボリューム、データベースは、はるかに大きくなります。
この問題を解決するのがエンベロープ暗号化です。まずデータキーで大きなデータを暗号化し、そのデータキーをKMSキーで暗号化します。AWSは、大規模な暗号化にこの仕組みを使用しています。
データキーとは
データキーは、実際のデータを暗号化するためにKMSが生成する通常の暗号化キー(AES-256など)です。
- KMSキーとは異なり、データキーのプレーンテキストは一時的にKMSの外へ出るため、使用できます。
- KMSは、データキーの暗号化されたコピーも返します。
GenerateDataKey
KMSキーを指定してGenerateDataKeyを呼び出します。KMSは次を返します。
- データを直ちに暗号化するためのプレーンテキストのデータキー。
- 暗号文と一緒に保存する暗号化されたデータキー(KMSキーでラップされたもの)。
その後、メモリからプレーンテキストのデータキーを破棄します。
aws kms generate-data-key \
--key-id alias/my-app-key \
--key-spec AES_256エンベロープパターン
処理の流れは次のとおりです。
- プレーンテキストのデータキーでデータを暗号化します。
- 暗号化されたデータキーを暗号文の隣に保存します。
- プレーンテキストのデータキーを破棄します。
データキーがKMSキーによって封印された「エンベロープ(封筒)」に入っているように見えるため、この名前が付いています。
エンベロープを使った復号
復号時は、逆の手順を実行します。
- 暗号化されたデータキーをKMSのDecryptに送信します。
- KMSがプレーンテキストのデータキーを返します。
- そのキーでデータを復号し、破棄します。
データキーをアンラップできるのはKMSだけなので、KMSキーへのアクセスがすべてを制御します。
エンベロープ暗号化の利点
エンベロープ暗号化は、両方の利点を実現します。
- データキーによる大容量データの高速なローカル暗号化。
- KMSキーがなければデータキーを使えないため、強力な一元管理。
1つのデータキーで大量のデータを保護できるため、KMSの呼び出し回数も減らせます。
データキーのキャッシュ
大容量のワークロードでは、AWS Encryption SDKを使ってデータキーをキャッシュし、多数の暗号化で再利用できます。
これにより、KMSリクエストのコストとレイテンシーを削減できます。キャッシュされたキーを長期間または広範囲に再利用しないよう制限を設定できるため、パフォーマンスとセキュリティのバランスを取れます。
サービス内部での利用方法
S3、EBS、またはRDSで暗号化を有効にすると、AWSがエンベロープ暗号化を代わりに実行します。
サービスはKMSキーからデータキーを要求し、データを暗号化して、ラップされたデータキーを保存します。ユーザーはKMSキーを選択するだけで、エンベロープの処理は自動的に行われます。
AWS Encryption SDK
AWS Encryption SDKは、独自のアプリケーションでエンベロープ暗号化を正しく実装するためのクライアント側ライブラリです。
データキーの生成、暗号化コンテキスト、ラップされたキーと暗号文の保存を処理するため、エラーが発生しやすい暗号処理を自分で実装する必要がありません。
GenerateDataKeyWithoutPlaintext
バリエーションであるGenerateDataKeyWithoutPlaintextは、暗号化されたデータキーだけを返します。
これは、データキーを今生成して保存し、使用時まで復号したくない場合に使用します。実際に必要になるまでプレーンテキストのキーをメモリに置かないため、事前に用意したキーの露出を抑えられます。
試験で重要な理由
エンベロープ暗号化を理解すると、KMSがスケールする理由と、1つのKMSキーでテラバイト単位のデータを保護できる仕組みが分かります。
GenerateDataKeyの流れ、KMSの外へ出るもの(短時間だけ存在するデータキー)、そしてKMSキーを制御することで派生データ全体を制御できる理由が問われます。
クイックチェック
エンベロープの流れを確認しましょう。
まとめ
エンベロープ暗号化について学びました。
- GenerateDataKeyは、プレーンテキストのデータキーと暗号化されたデータキーを返します。
- プレーンテキストのキーでデータをローカルに暗号化し、ラップされたキーを保存して、プレーンテキストを破棄します。
- データキーをアンラップできるのはKMSキーだけであり、すべてのデータを一元管理できます。
よくある質問
「エンベロープ暗号化とデータキー」レッスンは無料ですか?
はい。「エンベロープ暗号化とデータキー」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AWS Security Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AWS Security Academyコースには全4レッスンが含まれています。
「エンベロープ暗号化とデータキー」で何を学びますか?
KMSが実データを暗号化するデータキーを保護する仕組みを確認します。 ブラウザで直接実行するハンズオンコードでAWS Security Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AWS Security Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAWS Security Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「エンベロープ暗号化とデータキー」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAWS Security Academyレッスンでコードを書いて実行できますか?
はい。すべてのAWS Security Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- KMSキーとは何か、何ができるか
- 対称キー、非対称キー、マルチリージョンキー
- キーポリシー、グラント、条件
- エンベロープ暗号化とデータキー