AWS Key Management Service
開発者ガイド

Amazon Simple Storage Service (Amazon S3) で AWS KMS を使用する方法

このトピックでは、AWS KMS を使用して Amazon S3 データセンター内に保管されたデータを保護する方法について説明します。Amazon S3 で AWS KMS を使用するには 2 つの方法があります。カスタマーマスターキーとサーバー側の暗号化を使用してデータを保護することも、AWS KMS カスタマーマスターキー (CMK) と Amazon S3 暗号化クライアントを使用してクライアント側でデータを保護することもできます。

サーバー側の暗号化: SSE-KMS の使用

3 種類のサーバー側の暗号化モード (SSE-S3、SSE-C、または SSE-KMS) を使用して、Amazon S3 に保管されているデータを保護することができます。

このトピックの残りでは、AWS KMS で管理されるキーとサーバー側の暗号化を使用してデータを保護する方法 (SSE-KMS) について説明します。

暗号化をリクエストし、 カスタマーマスターキー (CMK) を選択するには、 Amazon S3 コンソールまたは API を使用します。コンソールで、適切なチェックボックスをオンにして暗号化を実行し、リストから CMK を選択します。Amazon S3 API の場合、GET または PUT リクエストの適切なヘッダーを設定することで、暗号化を指定し、CMK を選択します。詳細については、「AWS KMS で管理された暗号化キーによるサーバー側の暗号化 (SSE-KMS) を使用したデータの保護」を参照してください。

カスタマー管理型の CMK を選択することも、アカウントにある Amazon S3 用の AWS 管理型の CMK を選択することもできます。ユーザーがデータの暗号化を選択した場合、AWS KMS と Amazon S3 は以下の処理を実行します。

  • Amazon S3 は、プレーンテキストのデータキーと、指定された CMK で暗号化されたキーのコピーをリクエストします。

  • AWS KMS は、データキーを作成し、それをマスターキーを使って暗号化し、プレーンテキストのデータキーと暗号化されたデータキーの両方を Amazon S3 に送信します。

  • Amazon S3 は、データキーを使ってデータを暗号化し、使用後は、メモリからプレーンテキストのキーをできるだけ早く削除します。

  • Amazon S3 は、暗号化されたデータキーを、暗号化されたデータのメタデータとして保存します。

データの復号をリクエストされると、Amazon S3 と AWS KMS は以下の操作を実行します。

  • 暗号化されたデータキーを Amazon S3 が AWS KMS に送信します。

  • AWS KMS が適切なマスターキーを使ってキーを復号し、Amazon S3 にプレーンテキストのキーを返します。

  • Amazon S3 は、暗号化テキストを復号し、メモリからプレーンテキストのデータキーをできるだけ早く削除します。

Amazon S3 暗号化クライアントの使用

アプリケーションで AWS SDK のAmazon S3 暗号化クライアントを使用して、オブジェクトを暗号化し、それを Amazon S3 にアップロードすることができます。この方法では、データをローカルに暗号化して、Amazon S3 サービスにデータを渡す際にデータの安全性を保証することができます。Amazon S3 サービスは暗号化されたデータを受け取るだけで、データの暗号化または復号には関与しません。

Amazon S3 暗号化クライアントは、エンベロープ暗号化を使用してオブジェクトを暗号化します。ユーザーがデータをクライアントに渡して暗号化機能を呼び出すと、クライアントは処理の途中で AWS KMS を呼び出します。AWS KMS は、カスタマーマスターキー (CMK) の使用をユーザーが承認されているか確認し、承認されている場合は、新しいプレーンテキストのデータキーと、CMK を使って暗号化されたデータキーを返します。Amazon S3 暗号化クライアントは、プレーンテキストのキーを使用してデータを暗号化した後、メモリからそのキーを削除します。暗号化されたデータキーは Amazon S3 に送信され、暗号化されたデータと一緒に保存されます。

暗号化コンテキスト

AWS KMS と統合された各サービスでは、データキー、暗号化および復号化をリクエストするときに暗号化コンテキストが指定されます。暗号化コンテキストは、データの整合性を調べるために AWS KMS で使用される追加の認証データ (AAD) です。暗号化操作で暗号化コンテキストを指定すると、Amazon S3 が同じ暗号化コンテキストを復号操作にも指定します。そうしないと、復号は失敗します。SSE-KMS または Amazon S3 暗号化クライアントを使用して暗号化を実行する場合、Amazon S3 では暗号化コンテキストとしてバケットのパスが使用されます。CloudTrail ログファイルの requestParameters フィールドで、暗号化コンテキストは次のように表示されます。

"encryptionContext": { "aws:s3:arn": "arn:aws:s3:::bucket_name/file_name" },