顧客管理の暗号鍵(CMEK)の概要

デフォルトでは、Spanner のデータを含め、Google Cloud に保存されるすべてのデータは、Google が管理するデフォルトの暗号化を使用して保護されます。Google Cloud は、このデフォルトの暗号化を自動で処理して管理するので、ユーザーが操作する必要はありません。

データを保護する鍵について特定のコンプライアンスや規制の要件がある場合は、Spanner に顧客管理の暗号鍵(CMEK)を使用できます。Spanner データベースでは、Google がデータを保護する暗号鍵を管理するのではなく、ユーザーが Cloud Key Management Service(KMS)で制御、管理する鍵を使用することで保護が行われます。これは、対称鍵Cloud HSM 鍵、または Cloud External Key Manager 鍵です。

CMEK はカスタム インスタンス構成をサポートしていません。

このページでは、Spanner 用の CMEK について説明します。CMEK の一般的な用途や使用する理由などの詳細については、Cloud KMS のドキュメントをご覧ください。

機能

  • データアクセス制御: 管理者は、Spanner に保存されたデータの保護に使用する鍵のローテーション、アクセスの管理、無効化や破棄を行うことができます。
  • 監査可能性: プロジェクトで Cloud KMS API の監査ロギングを有効にすると、Spanner により実行されたものを含む鍵に対するすべてのアクションは、Cloud Logging で記録され、表示されます。Cloud EKM 鍵では、Key Access Justification がサポートされています。これにより、すべての鍵リクエストに [Justification] フィールドが追加されます。一部の外部鍵管理パートナーでは、この理由に基づいて、これらのリクエストを自動的に承認または拒否できます。
  • パフォーマンス: Spanner のパフォーマンスやサービスレベル契約に変更はありません。

料金

Spanner では、CMEK を有効化したデータベースに対して他のデータベースと同様に課金されます。Spanner に対しては追加料金は発生しません。詳細については、Spanner の料金をご覧ください。

Cloud KMS では(Spanner が鍵を暗号化/復号に使用するごとに)鍵の費用とその鍵に対する暗号化オペレーションの費用に対して、課金されます。これらの費用は、Spanner によって生成される暗号化オペレーションの想定数に基づいて最小限になることが期待されます。詳細については、Cloud KMS の料金をご覧ください。

CMEK による保護対象

CMEK を有効化したデータベースの場合、Spanner は Cloud KMS 鍵を使用して保存データを保護します。これには、ディスクまたはフラッシュに保存されたデータベースのデータも含まれます。

以下の例外が適用されます。次のタイプのデータは、CMEK 鍵ではなく、保存時の Google のデフォルトの暗号化によって保護されます。

  • 範囲境界をマークする行キーのサブセット
  • コアダンプやオペレーション ログなどのデバッグデータ
  • 転送中のデータやメモリ内データ
  • データベースのメタデータ

Spanner には 3 つの暗号化レイヤがあります。保存データは保存にあたりサブファイル チャンクに分割され、各チャンクは個別の暗号鍵を使用してストレージ レベルで暗号化されます。チャンクのデータを暗号化するための鍵は「データ暗号鍵(DEK)」と呼ばれています。Google で使用する鍵は膨大な数にのぼり、また低レイテンシと高可用性を実現する必要があるため、これらの鍵は暗号化対象のデータの近くに保存されます。DEK は「鍵暗号鍵(KEK)」を使用して暗号化(「ラップ」)されます。最終的に、各 KEK が顧客管理の暗号鍵で暗号化されます。

CMEK 鍵をローテーションすると、Spanner は最新の CMEK 鍵を使用した中間 KEK のみを再暗号化します。再暗号化が完了すると、古いバージョンの CMEK 鍵を無効または削除しても、データベースへのアクセスは無効になりません。データベースの保護に使用されている鍵バージョンを表示することもできます。

CMEK を使用する場合

顧客管理の暗号鍵による暗号化を示す図

CMEK を使用しない場合

Google が管理する暗号鍵を使用した暗号化を示す図

CMEK を有効にする

Spanner データベースに CMEK を使用するには、新しいデータベースを作成し、データベース作成時に Cloud KMS 鍵を指定する必要があります。

ユーザーが Google が管理する Spanner サービス アカウントに対し Cloud KMS CryptoKey Encrypter/Decrypterroles/cloudkms.cryptoKeyEncrypterDecrypter)ロールを付与すると、Spanner はユーザーに代わって鍵にアクセスできるようになります。

詳細な手順については、CMEK の使用をご覧ください。

