顧客指定の暗号鍵

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

サンプルに移動

このページでは、顧客指定の暗号鍵について説明します。他の暗号化オプションについては、データ暗号化オプションをご覧ください。

概要

セキュリティを強化するために、Google が管理する暗号鍵に加え、標準の Base64 でエンコードされた独自の AES-256 鍵を指定することもできます。この鍵は顧客指定の暗号鍵と呼ばれます。顧客指定の暗号鍵を指定した場合、Cloud Storage はその鍵を Google のサーバーに永続的に保存することはなく、またユーザーの鍵を管理することもありません。

代わりに、Cloud Storage のオペレーションごとにユーザーが独自の鍵を指定し、そのオペレーションが完了すると鍵は Google のサーバーから削除されます。Cloud Storage は、鍵の暗号学的ハッシュ関数のみを保存し、その後発生したリクエストをハッシュ関数に対して検証できるようにします。このハッシュ関数から鍵を復元することはできません。また、このハッシュ関数を使用してデータを復号することもできません。

各鍵を安全な場所にバックアップし、信頼されていない第三者と共有されないように注意してください。暗号鍵を含むファイルまたはマシンが不正に使用された場合は、直ちにその鍵で暗号化されたすべてのオブジェクトに対して鍵のローテーションを行う必要があります。

鍵がいつ使用されるのか

顧客指定の暗号鍵をオブジェクトに適用すると、Cloud Storage は以下を暗号化するときに鍵を使用します。

  • オブジェクトのデータ
  • オブジェクトの CRC32C チェックサム
  • オブジェクトの MD5 ハッシュ

Cloud Storage は、オブジェクトの名前など、オブジェクトの残りのメタデータを、標準のサーバー側の鍵を使用して暗号化します。これにより、顧客指定の暗号鍵を必要とせずに、一般的なメタデータの読み取りと更新、およびオブジェクトのリストと削除を行うことができます。ただし、こういった操作を実行する場合は、十分な実行権限が必要です。

たとえば、オブジェクトが顧客指定の暗号鍵で暗号化されている場合は、オブジェクトのダウンロードや移動などの操作を実行するときにはその鍵を使う必要があります。鍵を指定せずにオブジェクトのメタデータを読み取ろうとすると、オブジェクト名と Content-Type などのメタデータは受け取りますが、オブジェクトの CRC32C チェックサムや MD5 ハッシュは受け取りません。オブジェクトのメタデータのリクエストに鍵を指定すると、オブジェクトの CRC32C チェックサムと MD5 ハッシュもメタデータに含まれます。

HTTPS チェック

読み取りと書き込みのオペレーション中にインターネット上で転送されるデータを保護するには、一般的に TLS または HTTPS と呼ばれる Transport Layer Security を使用します。暗号鍵を提供する際には、TLS が必要です。暗号化されていない(HTTP)接続上で、誤って暗号鍵を使用すると、攻撃者に鍵を傍受される可能性があります。このため、Cloud Storage API は、鍵のセキュリティが侵害された可能性があることを警告するエラー メッセージを返します。このエラー メッセージが出た場合は、直ちに鍵をローテーションする必要があります。

制限事項

顧客指定の暗号鍵を使用する場合は次の制限が適用されます。

  • 現在、Cloud Storage Transfer ServiceCloud Dataflow では、顧客指定の暗号鍵を使用して暗号化されたオブジェクトはサポートされていません。

  • Google Cloud コンソールを使用して、顧客指定の暗号鍵で暗号化されたオブジェクトをダウンロードすることはできません。同様に、Google Cloud コンソールを使用してオブジェクトをアップロードする場合、顧客指定の暗号鍵ではそのオブジェクトを暗号化できません。

  • 個々のオブジェクトに設定できるのは顧客指定の暗号鍵だけです。バケットにデフォルトの顧客指定の暗号鍵を設定することはできません。

  • 顧客指定の暗号鍵で暗号化されたオブジェクトに compose オペレーションを実行する場合、コンポーネントのオブジェクトを同じ鍵で暗号化し、作成リクエストでその鍵を提供する必要があります。結果として得られる複合オブジェクトは同じ鍵で暗号化されます。

REST API での暗号鍵の使用

顧客指定の暗号鍵を使用していて、JSON API や XML API を直接操作する場合、AES-256 鍵と鍵の SHA256 ハッシュの両方を指定する必要があります。AES-256 鍵と、鍵の SHA256 ハッシュはどちらも安全に保存する必要があります。Google は、オブジェクトのメタデータのユーザー指定鍵の SHA256 ハッシュを保存し、ユーザーは後でそれを取得することができます。Google(または他のユーザー)は、この SHA256 ハッシュを使用してデータを復号することはできません。これは、特定のオブジェクトの暗号化に使用された AES-256 鍵を一意に識別できるような方法で保存されています。

リクエスト ヘッダー

次の HTTP ヘッダーを JSON または XML リクエストに含めます。

ヘッダー名 説明
x-goog-encryption-algorithm 文字列 使用する暗号化アルゴリズム。値 AES256 を使用する必要があります。
x-goog-encryption-key 文字列 RFC 4648 の Base64 でエンコードされた、ユーザーの AES-256 暗号鍵の文字列
x-goog-encryption-key-sha256 文字列 RFC 4648 の Base64 でエンコードされた、ユーザーの暗号鍵の SHA256 ハッシュの文字列

