データ暗号化の管理

Cloud Storage は、データをディスクに書き込む前に常にサーバー側で暗号化します。暗号化に追加料金はかかりません。このページでは、Cloud Storage を使用しているときにデータを暗号化する各種の方法について説明します。

概要

サーバー側の暗号化は、Cloud Storage がデータを受信した後で行われる暗号化で、データは暗号化された後でディスクに書き込まれて保存されます。

Cloud Storage のデフォルトの動作では、サーバー側の暗号鍵を使用してデータを暗号化します。別の方法として、独自の暗号鍵をサーバー側の暗号化用に提供し、デフォルトの暗号鍵を置き換えることもできます。このようなユーザーが提供した暗号鍵を、「顧客指定の暗号鍵」と呼びます。

クライアント側の暗号化は、データが Cloud Storage に送信される前に行われる暗号化です。つまり、データは暗号化された状態で Cloud Storage に届きます。データを Cloud Storage に書き込む前にクライアント側でデータを暗号化するよう選択できます。

デフォルトのサーバー側での暗号化

デフォルトでは、Cloud Storage は、Google が独自の暗号化データに使用するものと同じ堅牢な鍵管理システム(厳格なアクセス管理や監査を含む)を使用して、ユーザーに代わって暗号鍵を管理します。Cloud Storage は AES-256 を使用して保存ユーザーデータを暗号化し、暗号鍵自体も定期的に変更されるマスター鍵のセットによってそれぞれ暗号化されます。セットアップや設定は必要なく、サービスへのアクセス方法を変更する必要もありません。また、パフォーマンスへの明らかな影響もありません。承認済みのユーザーがデータを読み取る際に、データは自動的かつ透過的に復号化されます。

読み取りと書き込みのオペレーション中にインターネット上で転送されるデータを保護するには、一般的に TLS または HTTPS と呼ばれる Transport Layer Security を使用します。

顧客指定の暗号鍵

独自の鍵を使用する例については、顧客指定の暗号鍵の使用をご覧ください。

Google で管理するサーバー側の暗号鍵の代わりに、標準の Base64 で暗号化した独自の AES-256 鍵を指定することもできます。この鍵は顧客指定の暗号鍵と呼ばれます。顧客指定の暗号鍵を指定した場合、Cloud Storage はその鍵を Google のサーバーに永続的に保存することはなく、またユーザーの鍵を管理することもありません。代わりに、Cloud Storage の各オペレーションについてユーザーが独自の鍵を指定し、そのオペレーションが完了した後で鍵は Google のサーバーから削除されます。Cloud Storage は、鍵の暗号学的ハッシュ関数のみを保存し、今後発生するリクエストをそのハッシュ関数に対して検証できるようにします。このハッシュ関数から鍵を復元することはできません。また、このハッシュ関数を使用してデータを復号化することもできません。

顧客指定の暗号鍵をオブジェクトに適用すると、オブジェクト、その CRC32C チェックサム、およびその MD5 ハッシュが暗号鍵を使用して暗号化されます。その後、こういった情報を読み取る際に暗号鍵が必要になります。オブジェクトの他のメタデータ(オブジェクトの名前など)は、標準のサーバー側の鍵を使用して暗号化されます。これにより、オブジェクトのリストや削除に加え、メタデータの読み取りと更新を実行できます。その際、顧客指定の暗号鍵は必要ありません。ただし、こういった操作を実行する場合は、十分な実行権限が必要です。

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

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

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

制限事項

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

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

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

  • 顧客指定の暗号鍵は、次の国で使用できます。

    アルゼンチン、オーストリア、オーストラリア、ベルギー、ブルガリア、カナダ、チリ、コロンビア、キプロス、チェコ共和国、デンマーク、エストニア、フィンランド、フランス、ドイツ、ギリシャ、香港、ハンガリー、インドネシア、アイルランド、イスラエル、イタリア、日本、リトアニア、ルクセンブルグ、ラトビア、マレーシア、マルタ、メキシコ、オランダ、ニュージーランド、ノルウェー、ペルー、ポーランド、ポルトガル、ルーマニア、シンガポール、スロバキア、南アフリカ、韓国、スペイン、スウェーデン、台湾、タイ、トルコ、イギリス(英国)、アメリカ(米国)、ベトナム

    これら以外の国のユーザーは、国の追加をリクエストできます。

  • gsutil で顧客指定の暗号鍵を使用するには、gsutil 4.18 以降が必要です。

暗号鍵を使用するためのツール

Cloud Storage では複数の方法で顧客指定の暗号鍵を使用できます。たとえば、次の方法があります。

  • パートナー企業。
  • JSON API と XML REST API。
  • gsutil コマンドライン ツール。

暗号鍵とパートナー企業

パートナー各社から顧客指定の暗号鍵を使用する方法がいくつか提供されています。この方法によって、暗号鍵を作成し、その鍵を Cloud Storage のオブジェクトに関連付ける操作が容易になります。Cloud Storage 用の鍵を提供できるパートナーは、Ionic Security や KeyNexus なとです。

詳細については、Cloud Storage のパートナーのページをご覧ください。

REST API での暗号鍵の使用

顧客指定の暗号鍵を使用して JSON API や XML API で直接操作するには、AES-256 鍵と、鍵の SHA 256 ハッシュの両方を指定する必要があります。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 つ以上の復号鍵を指定できます。encryption_key オプションは gsutil で暗号化と復号化の鍵として使用されていますが、指定する decryption_key オプションはオブジェクトの復号化にのみ使用されます。詳しくは、gsutil のドキュメントをご覧ください。

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

顧客指定の暗号鍵を使用してオブジェクトをアップロードし、鍵を提供せずにそのオブジェクトに対して別のオペレーション(メタデータのリクエストと更新、オブジェクトの削除を除く)を実行しようとすると、エラーが発生します。

暗号鍵のローテーション

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

クライアント側での暗号化

サーバー側の暗号化は、クライアント側の暗号化と組み合わせて使用することができます。クライアント側の暗号化を使用して、独自のクライアント側の暗号鍵を管理し、データを Cloud Storage に書き込む前に暗号化することができます。この場合、データはクライアント側鍵で 1 回暗号化され、サーバー側鍵で 1 回暗号化されるため、合計で 2 回暗号化されることになります。オブジェクトを読み取る際は、クライアント側でオブジェクトを復号化する必要があります。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。