セッションの管理やデータ トランザクションの実行などに使用される Spanner のデータアクセス API は、顧客管理の暗号鍵と Google 管理鍵のどちらでもまったく同じです。アプリケーションでは、データの読み取り時または書き込み時に鍵や暗号化構成ファイルを指定する必要はありません。すべての暗号化はサービスによって処理されます。

鍵を管理

鍵管理オペレーションは、Cloud KMS を使用して実行されます。Spanner は、Cloud KMS に伝播されるまで、鍵の変更の検出や操作はできません。鍵の無効化や破棄などのオペレーションでは、その伝播に最大 3 時間かかることがあります。通常、権限の変更ははるかに速く反映されます。

データベースが作成されると、Spanner は約 5 分ごとに Cloud KMS を呼び出し、鍵がまだ有効であることを確認します。

Cloud KMS 鍵が無効化または破棄されたことを Spanner が検出すると、データベースにアクセス不能にするオペレーションがすぐに開始されます。セッション、読み取り、書き込みを含むデータベースに対する後続の呼び出しには、FAILED_PRECONDITION エラーが返されます。KMS key required by the Spanner resource is not accessible.

Spanner の Cloud KMS に対する呼び出しで、以前無効にされた鍵の再有効化が検出されると、Cloud KMS は自動的に Cloud Spanner データベースへのアクセスを復元します。

使用できない鍵のステータスの処理方法

Cloud KMS が使用できない場合のようなまれなケースで、Spanner が Cloud KMS から鍵のステータスを取得できないことがあります。

Spanner が最初に Cloud KMS と通信不能になった時点で有効な鍵により Spanner データベースが保護されている場合、Spanner は、完全なデータベース オペレーションを最長 1 時間、最善の方法でサポートし続けます。これにより、ワークロードに対するこのようなインシデントの影響を最小限に抑えます。

1 時間経過しても Spanner が Cloud KMS に接続できない場合、Spanner は保護対策としてデータベースをオフラインにする操作を開始します。データベースが Cloud KMS に再接続し、鍵がアクティブであると Cloud KMS が応答するまで、Spanner データベースのデータはアクセス不能となります。

逆に、Spanner が最初に Cloud KMS と通信不能となった時点で無効な鍵により Spanner データベースが保護されている場合、データベースが Cloud KMS に再接続可能になり鍵を再有効化するまで、データベースはアクセス不能になります。

外部鍵の考慮事項

Cloud EKM 鍵を使用する場合、Google は外部の鍵管理パートナー システム内の外部管理鍵の可用性をコントロールできません。

外部管理の鍵が使用できない場合、Spanner はキャッシュ内の鍵を使用して、完全なデータベース オペレーションを引き続き 1 時間までサポートします。

1 時間経過しても Spanner が Cloud KMS に接続できない場合、Spanner は保護対策としてデータベースをオフラインにする操作を開始します。データベースの呼び出しは、次のように FAILED_PRECONDITION エラーで失敗します。External key error: Could not find a key resource at the key URI.

外部鍵を使用する際のその他の考慮事項については、Cloud External Key Manager のドキュメントをご覧ください。

バックアップと復元

Spanner のバックアップ(データベースなど)は、CMEK や Google が管理する暗号化によって保護できます。バックアップには、デフォルトでデータベースと同じ暗号化構成が使用されますが、バックアップの作成時に別の暗号化構成を指定することで、この動作をオーバーライドできます。バックアップが CMEK 対応の場合は、バックアップの作成時に KMS 鍵のプライマリ バージョンを使用して暗号化されます。バックアップを作成すると、KMS 鍵がローテーションされても、その鍵と鍵バージョンの変更はできません。詳細については、データベースのバックアップをご覧ください。

バックアップからデータベースを復元する場合、デフォルトでは、復元されたデータベースはバックアップと同じ暗号化構成を使用します。この動作は、データベースの復元時に別の暗号化構成を指定することでオーバーライドできます。CMEK を有効化したバックアップを復元するには、バックアップの暗号化に使用された鍵と鍵バージョンの両方が使用可能である必要があります。詳細については、バックアップからの復元をご覧ください。

ロギング

プロジェクトで Cloud KMS API の監査ロギングを有効にしている場合は、Cloud Logging で Spanner が Cloud KMS に送信するリクエストを監査できます。これらの Cloud KMS ログエントリCloud Logging に表示されます。

組織内で CMEK を必須に設定する、または制限する

Spanner などのさまざまな Google Cloud プロダクトで CMEK による保護の使用に関する組織全体のポリシーを設定できます。これらのポリシーにより、次のことが可能になります。

  • 組織で作成された新しい Spanner データベースによる CMEK による保護を必須にします。

  • CMEK 保護に使用できる組織の Cloud KMS 鍵を制限します。

詳しくは、CMEK の組織のポリシーをご覧ください。