顧客指定の暗号鍵

顧客指定の暗号鍵(Customer-Supplied Encryption Keys、CSEK)は、Google Cloud Storage および Google Compute Engine の機能です。お客様が独自の暗号鍵を提供した場合、Google はその鍵を使用して、データの暗号化と複合化に使用される Google 生成の鍵を保護します。

このトピックで使用する用語:

  • データ暗号鍵(DEK): データを暗号化するために使用される鍵。

  • 鍵暗号鍵(KEK): データ暗号鍵を暗号化(「ラップ」とも)するために使用される鍵。

  • Cluster Manager: Google の本番環境インフラストラクチャ内で、Cluster Manager の ID で実行される一連のプロセス。ディスクや VM インスタンスなどの Compute Engine リソースを管理するロジックを実装します。これらのリソースに関連するメタデータも保存します。

  • Instance Manager: Google の本番環境インフラストラクチャ内で、Instance Manager の ID で実行される一連のプロセス。VM の起動 / 停止やディスクの接続 / 接続解除など、フリートの VM インスタンス(プロセス)に対する変更を実行します。Cluster Manager は任意の時点において VM のあるべき状態を指定し、Instance Manager はそれに対してオペレーションを実行します。

顧客指定の暗号鍵の仕組み

以下のセクションでは、顧客指定の暗号鍵が Google Cloud Storage および Google Compute Engine でどのように機能するかを説明します。

Cloud Storage

Cloud Storage で顧客指定の暗号鍵を使用する場合:

  • 未加工の CSEK を API 呼び出しの一部として指定します。この鍵は、Google のフロントエンドからストレージ システムのメモリに送信されます。この鍵は Google Cloud Storage でデータの鍵暗号鍵として使用されます。

  • 未加工の CSEK は、ラップされたチャンク鍵をラップ解除してメモリ内に未加工チャンク鍵を作成するために使用されます。この鍵はストレージ システムに格納されたデータチャンクの復号化に使用されます。この鍵は Google Cloud Storage で、ユーザーのデータのデータ暗号鍵(DEK)として使用されます。

    Cloud Storage CSEK

保存先 目的 アクセス期限
未加工 CSEK ストレージ システムのメモリ 顧客が指定します。
チャンク鍵用の鍵暗号鍵(KEK)です。
チャンク鍵をラップします。
顧客が要求したオペレーション(insertObjectgetObject など)が完了するまで
ラップされたチャンク鍵 ストレージ デバイス 保存されているチャンク鍵を保護します。 ストレージ オブジェクトが削除されるまで
未加工チャンク鍵 ストレージ デバイスのメモリ データのデータ暗号鍵 (DEK)です。
ディスクのデータの読み書きを行います。
顧客が要求したオペレーションが完了するまで

Compute Engine

Compute Engine で顧客指定の暗号鍵を使用する場合:

  • 未加工の CSEK を API 呼び出しの一部として指定します。

  • この鍵は、Google のフロントエンドから Cluster Manager のフロントエンドに送信されます。

    • ラップされた CSEK が指定された場合、その CSEK は Google 所有の非対称ラッピング鍵を使用してラップ解除されます。
    • 未加工の CSEK は永続ディスクごとの暗号ノンスと結合され、CSEK 派生鍵が生成されます。この鍵は Google Compute Engine で、ユーザーのデータの鍵暗号鍵として使用されます。

  • Cluster Manager のフロントエンドでは、CSEK および CSEK 派生鍵は Cluster Manager のメモリにのみ保持されます。CSEK 派生鍵は Cluster Manager のメモリ内で、ラップされたディスク鍵のラップを解除するために使用されます。このディスク鍵は、自動再起動が有効になっている場合、Cluster Manager のインスタンス メタデータおよび Instance Manager のメタデータに格納されます(インスタンス メタデータと同じではありません)。

    • CSEK 派生鍵は、ディスクの作成時には未加工のディスク鍵をラップし、ディスクへのアクセス時には未加工のディスク鍵をラップ解除するために使用されます。
      • 自動再起動が有効になっている場合は、クラッシュ時に VM を再起動できるよう、VM の存続期間中はラップされたディスク鍵が Cluster Manager によって保持されます。ラップされたディスク鍵は、Google 所有の対称ラッピング鍵でラップされます。設定された権限により、この鍵は Google Compute Engine のみが使用できるようになっています。
      • ライブ マイグレーションが有効になっている場合は、Instance Manager または Cluster Manager が鍵のコピーに関与することなく、未加工のディスク鍵が古い VM インスタンス メモリから新しい VM インスタンス メモリに渡されます。

  • 未加工のディスク鍵は、Cluster Manager、Instance Manager、および Virtual Machine のメモリに渡されます。これらの鍵は Google Compute Engine で、ユーザーのデータのデータ暗号鍵として使用されます。

    Compute Engine CSEK

