メニュー
Amazon Simple Storage Service
開発者ガイド (API Version 2006-03-01)

お客様が用意した暗号化キーによるサーバー側の暗号化(SSE-C)を使用したデータの保護

サーバー側の暗号化は、保管時のデータ保護に関するものです。お客様が用意した暗号化キーでのサーバー側の暗号化 (SSE-C) を使用すると、独自の暗号化キーを設定できます。リクエストの一部として用意された暗号化キーで、Amazon S3 は、ディスクに書き込む際の暗号化と、オブジェクトにアクセスする際の復号の両方を管理します。したがって、データの暗号化と復号を実行するコードをお客様が管理する必要はありません。必要なことは、お客様が用意する暗号化キーを管理することだけです。

オブジェクトをアップロードする場合、Amazon S3 はお客様が用意した暗号化キーを使用してデータに AES-256 暗号化を適用し、メモリから暗号化キーを削除します。

重要

Amazon S3 では、お客様が用意した暗号化キーを保存しません。代わりに、以降のリクエストを検証するために、ランダムな SALT 値が付加された暗号化キーの HMAC 値を保存します。SALT 値が付加された HMAC 値を使用して、暗号化キーの値を求めたり、暗号化されたオブジェクトの内容を復号したりすることはできません。これは、暗号化キーを失った場合、オブジェクトが失われることを意味します。

オブジェクトを取得するときは、リクエストの中で同じ暗号化キーを指定する必要があります。Amazon S3 では、最初に指定された暗号化キーが一致することを確認した後、オブジェクトを復号してから、オブジェクトデータを返します。

SSE-C の特長は次のとおりです。

  • https を使用する必要があります。

    重要

    SSE-C を使用する場合、Amazon S3 では http を使用するすべてのリクエストを却下します。セキュリティ上の考慮事項として、誤って http を使用して送信されたキーは漏洩したと見なすことをお勧めします。キーを破棄して、必要に応じて更新してください。

  • レスポンスの ETag はオブジェクトデータの MD5 ではありません。

  • 使用した暗号化キーと暗号化したオブジェクトのマッピングは、お客様に管理していただきます。Amazon S3 では暗号化キーを保存しません。どのオブジェクトにどの暗号化キーを使用したかは、お客様が管理してください。

    • バケットのバージョニングが有効になっている場合、この機能を使用してアップロードする各オブジェクトバージョンに、独自の暗号化キーを使用できます。どのオブジェクトバージョンにどの暗号化キーを使用したかは、お客様が管理してください。

    • クライアント側の暗号化キーはお客様が管理するため、キーの更新など、クライアント側での追加の安全対策はお客様に管理していただきます。

    警告

    暗号化キーを失った場合、暗号化キーを使用せずにオブジェクトに対して GET リクエストを実行すると失敗し、オブジェクトは失われます。

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 に従って、暗号化キーの base64 エンコードされた 128 ビット MD5 ダイジェストを指定するには、このヘッダーを使用します。Amazon S3 では、このヘッダーを使用してメッセージの整合性を調べて、送信された暗号化キーにエラーがないことを確認します。

AWS SDK ラッパーライブラリを使用して、これらのヘッダーをリクエストに追加できます。必要に応じて、アプリケーションから直接 Amazon S3 REST API を呼び出すことができます。

注記

Amazon S3 コンソールを使用してオブジェクトをアップロードし、SSE-C をリクエストすることはできません。また、コンソールを使用して、SSE-C を使用して保存されている既存のオブジェクトを更新すること(ストレージクラスの変更やメタデータの追加など)もできません。

以下の Amazon S3 API でこれらのヘッダーがサポートされています。

  • GET オペレーション – GET API(「GET Object」を参照)を使用してオブジェクトを取得するときに、このリクエストヘッダーを指定できます。SSE-C を使用して暗号化されたオブジェクトについては、Torrent はサポートされていません。

  • HEAD オペレーション – HEAD API(「HEAD Object」を参照)を使用してオブジェクトメタデータを取得するには、これらのリクエストヘッダーを指定できます。

  • PUT オペレーション – PUT API(「PUT Object」を参照)を使用してデータをアップロードするときに、これらのリクエストヘッダーを指定できます。

  • マルチパートアップロード – マルチパートアップロード API を使用して大きいオブジェクトをアップロードするときに、これらのヘッダーを指定できます。これらのヘッダーは、開始リクエスト(「Initiate Multipart Upload」を参照)と、後続の各パートのアップロードリクエスト(「Upload Part」)で指定します。各パートのアップロードリクエストでは、暗号化情報がマルチパートアップロードの開始リクエストで指定した情報と同じである必要があります。

  • 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 ダイジェストを指定するには、このヘッダーを含めます。

署名済み URL と SSE-C

新しいオブジェクトのアップロード、既存のオブジェクトやオブジェクトメタデータの取得などのオペレーションに使用できる署名済み URL を生成できます。署名済み URL では、次のように SSE-C がサポートされます。

  • 署名済み URL を作成するときに、署名の計算で x-amz-server-side​-encryption​-customer-algorithm を使用してアルゴリズムを指定する必要があります。

  • 署名済み URL を使用して新しいオブジェクトをアップロードするとき、既存のオブジェクトを取得するとき、またはオブジェクトメタデータのみを取得するときに、クライアントアプリケーションですべての暗号化ヘッダーを指定する必要があります。

詳細については、次のトピックを参照してください。

このページの内容: