このページでは、顧客管理の暗号鍵と Cloud Storage での使用方法について説明します。他の暗号化オプションについては、データ暗号化オプションをご覧ください。
概要
鍵オペレーションを標準の Cloud Storage 暗号化よりも細かく制御する必要がある場合は、顧客管理の暗号鍵(CMEK)を使用できます。これらの鍵は Cloud Key Management Service(Cloud KMS)を使用して作成および管理され、HSM クラスタまたは外部にソフトウェア鍵として保存されます。個々のオブジェクトに CMEK を使用できます。また、バケットに追加されたすべての新しいオブジェクトで鍵がデフォルトで使用されるようにバケットを構成することもできます。
CMEK を使用すると、オブジェクトはバケットに保存されるときに Cloud Storage によって鍵で暗号化されます。オブジェクトがリクエスト元に提供されるときに、Cloud Storage によって自動的に復号されます。
CMEK は直接作成することも、Cloud KMS Autokey(プレビュー版)を使用して鍵を作成することもできます。詳細については、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 の詳細を確認する。