保持される場所 目的 アクセス期限
未加工 CSEK Cluster Manager フロントエンド 顧客が指定します。
暗号ノンスを追加して CSEK 派生鍵を導出するために使用されます。
顧客が要求したオペレーション(instances.insertinstances.attachDisk など)が完了するまで
公開鍵でラップされた CSEK
(オプション - RSA 鍵のラッピングを使用する場合)
Cluster Manager フロントエンド 顧客がオプションで指定します。
まず Google 所有の非対称鍵でラップ解除して、CSEK 派生鍵を導出するために使用されます。
顧客が要求したオペレーションが完了するまで
非対称ラッピング鍵
(RSA 鍵のラッピングを使用する場合)
Google の内部鍵管理サービス 顧客が提供した、RSA でラップされた鍵をラップ解除するために使用されます。 期限なし
CSEK 派生鍵 Cluster Manager フロントエンド ディスク鍵用の鍵暗号鍵(KEK)。
ディスク鍵をラップします。
鍵のラッピングまたはラッピング解除のオペレーションが完了するまで
Google でラップされたディスク鍵
(オプション - 自動再起動を使用する場合)
Cluster Manager フロントエンド 実行中のインスタンスに接続されたディスク用に保存されているディスク鍵を保護します。
VM メモリが失われた場合(ホストのクラッシュ時など)に、インスタンスを再起動します。
VM が停止または削除されるまで
未加工のディスク鍵 Virtual Machine Monitor(VMM)のメモリ、
Cluster Manager(CM)のメモリ
データ用のデータ暗号鍵(DEK)。
ディスクへのデータの書き込み / 読み取り、VM のライブ マイグレーション、およびインプレース アップグレードの実行。
VM が停止または削除されるまで
Google でラップされた CSEK 派生鍵 Cluster Manager データベース 障害発生時にオペレーションを再開します。 顧客が要求したオペレーションが完了するまで

顧客指定の暗号鍵の保護

以下のセクションでは、顧客指定の暗号鍵が、ディスク上、Google Cloud Platform インフラストラクチャ内での移動中、およびメモリ内でどのように保護されるかを説明します。

ディスク上

未加工の CSEKCSEK 派生鍵、および未加工のチャンク / ディスク鍵は、暗号化されずにディスクに保存されることは一切ありません。未加工のチャンク / ディスク鍵は、CSEK 派生鍵でラップされるか、自動再起動を使用する場合は Google 鍵でラップされて保存されます。ユーザーの鍵が Google のサーバーに永久保存されることはありません。

インフラストラクチャ内の移動中

各サービスは、インフラストラクチャが提供するアクセス管理機能を使用して、具体的に他のどのサービスが自身と通信できるかを指定します。サービスには許可されたサービス アカウント ID のホワイトリストが構成され、そのアクセス制限がインフラストラクチャによって自動的に適用されます。サービス ID、整合性、分離についての詳細をご覧ください。

前のセクションで説明した RPC 認証および承認の機能に加えて、このインフラストラクチャではネットワーク上の RPC データの暗号プライバシーと整合性も提供されます。各サービスはインフラストラクチャ RPC ごとに必要な暗号保護のレベルを構成することが可能で、それらは顧客指定の暗号鍵についても有効化されます。サービス間通信の暗号化の詳細をご覧ください。

メモリ内

上記で詳述したように、鍵マテリアルは Cluster Manager のメモリや仮想マシンモニタのメモリなど、さまざまなシステムのメモリ内に存在しています。こうしたシステムのメモリへのアクセスは例外的に(例: インシデントの一部として)行われ、アクセス制御リストによって管理されます。これらのシステムではメモリダンプが無効になっているか、メモリダンプ内の鍵マテリアルが自動的にスキャンされています。ジョブ自体へのアクセスは、少数のサイト信頼性エンジニアがサービスを維持する職務の一部として必要に応じて行う場合に限定され、ログへのアクセスは少数のソフトウェア エンジニアがデバッグのために行う場合に限定されています。

詳細