AWS Key Management Service
開発者ガイド

Amazon Elastic Block Store (Amazon EBS) で AWS KMS を使用する方法

このトピックでは、Amazon Elastic Block Store (Amazon EBS) で AWS KMS を使用してボリュームとスナップショットを暗号化する方法について詳しく説明します。Amazon EBS ボリュームを暗号化する基本的な手順については、「Amazon EBS の暗号化」を参照してください。

Amazon EBS の暗号化

暗号化の対象となる Amazon EBS ボリュームをサポートされている Amazon Elastic Compute Cloud (Amazon EC2) インスタンスタイプにアタッチすると、そのボリュームに保管されるデータ、そのボリュームとのディスク I/O、そのボリュームから作成されたスナップショットは、すべて暗号化されます。暗号化は Amazon EC2 インスタンスをホストするサーバー側で実施されます。

この機能は、すべての Amazon EBS ボリュームタイプでサポートされます。暗号化されたボリュームには、他のボリュームにアクセスする場合と同じ方法でアクセスできます。暗号化と復号化は透過的に処理され、ユーザー、EC2 インスタンス、アプリケーションからの追加アクションは不要です。暗号化されたボリュームのスナップショットは自動的に暗号化され、暗号化されたスナップショットから作成されたボリュームも、自動的に暗号化されます。

EBS ボリュームの暗号化ステータスは、ボリュームの作成時に決定されます。既存のボリュームの暗号化ステータスを変更することはできません。ただし、暗号化されたボリュームと暗号化されていないボリューム間でデータを移行でき、スナップショットのコピー中に新しい暗号化のステータスを適用できます。

CMK とデータキーの使用

暗号化 Amazon EBS ボリュームを作成するときは、AWS KMS カスタマーマスターキー (CMK) を指定します。デフォルトでは、Amazon EBS は、アカウントの Amazon EBS の AWS 管理 CMK を使用します。ただし、カスタマーマスターキー (CMK) を指定することも可能です。

Amazon EBS は、指定した CMK を使用して、各ボリュームの一意のデータキーを生成します。データキーの暗号化されたコピーをボリュームに保存します。次に、Amazon EC2 インスタンスにボリュームを接続すると、Amazon EBS はデータキーを使用してボリュームへのすべてのディスク I/O を暗号化します。

以下では、Amazon EBS で CMK を使用する方法を説明します。

  1. 暗号化された EBS ボリュームを作成すると、Amazon EBS は GenerateDataKeyWithoutPlaintext リクエストを AWS KMS に送信し、EBS ボリュームの暗号化のためにユーザーが選択した CMK を指定します。

  2. AWS KMS は新しいデータキーを生成し、指定された CMK で暗号化して、その暗号化されたデータキーを Amazon EBS に送信してボリュームのメタデータとともに保存します。

  3. 暗号化されたボリュームを EC2 インスタンスにアタッチすると、Amazon EC2 は暗号化されたデータキーを Decrypt リクエストとともに AWS KMS に送信します。

  4. AWS KMS は、暗号化されたデータキーを復号化して、その復号化された (プレーンテキスト) データキーを Amazon EC2 に送信します。

  5. Amazon EC2 は、ハイパーバイザーメモリ内のプレーンテキストデータキーを使用して、ディスク I/O を EBS ボリュームに暗号化します。プレーンテキストデータキーは、EBS ボリュームが EC2 インスタンスにアタッチされる限り、メモリ内で維持されます。

Amazon EBS 暗号化コンテキスト

AWS KMS への GenerateDataKeyWithoutPlaintext および Decrypt リクエストでは、Amazon EBS は、リクエスト内のボリュームまたはスナップショットを識別する名前と値のペアを持つ暗号化コンテキストを使用します。暗号化コンテキストの名前は変わりません。

暗号化コンテキスト は、一連のキーと値のペアを含む任意非シークレットデータです。データを暗号化するリクエストに暗号化コンテキストを組み込むと、AWS KMS は暗号化コンテキストを暗号化されたデータに暗号化してバインドします。データを復号化するには、同じ暗号化コンテキストに渡す必要があります。

すべてのボリュームと、Amazon EBS CreateSnapshot オペレーションで作成された暗号化されたスナップショットについては、Amazon EBS はボリューム ID を暗号化コンテキスト値として使用します。CloudTrail ログエントリの requestParameters フィールドで、暗号化コンテキストは以下のようになります。

"encryptionContext": { "aws:ebs:id": "vol-0cfb133e847d28be9" }

Amazon EC2 CopySnapshot オペレーションで作成された暗号化されたスナップショットの場合、Amazon EBS はスナップショット ID を暗号化コンテキスト値として使用します。CloudTrail ログエントリの requestParameters フィールドで、暗号化コンテキストは以下のようになります。

"encryptionContext": { "aws:ebs:id": "snap-069a655b568de654f" }

Amazon EBS エラーの検出

暗号化された EBS ボリュームを作成したり、ボリュームを EC2 インスタンスにアタッチしたりするために、Amazon EBS および Amazon EC2 インフラストラクチャは、EBS ボリュームの暗号化のためにユーザーが指定した CMK を使用する必要があります。CMK が使用できない場合 — たとえば、キーの状態Enabled になっていない場合 — ボリュームの作成またはボリュームのアタッチは失敗します。

この場合、Amazon EBS はイベントを Amazon CloudWatch Events に送信して、ユーザーにエラーを知らせます。CloudWatch イベント では、これらのイベントに応じて自動アクションをトリガーするルールを設定できます。詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の「Amazon CloudWatch Events for Amazon EBS」を参照してください。特に以下のセクションに注目してください。

これらのエラーを修正するには、EBS ボリュームの暗号化のために指定した CMK が有効になっていることを確認します。これを行うには、最初に CMK を表示して現在のキーステータス (AWS マネジメントコンソール の [Status] 列) を確認します。次に、以下のリンクのいずれかで情報を確認します。

AWS CloudFormation を使用した、暗号化された Amazon EBS ボリュームの作成

AWS CloudFormation を使用して、暗号化された Amazon EBS ボリュームを作成できます。詳細については、『AWS CloudFormation ユーザーガイド』の「AWS::EC2::Volume」を参照してください。