お客様が用意した暗号化キーによるサーバー側の暗号化 (SSE−C) を使用したデータの保護
サーバー側の暗号化は、保管時のデータ保護に関するものです。サーバー側の暗号化では、オブジェクトのメタデータではなく、オブジェクトデータのみが暗号化されます。お客様が用意した暗号化キーでのサーバー側の暗号化 (SSE−C) を使用すると、独自の暗号化キーを設定できます。リクエストの一部として用意された暗号化キーで、Amazon S3 は、ディスクに書き込む際の暗号化と、オブジェクトにアクセスする際の復号を管理します。したがって、データの暗号化と復号を実行するコードをお客様が管理する必要はありません。必要なことは、お客様が用意する暗号化キーを管理することだけです。
オブジェクトをアップロードする場合、Amazon S3 はお客様が用意した暗号化キーを使用してデータに AES−256 暗号化を適用し、メモリから暗号化キーを削除します。オブジェクトを取得するときは、リクエストの中で同じ暗号化キーを指定する必要があります。Amazon S3 では、最初に指定された暗号化キーが一致することを確認した後、オブジェクトを復号してから、オブジェクトデータを返します。
お客様が用意した暗号化キーによるサーバー側の暗号化 (SSE−C) を使用するために、新たにかかる料金はありません。ただし、SSE−C を設定および使用するためのリクエストには、標準の Amazon S3 リクエスト料金が発生します。料金については、Amazon S3 の料金
Amazon S3 では、お客様が用意した暗号化キーを保存しません。代わりに、以降のリクエストを検証するために、ランダムな SALT 値が付加された暗号化キーの HMAC 値が保存されます。SALT 値が付加された HMAC 値を使用して、暗号化キーの値を求めたり、暗号化されたオブジェクトの内容を復号したりすることはできません。これは、暗号化キーを紛失した場合、オブジェクトが失われることを意味します。
SSE-C の詳細については、以下のトピックを参照してください。
SSE−C の概要
このセクションでは、SSE−C の概要を示します。
-
HTTPS を使用する必要があります。
重要 SSE−C を使用する場合、Amazon S3 は HTTP 経由で行われたリクエストをすべて拒否します。セキュリティ上の考慮事項として、誤って HTTP を使用して送信されたキーは漏洩したと見なすことをお勧めします。キーを破棄して、必要に応じて更新してください。
-
レスポンスの ETag はオブジェクトデータの MD5 ではありません。
-
使用した暗号化キーと暗号化したオブジェクトのマッピングは、お客様に管理していただきます。Amazon S3 では暗号化キーを保存しません。どのオブジェクトにどの暗号化キーを使用したかは、お客様が管理してください。
-
バケットのバージョニングが有効になっている場合、この機能を使用してアップロードする各オブジェクトバージョンに、独自の暗号化キーを使用できます。どのオブジェクトバージョンにどの暗号化キーを使用したかは、お客様が管理してください。
-
クライアント側の暗号化キーはお客様が管理するため、キーの更新など、クライアント側での追加の安全対策はお客様に管理していただきます。
警告 暗号化キーを紛失した場合、暗号化キーを使用せずにオブジェクトに対して GET リクエストを実行すると失敗し、オブジェクトは失われます。
-
署名済み URL および SSE−C
新しいオブジェクトのアップロード、既存のオブジェクトやオブジェクトメタデータの取得などのオペレーションに使用できる署名済み URL を生成できます。署名済み URL では、次のように SSE−C がサポートされます。
-
署名済み URL を作成するときに、署名の計算で
x-amz-server-side-encryption-customer-algorithm
を使用してアルゴリズムを指定する必要があります。 -
署名済み URL を使用して新しいオブジェクトをアップロードするとき、既存のオブジェクトを取得するとき、またはオブジェクトメタデータのみを取得するときに、クライアントアプリケーションですべての暗号化ヘッダーを指定する必要があります。
注記 SSE−C 以外のオブジェクトでは、署名付き URL を生成し、それをブラウザに直接貼り付けることで、例えばデータにアクセスできます。
ただし、これは SSE−C オブジェクトには当てはまりません。署名付き URL に加えて SSE−C オブジェクトに固有の HTTP ヘッダーも含める必要があります。したがって、SSE−C オブジェクトの署名付き URL はプログラムでのみ使用できます。
お客様が用意したキーによるサーバー側の暗号化 (SSE−C) の指定
REST API を使用したオブジェクトの作成時に、お客様が用意した暗号化キー (SSE−C) を使用してサーバー側の暗号化を指定できます。SSE−C を使用する場合は、次のリクエストヘッダーを使用して暗号化キー情報を指定する必要があります。
名前 | 説明 |
---|---|
x-amz-server-side-encryption-customer-algorithm
|
暗号化アルゴリズムを指定するには、このヘッダーを使用します。ヘッダーの値は "AES256" である必要があります。 |
x-amz-server-side-encryption-customer-key
|
Amazon S3 でデータを暗号化または復号するために使用する base64 でエンコードされた 256 ビットの暗号化キーを指定するには、このヘッダーを使用します。 |
x-amz-server-side-encryption-customer-key-MD5
|
RFC 1321 |
AWS SDK ラッパーライブラリを使用して、これらのヘッダーをリクエストに追加できます。必要に応じて、アプリケーションから直接 Amazon S3 REST API を呼び出すことができます。
Amazon S3 コンソールを使用してオブジェクトをアップロードしたり SSE−C をリクエストしたりすることはできません。また、SSE−C を使用して保存されている既存のオブジェクトを更新すること (ストレージクラスの変更やメタデータの追加など) もできません。
SSE−C をサポートする Amazon S3 REST API
次の Amazon S3 API は、お客様が用意した暗号化キー (SSE−C) を使用したサーバー側の暗号化をサポートします。
-
GET オペレーション — GET API (GET Object を参照) を使用してオブジェクトを取得するときに、このリクエストヘッダーを指定できます。
-
HEAD オペレーション — HEAD API (HEAD Object を参照) を使用してオブジェクトメタデータを取得するには、これらのリクエストヘッダーを指定できます。
-
PUT オペレーション — PUT API (PUT Object を参照) を使用してデータをアップロードするときに、これらのリクエストヘッダーを指定できます。
-
マルチパートアップロード — マルチパートアップロード API を使用して大きいオブジェクトをアップロードするときに、これらのヘッダーを指定できます。これらのヘッダーは、開始リクエスト (Initiate Multipart Upload を参照) と、後続の各パートのアップロードリクエスト (パートのアップロード または
各パートのアップロードリクエストでは、暗号化情報がマルチパートアップロードの開始リクエストで指定した情報と同じである必要があります。
-
POST オペレーション — POST オペレーションを使用してオブジェクトをアップロードする場合は (POST Object を参照)、リクエストヘッダーの代わりに、フォームフィールドで同じ情報を指定します。
-
Copy オペレーション — オブジェクトをコピーする場合 (PUT Object − Copy を参照)、ソースオブジェクトとターゲットオブジェクトがあります。
-
AWS 管理のキーによるサーバー側の暗号化を使用してターゲットオブジェクトを暗号化する場合は、
x-amz-server-side-encryption
リクエストヘッダーを指定する必要があります。 -
SSE−C を使用してターゲットオブジェクトを暗号化する場合は、前の表で説明した 3 つのヘッダーを使用して暗号化情報を指定する必要があります。
-
ソースオブジェクトが SSE−C を使用して暗号化されている場合、Amazon S3 でオブジェクトを復号してコピーできるように、次のヘッダーを使用して暗号化キーの情報を指定する必要があります。
名前 説明 x-amz-copy-source-server-side-encryption-customer-algorithm
Amazon S3 でソースオブジェクトを復号するために使用するアルゴリズムを指定するには、このヘッダーを含めます。この値は、
AES256
である必要があります。x-amz-copy-source-server-side-encryption-customer-key
Amazon S3 でソースオブジェクトを復号するために使用する base64 でエンコードされた暗号化キーを指定するには、このヘッダーを含めます。この暗号化キーは、Amazon S3 でソースオブジェクトを作成したときに指定したキーであることが必要です。それ以外の場合、Amazon S3 でオブジェクトを復号できません。
x-amz-copy-source-server-side-encryption-customer-key-MD5
RFC 1321
に従って、暗号化キーの base64 エンコードされた 128 ビット MD5 ダイジェストを指定するには、このヘッダーを含めます。
-
次の例では、お客様が用意したキーによるサーバー側の暗号化 (SSE−C) をオブジェクト用にリクエストする方法を示します。この例では、次の操作を実行します。各オペレーションでは、SSE−C 関連ヘッダーをリクエストで指定する方法を示します。
-
Put object — オブジェクトをアップロードし、顧客が用意した暗号キーによるサーバー側の暗号化をリクエストします。
-
Get object — 前のステップでアップロードしたオブジェクトをダウンロードします。リクエストでは、オブジェクトのアップロード時に指定したのと同じ暗号化情報を提供します。Amazon S3 は、オブジェクトを復号して返すために、この情報を必要とします。
-
Get object metadata — オブジェクトのメタデータを取得します。オブジェクトの作成時に使用したのと同じ暗号化情報を指定します。
-
Copy object — 以前にアップロードしたオブジェクトのコピーを作成します。ソースオブジェクトは SSE−C を使用して保存されるため、コピーリクエストで暗号化情報を指定する必要があります。デフォルトでは、明示的にリクエストした場合に限り、Amazon S3 はオブジェクトのコピーを暗号化します。この例では、オブジェクトの暗号化されたコピーを保存するように Amazon S3 に指示します。
前のセクションの例では、PUT、GET、Head、および COPY オペレーションで、お客様が用意したキーによるサーバー側の暗号化 (SSE−C) をリクエストする方法を示しています。このセクションでは、SSE−C をサポートするその他の Amazon S3 API について説明します。