デフォルトでは、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 は中間 KEK のみを最新のプライマリ バージョンの CMEK 鍵で再暗号化します。再暗号化が完了すると、古いバージョンの CMEK 鍵を無効化または削除しても、データベースへのアクセスは無効になりません。データベースの保護に使用されている鍵バージョンを表示することもできます。
CMEK を使用する場合
CMEK を使用しない場合
CMEK を有効にする
Spanner データベースに CMEK を使用するには、新しいデータベースを作成し、データベース作成時に Cloud KMS 鍵を指定する必要があります。
ユーザーが Google が管理する Spanner サービス アカウントに対し Cloud KMS CryptoKey Encrypter/Decrypter(roles/cloudkms.cryptoKeyEncrypterDecrypter
)ロールを付与すると、Spanner はユーザーに代わって鍵にアクセスできるようになります。
詳細な手順については、CMEK の使用をご覧ください。
セッションの管理やデータに対するトランザクションの実行などに使用される Spanner のデータアクセス API は、顧客が管理する鍵、Google が所有する鍵、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 が所有する鍵と、Google が管理する鍵によって保護できます。バックアップには、デフォルトでデータベースと同じ暗号化構成が使用されますが、バックアップの作成時に別の暗号化構成を指定することで、この動作をオーバーライドできます。バックアップが CMEK 対応の場合は、バックアップの作成時に KMS 鍵のプライマリ バージョンを使用して暗号化されます。バックアップを作成すると、KMS 鍵がローテーションされても、その鍵と鍵バージョンを変更できません。詳細については、データベースのバックアップをご覧ください。
デフォルトでは、バックアップからデータベースを復元する場合、復元されるデータベースではバックアップと同じ暗号化構成が使用されます。この動作は、データベースの復元時に別の暗号化構成を指定することでオーバーライドできます。CMEK を有効化したバックアップを復元するには、バックアップの暗号化に使用した鍵と鍵バージョンの両方が使用できる必要があります。詳細については、バックアップからの復元をご覧ください。
ロギング
プロジェクトで Cloud KMS API の監査ロギングを有効にしている場合は、Cloud Logging で Spanner が Cloud KMS に送信するリクエストを監査できます。Cloud Logging にこれらの Cloud KMS ログエントリが表示されます。
組織内で CMEK を必須に設定する、または制限する
Spanner を含むさまざまな Google Cloud プロダクトでの CMEK 保護の使用に関する組織全体のポリシーを設定できます。これらのポリシーにより、以下を規定できます。
組織で作成された新しい Spanner データベースで、CMEK 保護を使用する必要がある。
組織の Cloud KMS 鍵のうち、CMEK による保護に使用できる鍵を制限する。
詳しくは、CMEK の組織のポリシーをご覧ください。