デフォルトでは、Cloud Storage はお客様のコンテンツを保存時に暗号化します。暗号化は、Cloud Storage が行うため、ユーザー側での操作は必要ありません。このオプションは、Google のデフォルトの暗号化と呼ばれます。
暗号鍵を管理する場合は、Cloud KMS の顧客管理の暗号鍵(CMEK)を、Cloud Storage などの CMEK 統合サービスで使用できます。Cloud KMS 鍵を使用すると、保護レベル、ロケーション、ローテーション スケジュール、使用とアクセスの権限、暗号境界を制御できます。Cloud KMS を使用すると、鍵の使用状況を追跡すること、監査ログを表示すること、鍵のライフサイクルを管理することが可能です。データを保護する対称鍵暗号鍵(KEK)は Google が所有して管理するのではなく、ユーザーが Cloud KMS でこれらの鍵を制御および管理します。
CMEK を使用してリソースを設定した後は、Cloud Storage リソースへのアクセスは、Google のデフォルトの暗号化を使用する場合と同様です。CMEK の詳細については、顧客管理の暗号鍵(CMEK)をご覧ください。手動で作成した CMEK を使用して Cloud Storage リソースを保護する方法については、顧客管理の暗号鍵を使用するをご覧ください。
Cloud Storage を使用する際の他の暗号化オプションの詳細については、データ暗号化オプションをご覧ください。
Cloud KMS Autokey による CMEK
CMEK は手動で作成して、Cloud Storage バケットとその中のオブジェクトを保護することも、Cloud KMS Autokey を使用することもできます。Autokey を使用すると、Cloud Storage のリソースの作成または更新の一環として、キーリングと鍵がオンデマンドで生成されます。暗号化と復号のオペレーションに鍵を使用するサービス エージェントがまだ存在しない場合、そのエージェントが作成され、必要な Identity and Access Management(IAM)ロールが付与されます。詳細については、Autokey の概要をご覧ください。
Autokey はオブジェクトの鍵を作成しません。デフォルトでは、バケット内のオブジェクトはバケットのデフォルト鍵を使用します。バケットのデフォルト以外の鍵を使用してオブジェクトを暗号化する場合は、CMEK を手動で作成し、オブジェクトの作成時にその鍵を使用できます。
Cloud KMS Autokey によって作成された CMEK を使用して Cloud Storage バケットとその中のオブジェクトを保護する方法については、Cloud Storage リソースでの Autokey の使用をご覧ください。
鍵がいつ使用されるのか
CMEK をオブジェクトに適用すると、Cloud Storage は次のものを暗号化するときに鍵を使用します。
- オブジェクトのデータ
- オブジェクトの CRC32C チェックサム
- オブジェクトの MD5 ハッシュ
Cloud Storage は、オブジェクトの名前など、オブジェクトの残りのメタデータを、標準のサーバー側の鍵を使用して暗号化します。そのため、十分な権限を持っていれば、関連する CMEK を無効化または破棄した後でも、ほとんどのメタデータの読み取り、オブジェクトの一覧表示、オブジェクトの削除などの操作を実行できます。
サービス エージェント
各プロジェクトには、サービス エージェントという特別な Cloud Storage サービス アカウントがあり、CMEK で暗号化と復号を行います。暗号鍵へのアクセス権をサービス エージェントに付与すると、そのサービス エージェントは次のものを暗号化できます。
- その鍵をデフォルト鍵として使用するバケットに追加されたオブジェクト。
- その鍵を使用して暗号化することをユーザーが指示した特定のオブジェクト。
Cloud Storage でオブジェクトを追加したり書き換えたりする際に、バケットにデフォルトの暗号鍵を設定しているだけでなくリクエストにも特定の鍵を含めている場合、Cloud Storage ではオブジェクトの暗号化にその特定の鍵が使用されます。
リクエスト元は、CMEK によって暗号化されたオブジェクトを読み取る場合、通常どおりの方法で単純にオブジェクトにアクセスします。このようなリクエストの処理中に、以下の条件が該当すると、リクエストされたオブジェクトがサービス エージェントによって自動的に復号されます。
- サービス エージェントに、その鍵を使用して複合化する権限が引き続き保持されている。
- その鍵を無効化も破棄もしていない。
この条件が 1 つでも満たされない場合、サービス エージェントでデータが復号されず、リクエストは失敗します。
制限事項
CMEK を使用する場合、次の制限が適用されます。
オブジェクトのメタデータを更新しても、CMEK でオブジェクトを暗号化することはできません。代わりに、オブジェクトの書き換えの一部としてその暗号鍵を含めてください。
gcloud storage
では、objects update
コマンドを使用してオブジェクトの暗号鍵を設定しますが、このコマンドはリクエストの一部でオブジェクトを書き換えます。
Cloud KMS キーリングは、暗号化するデータと同じロケーションに作成する必要があります。たとえば、バケットが
US-EAST1
にある場合、そのバケットのオブジェクトの暗号化に使用されるキーリングもUS-EAST1
に作成する必要があります。デュアルリージョンの場合、Cloud KMS キーリングのロケーションはデュアルリージョンのロケーション コードと一致する必要があります。たとえば、バケットが構成可能なデュアルリージョン ペア(
US-EAST1
、US-WEST1
)にある場合、そのバケット内のオブジェクトの暗号化に使用するキーリングは、このバケットのロケーション コードと一致するUS
マルチリージョンに作成する必要があります。バケットが事前定義のデュアルリージョンNAM4
にある場合は、同じ事前定義のデュアルリージョンNAM4
にキーリングを作成する必要があります。指定できる Cloud KMS のロケーションについては、Cloud KMS のロケーションをご覧ください。
Cloud KMS の暗号化と復号の割合は、割り当ての対象になります。
JSON API を使用してオブジェクトを一覧表示する場合、CMEK を使用して暗号化されたオブジェクトの CRC32C チェックサムと MD5 ハッシュは返されません。
gcloud storage
などの一部のツールを使って、CRC32C と MD5 の情報を取得するために、CMEK で暗号化された各オブジェクトに対して追加のメタデータGET
リクエストを実行します。このような追加リクエストにより、標準の Cloud Storage 暗号化で暗号化されたオブジェクトを一覧表示する場合よりも、リスティングが大幅に遅くなる可能性があります。
CMEK として使用できるのは、対称暗号鍵のみです。
顧客指定の暗号鍵との関係
Cloud Storage には、データ暗号化を制御する方法として、顧客管理の暗号鍵のほかに顧客指定の暗号鍵が用意されています。1 つのバケット内のオブジェクトをそれぞれ異なる暗号化方式を使用して暗号化できますが、次の点に注意してください。
1 つのオブジェクトの暗号化に使用できる暗号化方式は一度に 1 種類です。
バケットに対してデフォルトの CMEK を設定していて、リクエスト内で顧客指定の暗号鍵を指定した場合、Cloud Storage ではオブジェクトの暗号化に顧客指定の暗号鍵が使用されます。
鍵管理
このセクションでは、鍵のローテーション、鍵の置換、鍵バージョンの無効化または破棄に関する考慮事項について説明します。
鍵のローテーション
Cloud KMS は、新しいバージョンに対して自動と手動どちらの鍵のローテーションもサポートしています。鍵をローテーションした後で、Cloud Storage は、鍵を使用して暗号化するすべてのオペレーション新しいバージョンを使用します。オペレーションの例を次に示します。
転送先バケットが鍵をデフォルトの暗号鍵として使用するときの、オブジェクトのアップロード。
鍵を明示的に使用するオブジェクトのアップロード、コピー、リライト オペレーション。
以前のバージョンの鍵は無効化も破棄もされないため、Cloud Storage は、そのバージョンを使用して暗号化された既存のオブジェクトを引き続き復号できます。
鍵の置き換え
Cloud Storage オブジェクトの暗号化に使用する鍵を新しい鍵に置き換える場合は、次のガイドラインを参考にしてください。
鍵をデフォルトの暗号鍵として使用するには、バケットをチェックします。これらのバケットについて、古い鍵を新しい鍵に置き換えます。
これで、バケットに書き込まれたすべてのオブジェクトで、新しい鍵が使用されるようになります。
ソースコードを調べて、バケット構成やオブジェクトのアップロード、コピー、リライトなど、進行中のオペレーションでどのリクエストが鍵を使用しているか把握します。把握したリクエストで新しい鍵を使用するように更新します。
すべてのバケットについて、古い鍵で暗号化されたオブジェクトをチェックします。オブジェクト書き換えメソッドを使用して、新しい鍵を使用して各オブジェクトを再暗号化します。
古い鍵のすべてのバージョンを無効にします。古い鍵バージョンを無効にした後、特定のバージョンが使用できないために失敗したオペレーションのクライアント ログとサービスログをモニタリングします。
鍵バージョンの無効化または破棄
特定の鍵バージョンを無効または破棄する場合、現在その鍵バージョンで暗号化されているオブジェクトを復号することはできません。
たとえば、オブジェクトのダウンロード、コピー、リライトができず、そのようなオペレーションを行うとエラーになります。
無効にした鍵バージョンは再び有効にできます。再度有効にすると、その鍵バージョンで暗号化されていたオブジェクトにアクセスできるようになります。
鍵バージョンを破棄すると、そのバージョンで暗号化されていたオブジェクトのダウンロードはできなくなります。
鍵バージョンを無効化または破棄する前に、特定の鍵バージョンを使用して暗号化されたすべてのオブジェクトを、すべてのバケットの中から特定する必要があります。オブジェクトが特定できたら、オブジェクト書き換えメソッドで、新しい鍵バージョン、新しい鍵、サーバー側の鍵のいずれかを使用して各オブジェクトを再暗号化します。
鍵のメインのバージョンを無効または破棄すると、新しいメインのバージョンが作成されるまで、その鍵を暗号化に使用することはできません。たとえば、メインのバージョンがない場合には、次のようになります。
オブジェクトのアップロード、コピー、リライトの一部として鍵を指定することはできません。
別の有効な鍵をオペレーションの一部として指定しない限り、鍵をデフォルトの暗号鍵として設定しているバケットに対し、オブジェクトのアップロード、コピー、リライトができません。
鍵のメインのバージョンを取得したら、その鍵を使用してオブジェクトを暗号化するオペレーションが成功します。
鍵のメインのバージョンを無効化または破棄する前に、このバージョンをメインのバージョンとして使用することを停止する必要があります。これは、次のいずれかの方法で行うことができます。
- 新しいメインのバージョンに置き換える(通常は鍵のローテーションを行う)。
- 暗号化に鍵を使用するインスタンスを削除する。この場合、Cloud Storage は代わりにサーバー側の鍵を使用して暗号化を行います。
鍵バージョンとロックされたオブジェクト
ロックされたオブジェクトが鍵バージョンによって暗号化されている場合、そのオブジェクトはロックされた保持ポリシーのあるバケットに保存されているか、オブジェクト固有のロックされた保持構成が存在するため、次の条件を満たしている場合にのみ鍵バージョンを破棄できます。
- 暗号化されたオブジェクトの保持期間が過去の日付になっている。
- 暗号化されたオブジェクトにオブジェクト保留が設定されていない。
関連するすべてのオブジェクトがこれらの条件を満たすと、オブジェクトを削除しなくても鍵バージョンを破棄できます。この操作を行うと、影響を受けるオブジェクト データにアクセスできなくなります。
次のステップ
- Cloud Storage のバケットとオブジェクトに CMEK を設定する。
- Cloud Storage での暗号化の詳細を確認する。
- Cloud KMS の詳細を確認する。