顧客管理の暗号鍵(CMEK)について

Cloud SQL for MySQL はデフォルトで、保存されているお客様のコンテンツを暗号化します。暗号化は Cloud SQL for MySQL が行うため、ユーザー側での追加の操作は必要ありません。このオプションは、Google のデフォルトの暗号化と呼ばれます。

暗号鍵を管理する場合は、Cloud KMS の顧客管理の暗号鍵(CMEK)を、Cloud SQL for MySQL などの CMEK 統合サービスで使用できます。Cloud KMS 鍵を使用すると、保護レベル、ロケーション、ローテーション スケジュール、使用とアクセスの権限、暗号境界を制御できます。Cloud KMS を使用すると、鍵の使用状況を追跡すること、監査ログを表示すること、鍵のライフサイクルを管理することが可能です。データを保護する対称鍵暗号鍵(KEK)は、Google が所有して管理するのではなく、ユーザーが Cloud KMS で制御および管理します。

CMEK を使用してリソースを設定した後は、Cloud SQL for MySQL リソースへのアクセスは、Google のデフォルトの暗号化を使用する場合と同様です。暗号化オプションの詳細については、顧客管理の暗号鍵(CMEK)をご覧ください。

Cloud KMS Autokey による CMEK

Cloud SQL for MySQL リソースを保護するには、手動で CMEK を作成するか、Cloud KMS Autokey を使用します。Autokey を使用すると、Cloud SQL for MySQL のリソース作成の一環として、キーリングと鍵がオンデマンドで生成されます。暗号化と復号のオペレーションに鍵を使用するサービス エージェントがまだ存在しない場合、そのエージェントが作成され、必要な Identity and Access Management(IAM)ロールが付与されます。詳細については、Autokey の概要をご覧ください。

Autokey では Cloud SQL for MySQL BackupRun リソースの鍵が作成されません。Cloud SQL for MySQL インスタンスのバックアップを作成すると、バックアップはプライマリ インスタンスの顧客管理の鍵で暗号化されます。

Terraform または REST API を使用してリソースを作成する場合、Cloud SQL for MySQL と互換性があるのは Cloud KMS Autokey のみです。

手動で作成した CMEK を使用して Cloud SQL for MySQL リソースを保護する方法については、顧客管理の暗号鍵(CMEK)を使用するをご覧ください。

Cloud KMS Autokey によって作成された CMEK を使用して Cloud SQL for MySQL リソースを保護する際は、Secret Manager リソースでの Autokey の使用で Secret Manager 用に示されている手順を例として使用します。

Google が管理する暗号鍵と顧客管理の暗号鍵の比較

下の図は、デフォルトの Google 暗号鍵と顧客管理の暗号鍵を使用した Cloud SQL インスタンス内での保存データの暗号化の仕組みの違いを示しています。

CMEK を使用しない場合

データは Google にアップロードされた後にチャンク化されます。各チャンクは独自のデータ暗号鍵で暗号化されます。データ暗号鍵は、鍵暗号鍵を使用してラップされます。デフォルトの Google 暗号化では、鍵暗号鍵は Google の内部キーストアから取得されます。暗号化されたチャンクとラップされた暗号鍵は、Google のストレージ インフラストラクチャ全体に分散されます。

CMEK を使用する場合

データは Google にアップロードされた後にチャンク化されます。各チャンクは独自のデータ暗号鍵で暗号化されます。データ暗号鍵は、鍵暗号鍵を使用してラップされます。Cloud KMS を使用する CMEK では、鍵暗号鍵が Cloud KMS から取得されます。暗号化されたチャンクとラップされた暗号鍵は、Google のストレージ インフラストラクチャ全体に分散されます。

顧客管理の暗号鍵でラップされたデータを復号する場合、Cloud SQL は KEK を使用して DEK を復号し、復号した DEK を使用して保存されたデータを復号します。

DEK で暗号化され、ラップされた DEK と一緒に保存されたデータチャンク。DEK のラップ解除リクエストは KMS ストレージに送信され、KMS ストレージにはエクスポートできない KEK が保存されます。KMS ストレージは、ラップ解除された DEK を返します。

Cloud SQL はいつ CMEK の鍵を操作するのですか?

オペレーション
インスタンスの作成 インスタンスの作成時に、顧客管理の暗号鍵を使用するようにインスタンスを構成します。
バックアップの作成 CMEK を有効化したインスタンスのバックアップ中に、顧客管理の暗号鍵は、ユーザーのクエリやレスポンスなどのユーザーデータを暗号化します。CMEK を有効化したインスタンスからのバックアップは、ソース インスタンスと同じ Cloud KMS の鍵を使用した暗号化を継承します。
インスタンスの復元 CMEK を有効化したインスタンスの復元中に、Cloud SQL は鍵を使用して、復元中のバックアップ インスタンスのデータにアクセスします。別のインスタンスに復元する場合、ターゲット インスタンスは暗号化に別の鍵を使用できます。
レプリカの作成 Cloud SQL インスタンスのリードレプリカまたはフェイルオーバー レプリカを同じリージョン内に作成すると、親インスタンスから CMEK を継承します。別のリージョンにリードレプリカまたはフェイルオーバー レプリカを作成する場合は、他のリージョンから CMEK を選択する必要があります。リージョンごとに独自の鍵セットが使用されます。
クローンの作成 CMEK を有効化したインスタンスのクローンは、ソース インスタンスと同じ Cloud KMS の鍵を使用した CMEK の暗号化を継承します。
インスタンスの更新 CMEK を有効化したインスタンスの更新中に、Cloud SQL は CMEK の鍵をチェックします。