JSON API で rewrite オペレーションを実行中の場合、上記のヘッダーが宛先オブジェクトの暗号化に使用され、以下のヘッダーが元のオブジェクトの復号に使用されます。

ヘッダー名 説明
x-goog-copy-source-encryption-algorithm 文字列 使用する暗号化アルゴリズム。値 AES256 を使用する必要があります。
x-goog-copy-source-encryption-key 文字列 RFC 4648 の Base64 でエンコードされた、オブジェクトの AES-256 暗号鍵
x-goog-copy-source-encryption-key-sha256 文字列 RFC 4648 の Base64 でエンコードされた、オブジェクトの暗号鍵の SHA256 ハッシュの文字列

レスポンス

JSON

JSON API の使用時、顧客指定の暗号鍵のメタデータはレスポンスの本文で返されます。これには、以下の追加プロパティが含まれます。

プロパティ名 説明
customerEncryption オブジェクト リクエストに使用された暗号化の情報
customerEncryption.encryptionAlgorithm 文字列 使用された暗号化アルゴリズム。常に値 AES256 が含まれます。
customerEncryption.keySha256 文字列 RFC 4648 の Base64 でエンコードされた、ユーザーの暗号鍵の SHA256 ハッシュの文字列。この SHA256 ハッシュを使用して、オブジェクトの復号に必要な AES-256 暗号鍵を一意に識別することができます。この鍵は安全に保存する必要があります。

XML

XML API の使用時、レスポンスには以下のヘッダーが含まれます。

ヘッダー名 説明
x-goog-encryption-algorithm 文字列 使用された暗号化アルゴリズム。常に値 AES256 が含まれます。
x-goog-encryption-key-sha256 文字列 RFC 4648 の Base64 でエンコードされた、ユーザーの暗号鍵の SHA256 ハッシュの文字列。この SHA256 ハッシュを使用して、オブジェクトの復号に必要な AES-256 暗号鍵を一意に識別することができます。この鍵は安全に保存する必要があります。

以下の場合、HTTP 400 エラーを受け取ります。

  • 顧客指定の暗号鍵を使用してオブジェクトをアップロードし、鍵を提供せずにそのオブジェクトに対して別のオペレーション(メタデータのリクエストと更新、オブジェクトの削除を除く)を実行しようとした。
  • 顧客指定の暗号鍵を使用してオブジェクトをアップロードし、誤った鍵を使用してそのオブジェクトに対して別のオペレーションを実行しようとした。
  • 顧客指定の暗号鍵を提供せずにオブジェクトをアップロードし、顧客指定の暗号鍵を使用してそのオブジェクトに対して別のオペレーションを実行しようとした。
  • 無効な暗号化アルゴリズム、鍵、SHA256 ハッシュを指定した。

gsutil での暗号鍵の使用

gsutil で顧客指定の暗号鍵を使用するには、boto 構成ファイル[GSUtil] セクションに次のオプションを追加します。

オプション名 説明
encryption_key 文字列 RFC 4648 の Base64 でエンコードされた、ユーザーの AES-256 暗号鍵の文字列

オプションで 1 つ以上の復号鍵を指定できます(最大 100 個)。encryption_key オプションは gsutil で暗号化と復号の鍵として使用されていますが、指定する decryption_key オプションはオブジェクトの復号にのみ使用されます。boto 構成ファイルでは、次のように複数の復号鍵を指定する必要があります。

decryption_key1 = ...
decryption_key2 = ...
decryption_key3 = ...

boto 構成ファイルで暗号鍵または復号鍵が指定されていれば、それらがすべての gsutil コマンドに使用されます。復号の際、gsutil は指定された暗号化と復号の鍵の SHA256 ハッシュを計算し、オブジェクトのメタデータの SHA256 に一致させることにより、特定のオブジェクトに使用する正しい復号鍵を選択します。

顧客指定の暗号鍵で暗号化されたオブジェクトは、以下のオペレーションに対応する復号鍵が必要です。

  • ダウンロードまたはコピー。たとえば、gsutil catcpmvrsync コマンドを使用します。

  • 暗号化されたオブジェクトの CRC32C または MD5 ハッシュの表示。たとえば、ls -L コマンドや stat コマンドを使用します。

encryption_key フィールドを指定せずに顧客指定の暗号鍵または顧客管理の暗号鍵で暗号化されたオブジェクトの上書きまたは書き換えを行うと、次のようになります。

  • 適切な復号鍵をコマンドに含めると、gsutil はバケットのデフォルトの暗号鍵、またはデフォルトの鍵が存在しない場合は Google が管理する暗号鍵を使用してオブジェクトを暗号化します。

  • 書き換えでは、コマンドに適切な復号鍵を含めないとエラーが発生します。

強制終了やネットワーク タイムアウトの後に gsutil cp オブジェクトのアップロードを再実行するなど、書き込みまたはコピー オペレーションが部分的に完了している段階で encryption_key が変更された場合、gsutil は部分的に完了したそのオペレーションを再開し、確実に新しい鍵を使って宛先オブジェクトが書き込まれるようにします。

暗号鍵のローテーション

顧客指定の暗号鍵を使用してオブジェクトを暗号化している場合、オブジェクトを書き換えることによってオブジェクトの鍵をローテーションさせることができます。書き換え処理は JSON API ではサポートされますが、XML API ではサポートされません。鍵のローテーションの例については、暗号鍵のローテーションをご覧ください。

次のステップ