顧客管理の暗号鍵(CMEK)

デフォルトでは、Cloud Spanner のデータを含むすべての Google Cloud の保存データは、Google が管理するデフォルトの暗号化を使用して保護されます。Google Cloud では、こうした暗号化の処理と管理が自動的に行われるため、ユーザー側での操作は不要です。

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

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

特長

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

料金

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

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

CMEK による保護対象

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

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

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

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

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

CMEK を使用する場合

「顧客管理の暗号鍵を使用した暗号化を示す図」

CMEK を使用しない場合

「Google が管理する暗号鍵による暗号化を示す図」

CMEK の有効化

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

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

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

Cloud Spanner のデータアクセス API (セッションの管理やデータのトランザクション実行に使用されるものなど)は、CMEK 対応データベースと Google 管理データベースでまったく同じです。アプリケーションがデータを読み書きするときに、鍵や暗号化の構成を指定する必要はありません。暗号化はすべてサービスによって処理されます。

鍵管理

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

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

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

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

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

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

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

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

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

外部の主な考慮事項

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

外部で管理する鍵を使用できない場合、Cloud Spanner では引き続き、鍵のバージョンを使用したキャッシュの完全な操作が 1 時間サポートされます。

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

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

バックアップと復元

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

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

ロギング

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