CMEK を有効化した Cloud SQL インスタンスはどこでサポートされていますか?

CMEK は、すべての Cloud SQL インスタンスのロケーションで使用できます。

サービス アカウントについて

Cloud SQL インスタンスで CMEK が有効になっている場合、サービス アカウントを使用して Cloud KMS から鍵のアクセスをリクエストする必要があります。

顧客管理の暗号鍵をプロジェクトで使用するには、サービス アカウントを使用し、顧客管理の暗号鍵にサービス アカウントへのアクセス権を付与する必要があります。サービス アカウントはプロジェクト内に存在する必要があります。サービス アカウントはすべてのリージョンで表示されます。

Console を使用してインスタンスを作成する場合、最初に [顧客管理の暗号鍵] オプションを選択すると、Cloud SQL によってサービス アカウントが自動的に作成されます(サービス アカウントがまだ存在しない場合)。Cloud SQL によるサービス アカウントの自動作成では、ユーザー アカウントに特別な権限は必要ありません。

鍵について

Cloud KMS では、ロケーションが設定された暗号鍵を使用して、キーリングを作成する必要があります。新しい Cloud SQL インスタンスを作成する場合は、この鍵を選択してインスタンスを暗号化します。

顧客管理の暗号鍵を使用する新しい Cloud SQL インスタンスを作成する場合は、鍵 ID と鍵リージョンを確認する必要があります。新しい Cloud SQL インスタンスは、インスタンスに関連付けられた顧客管理の暗号鍵と同じリージョンに配置する必要があります。鍵と Cloud SQL インスタンスに対し 1 つのプロジェクトを作成できます。また、それぞれに異なるプロジェクトを作成することもできます。

顧客管理の暗号鍵は次の形式を使用します。

projects/[KMS_PROJECT_ID]/locations/[LOCATION]/keyRings/[KEY_RING]/cryptoKeys/[KEY_NAME]

Cloud SQL が鍵にアクセスできない場合(鍵バージョンを無効にした場合など)、Cloud SQL はインスタンスを一時停止します。鍵が再びアクセス可能になると、Cloud SQL はインスタンスを自動的に再開します。

鍵をローテーションすると、その鍵で暗号化されたインスタンスは、自動的に新しい主キーのバージョンで再暗号化されることはありません。既存の CMEK プライマリ インスタンスまたはレプリカを新しい主キーのバージョンで再暗号化できます。鍵のローテーション後に Cloud SQL インスタンスまたはレプリカを再暗号化する詳しい方法については、既存の CMEK 対応インスタンスまたはレプリカを再暗号化するをご覧ください。

外部鍵マネージャー

Fortanix、Futurex、Thales などの外部鍵マネージャーに保存されている鍵を、顧客管理の暗号鍵として使用できます。Cloud KMS で外部鍵を使用する方法については、Cloud External Key Manager(Cloud EKM)をご覧ください。

Key Access Justifications

Cloud EKM の一部として、Key Access Justifications を使用できます。Key Access Justifications を使用すると、Cloud EKM リクエストの理由を確認できます。さらに、リクエストは、示された理由に基づいて自動的に承認または拒否できます。詳細については、Key Access Justifications の概要をご覧ください。

Key Access Justifications では、データを復号するたびに正当な理由を提示することで、データをより細かく制御します。

Cloud SQL インスタンスで鍵を使用する方法については、CMEK を使用した Cloud SQL インスタンスの作成をご覧ください。

CMEK で暗号化されたデータを永続的にアクセスできなくするにはどうすればよいですか?

CMEK で暗号化されたデータを永続的に破棄する必要が生じることも考えられます。これを行うには、顧客管理の暗号鍵バージョンを破棄します。キーリングや鍵の破棄はできませんが、鍵の鍵バージョンは破棄できます。

CMEK 対応インスタンスとの間でデータをエクスポートおよびインポートするにはどうすればよいですか?

顧客管理の暗号鍵を使用して暗号化した状態でデータをエクスポートまたはインポートするには、Cloud Storage バケットに顧客管理の暗号鍵を設定してからデータをエクスポートする必要があります。顧客管理の暗号鍵を使用して有効にしたインスタンスにデータが以前に保存されていた場合でも、新しいインスタンスにデータをインポートするための特別な要件や制限はありません。

制限事項

顧客管理の暗号鍵を使用する場合は次の制限が適用されます。

  • 顧客管理の暗号鍵を既存のインスタンスで有効にすることはできません。
  • プライマリ インスタンスと同じリージョン内のレプリカに別の鍵を割り当てることはできません。クロスリージョン レプリカの場合、レプリカ リージョンに対して新しい鍵を作成する必要があります。
  • 別の鍵をクローンに割り当てることはできません。
  • 顧客管理の暗号鍵は、次の暗号化には使用できません。
    • 外部サーバー(外部プライマリ インスタンスと外部レプリカ)
    • インスタンス ID、データベースのバージョン、マシンタイプ、フラグ、バックアップ スケジュールなどのインスタンス メタデータ。
  • 顧客管理の暗号鍵を使用して、ユーザークエリやレスポンスなどの送信中のユーザーデータを暗号化することはできません。

次のステップ