このページでは、顧客指定の暗号鍵について説明します。他の暗号化オプションについては、データ暗号化オプションをご覧ください。
概要
標準の Cloud Storage 暗号化に加えて、標準の Base64 でエンコードされた独自の AES-256 暗号鍵を指定することもできます。この鍵は顧客指定の暗号鍵(CSEK)と呼ばれます。顧客指定の暗号鍵を指定した場合、Cloud Storage はその鍵をサーバーに永続的に保存しません。また、鍵を管理することもありません。
代わりに、Cloud Storage のオペレーションごとにユーザーが独自の鍵を指定し、そのオペレーションが完了すると鍵は Cloud Storage のサーバーから削除されます。Cloud Storage は、鍵の暗号学的ハッシュ関数のみを保存し、今後発生するリクエストをそのハッシュ関数に対して検証できるようにします。このハッシュ関数から鍵を復元することはできません。また、このハッシュ関数を使用してデータを復号することもできません。
各鍵を安全な場所にバックアップし、信頼されていない第三者と共有されないように注意してください。暗号鍵を含むファイルまたはマシンが不正に使用された場合は、直ちにその鍵で暗号化されたすべてのオブジェクトに対して鍵のローテーションを行う必要があります。
鍵がいつ使用されるのか
顧客指定の暗号鍵をオブジェクトに適用すると、Cloud Storage は以下を暗号化するときに鍵を使用します。
- オブジェクトのデータ
- オブジェクトの CRC32C チェックサム
- オブジェクトの MD5 ハッシュ
Cloud Storage は、保存時のデフォルト暗号化を使用して、オブジェクトの名前を含む、オブジェクトの残りのメタデータを暗号化します。これにより、顧客指定の暗号鍵を必要とせずに、一般的なメタデータの読み取りと更新、およびオブジェクトのリスト、上書き、削除を行うことができます。ただし、こういった操作を実行する場合は、十分な実行権限が必要です。
たとえば、顧客指定の暗号鍵でオブジェクトが暗号化されている場合は、オブジェクトのダウンロードや移動などの操作を実行するときには、その鍵を使う必要があります。鍵を指定せずにオブジェクトのメタデータを読み取ろうとすると、オブジェクト名と Content-Type
などのメタデータは受け取りますが、オブジェクトの CRC32C チェックサムや MD5 ハッシュは受け取りません。オブジェクトのメタデータのリクエストに鍵を指定すると、オブジェクトの CRC32C チェックサムと MD5 ハッシュもメタデータに含まれます。
書き換え動作
書き換えたオブジェクトを暗号化するための鍵を指定せずに、顧客指定の暗号鍵で暗号化されたオブジェクトを書き換えると、次のようになります。
適切な復号鍵をリクエストに含めると、書き換えられたオブジェクトは、転送先バケットのデフォルトの Cloud Key Management Service 暗号鍵を使用して暗号化されます。そのような鍵が存在しない場合は標準の Cloud Storage 暗号化によって暗号化されます。
リクエストに適切な復号鍵を含めないと、エラーが発生します。
HTTPS チェック
読み取りと書き込みのオペレーション中にインターネット上で転送されるデータを保護するには、一般的に TLS または HTTPS と呼ばれる Transport Layer Security を使用します。暗号鍵を提供する際には、TLS が必要です。暗号化されていない(HTTP)接続上で、誤って暗号鍵を使用すると、攻撃者に鍵を傍受される可能性があります。このため、Cloud Storage API は、鍵のセキュリティが侵害された可能性があることを警告するエラー メッセージを返します。このエラー メッセージが出た場合は、直ちに鍵をローテーションする必要があります。
制限事項
顧客指定の暗号鍵を使用する場合は次の制限が適用されます。
Google Cloud コンソールを使用して、顧客指定の暗号鍵で暗号化されたオブジェクトをダウンロードすることはできません。同様に、Google Cloud コンソールを使用してオブジェクトをアップロードする場合、顧客指定の暗号鍵を使用してオブジェクトを暗号化することはできません。
現在、Cloud Storage Transfer Service と Cloud Dataflow では、顧客指定の暗号鍵を使用して暗号化されたオブジェクトはサポートされていません。
個々のオブジェクトに設定できるのは顧客指定の暗号鍵だけです。バケットにデフォルトの顧客指定の暗号鍵を設定することはできません。
顧客指定の暗号鍵で暗号化されたオブジェクトに
compose
オペレーションを実行する場合、コンポーネントのオブジェクトを同じ鍵で暗号化し、作成リクエストでその鍵を提供する必要があります。結果として得られる複合オブジェクトは同じ鍵で暗号化されます。顧客指定の暗号鍵で暗号化されたオブジェクトを提供する場合、Cloud Storage はオブジェクトに関連付けられている
Cache-Control
メタデータを無視し、Cache-Control
をprivate, max-age=0
に設定してオブジェクトを提供します。
REST API での暗号鍵の使用
顧客指定の暗号鍵を使用していて、JSON API や XML API を直接操作する場合、AES-256 鍵と鍵の SHA256 ハッシュの両方を指定する必要があります。AES-256 鍵と、鍵の SHA256 ハッシュはどちらも安全に保存する必要があります。Cloud Storage は、オブジェクトのメタデータのユーザー指定鍵の SHA256 ハッシュを保存し、ユーザーは後でそれを取得することができます。Cloud Storage(または他のユーザー)は、この 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 ハッシュを指定した。
gcloud storage
での暗号鍵の使用
Google Cloud CLI では、顧客指定の暗号鍵の使用がサポートされています。gcloud CLI で顧客指定の暗号鍵を使用する場合は、次の点に注意してください。
暗号鍵として指定された鍵は、コマンドで暗号鍵として使用されます。また、必要に応じて復号鍵としても使用されます。
必要に応じて、最大 100 個の復号鍵を指定できます。これらの鍵はオブジェクトを復号する場合にのみ使用されます。
復号時に、指定された暗号鍵と復号鍵の SHA256 ハッシュが計算され、オブジェクトのメタデータに含まれる SHA256 ハッシュと比較され、特定のオブジェクトに使用する正しい鍵が選択されます。
既存のオブジェクトに対して顧客指定の暗号鍵を追加またはローテーションすると、そのオブジェクトがリクエストの一部として書き換えられます。これは、
gcloud storage objects update
コマンドにも当てはまります。顧客指定の暗号鍵で暗号化されたオブジェクトの MD5 または CRC32C ハッシュを返すことができるリストコマンドは、このようなオブジェクトごとに追加のメタデータ
GET
リクエストを実行します。このような追加リクエストにより、標準の Cloud Storage 暗号化で暗号化されたオブジェクトを一覧表示する場合よりも、リスティングが大幅に遅くなる可能性があります。強制終了またはネットワーク タイムアウトに達した後で
cp
のアップロードを再実行する場合など、書き込みまたはコピー オペレーションが部分的に完了した時点で暗号鍵が変更される場合、オペレーションが再起動され、宛先オブジェクトが新しい鍵で書き込まれます。
暗号鍵のローテーション
顧客指定の暗号鍵を使用してオブジェクトを暗号化している場合、オブジェクトを書き換えることによってオブジェクトの鍵をローテーションさせることができます。書き換え処理は JSON API ではサポートされますが、XML API ではサポートされません。鍵のローテーションの例については、暗号鍵のローテーションをご覧ください。
次のステップ
- 顧客指定の暗号鍵を使用する方法を確認する。