顧客管理の暗号鍵(CMEK)を使用する

このページでは、顧客管理の暗号鍵のサービス アカウントと鍵の設定方法と、顧客管理の暗号鍵を使用するインスタンスの作成方法について説明します。Cloud SQL で顧客管理の暗号鍵を使用する方法の詳細は、顧客管理の暗号鍵の概要を参照してください。

始める前に

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Google Cloud CLI をインストールします。
  5. gcloud CLI を初期化するには:

    gcloud init
  6. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  7. Google Cloud プロジェクトで課金が有効になっていることを確認します

  8. Google Cloud CLI をインストールします。
  9. gcloud CLI を初期化するには:

    gcloud init
  10. ユーザー アカウントに Cloud SQL 管理者のロールがあることを確認します。

    IAM ページに移動

  11. Cloud Key Management Service API を有効にします。

    API を有効にする

  12. Cloud SQL Admin API を有効にします。

    API を有効にする

CMEK を使用して Cloud SQL インスタンスを作成するためのワークフロー

  1. gcloud と API ユーザーのみ: 顧客管理の暗号鍵が必要なプロジェクトごとにサービス アカウントを作成します。
  2. キーリングと鍵を作成し、鍵ごとにロケーションを設定します。ロケーションは Google Cloud リージョンです。
  3. gcloud と API ユーザーのみ: サービス アカウントに鍵へのアクセス権を付与します。
  4. 鍵の鍵 ID(KMS_KEY_ID)と場所、キーリングの ID(KMS_KEYRING_ID)をコピーするか書き留めます。この情報は、サービス アカウントに鍵へのアクセス権を付与するときに必要になります。
  5. プロジェクトに移動して、次のオプションを使用して Cloud SQL インスタンスを作成します。
    1. 顧客管理の暗号鍵と同じ場所
    2. 顧客管理の暗号鍵の構成
    3. 顧客管理の暗号鍵 ID

CMEK で Cloud SQL インスタンスが有効になります。

サービス アカウントを作成する

顧客管理の暗号鍵が必要なプロジェクトごとにサービス アカウントを作成する必要があります。

ユーザーがサービス アカウントを管理できるようにするには、次のいずれかのロールを付与します。

  • サービス アカウント ユーザー(roles/iam.serviceAccountUser): サービス アカウントを一覧表示する権限、サービス アカウントの詳細を取得する権限、サービス アカウントの権限借用の権限が含まれます。
  • サービス アカウント管理者(roles/iam.serviceAccountAdmin): サービス アカウントを一覧表示する権限、サービス アカウントの詳細を取得する権限が含まれます。サービス アカウントの作成、更新、削除に加え、サービス アカウントの Cloud SQL for PostgreSQL ポリシーを表示または変更する権限も含まれます。

現在、顧客管理の暗号鍵に必要なサービス アカウントを作成するには、gcloud CLI コマンドを使用する必要があります。コンソールを使用している場合は、Cloud SQL がこのサービス アカウントを自動的に作成します。

gcloud

gcloud beta services identity create \
--service=sqladmin.googleapis.com \
--project=PROJECT_ID

Terraform

サービス アカウントを作成するには、Terraform リソースを使用します。

resource "google_project_service_identity" "gcp_sa_cloud_sql" {
  provider = google-beta
  service  = "sqladmin.googleapis.com"
}

変更を適用する

Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を完了します。

Cloud Shell を準備する

  1. Cloud Shell を起動します。
  2. Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。

    このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。

ディレクトリを準備する

Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。

  1. Cloud Shell で、ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイルの拡張子は .tf にする必要があります(例: main.tf)。このチュートリアルでは、このファイルを main.tf とします。
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. チュートリアルを使用している場合は、各セクションまたはステップのサンプルコードをコピーできます。

    新しく作成した main.tf にサンプルコードをコピーします。

    必要に応じて、GitHub からコードをコピーします。Terraform スニペットがエンドツーエンドのソリューションの一部である場合は、この方法をおすすめします。

  3. 環境に適用するサンプル パラメータを確認し、変更します。
  4. 変更を保存します。
  5. Terraform を初期化します。これは、ディレクトリごとに 1 回だけ行います。
    terraform init

    最新バージョンの Google プロバイダを使用する場合は、-upgrade オプションを使用します。

    terraform init -upgrade

変更を適用する

  1. 構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。
    terraform plan

    必要に応じて構成を修正します。

  2. 次のコマンドを実行します。プロンプトで「yes」と入力して、Terraform 構成を適用します。
    terraform apply

    Terraform に「Apply complete!」というメッセージが表示されるまで待ちます。

  3. Google Cloud プロジェクトを開いて結果を表示します。Google Cloud コンソールの UI でリソースに移動して、Terraform によって作成または更新されたことを確認します。

上記のコマンドはサービス アカウント名を返します。このサービス アカウント名は、サービス アカウントに鍵へのアクセス権を付与するの手順で使用します。

鍵を作成する

鍵は、Cloud SQL インスタンスと同じ Google Cloud プロジェクトで作成するか、別のユーザー プロジェクトで作成します。Cloud KMS キーリングの場所は、Cloud SQL インスタンスを作成するリージョンと一致する必要があります。マルチリージョンまたはグローバル リージョン鍵は使用できません。リージョンが一致しない場合、Cloud SQL インスタンスの作成リクエストは失敗します。

Cloud KMS 鍵を作成するには:

コンソール

  1. Google Cloud Console で、暗号鍵のページに移動します。

    暗号鍵に移動

  2. [キーリングを作成] をクリックします。
  3. [キーリング名] を追加します。この名前はサービス アカウントに鍵へのアクセス権を付与するときに必要になるため、メモしておいてください。
  4. [キーリングの場所] を追加します。
  5. [作成] をクリックします。[鍵の作成] ページが開きます。
  6. [鍵の名前] を追加します。
  7. [目的] を選択します(対称または非対称)。
  8. [ローテーション期間] と [開始日] を選択します。
  9. [作成] をクリックします。
  10. [] のテーブルで、最後の列の 3 つのドットをクリックし、[リソース ID をコピー] を選択するか、書き留めます。これが KMS_KEY_ID です。KMS_KEY_ID は、サービス アカウントに鍵へのアクセスを付与するときに必要になります。

gcloud

  1. 新しいキーリングを作成します。
    gcloud kms keyrings create KMS_KEYRING_ID \
    --location=GCP_REGION
      
    この名前はサービス アカウントに鍵へのアクセスを付与するときに必要になるため、書き留めておきます。
  2. キーリングで鍵を作成します。
    gcloud kms keys create KMS_KEY_ID \
    --location=GCP_REGION \
    --keyring=KMS_KEYRING_ID \
    --purpose=encryption
      
    この名前はサービス アカウントに鍵へのアクセスを付与するときに必要になるため、書き留めておきます。

Terraform

キーリングを作成するには、Terraform リソースを使用します。

resource "google_kms_key_ring" "keyring" {
  provider = google-beta
  name     = "keyring-name"
  location = "us-central1"
}

鍵を作成するには、Terraform リソースを使用します。

resource "google_kms_crypto_key" "key" {
  provider = google-beta
  name     = "crypto-key-name"
  key_ring = google_kms_key_ring.keyring.id
  purpose  = "ENCRYPT_DECRYPT"
}

Terraform 構成を適用します。

terraform apply

サービス アカウントにリソースへのアクセス権を付与する

この手順は、gcloud または API を使用する場合にのみ必要です。

サービス アカウントにアクセス権を付与するには:

gcloud

gcloud kms keys add-iam-policy-binding KMS_KEY_ID \
--location=GCP_REGION \
--keyring=KMS_KEYRING_ID \
--member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloud-sql.iam.gserviceaccount.com \
--role=roles/cloudkms.cryptoKeyEncrypterDecrypter

Terraform

鍵へのアクセス権を付与するには、Terraform リソースを使用します。

resource "google_kms_crypto_key_iam_binding" "crypto_key" {
  provider      = google-beta
  crypto_key_id = google_kms_crypto_key.key.id
  role          = "roles/cloudkms.cryptoKeyEncrypterDecrypter"

  members = [
    "serviceAccount:${google_project_service_identity.gcp_sa_cloud_sql.email}",
  ]
}

Terraform 構成を適用します。

terraform apply

CMEK を使用した Cloud SQL インスタンスの作成

顧客管理の暗号鍵を使用してインスタンスを作成するには:

コンソール

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. [インスタンスを作成] をクリックします。
  3. データベース エンジンを選択します。
  4. インスタンスの名前を入力します。インスタンス名には機密情報や個人を特定できる情報を含めないでください。インスタンス名は外部から閲覧可能です。インスタンス名にプロジェクト ID を含める必要はありません。これは、必要に応じて自動的に(ログファイルなどに)作成されます。
  5. 'root'@'%' ユーザーのパスワードを入力します。
  6. インスタンスのリージョンを設定します。インスタンスにアクセスするリソースと同じリージョンにインスタンスを配置します。ほとんどの場合、ゾーンを指定する必要はありません。
  7. 構成オプションのセクションで、マシンタイプとストレージが表示されるまですべての構成オプションを選択します。
  8. マシンタイプとストレージを開きます。
  9. [暗号化] セクションで [顧客管理の暗号鍵] を選択します。
  10. プルダウン メニューから KMS 鍵を選択するか、KMS_KEY_ID を手動で入力します。インスタンスと同じプロジェクトとリージョン内の KMS 鍵のみが表示されます。同じリージョンにあるものの異なるプロジェクトに属している KMS 鍵を選択するには、[鍵が表示されない場合は、鍵のリソース ID を入力してください。] を選択し、先ほど取得した KMS_KEY_ID を入力します。
  11. 選択した鍵で暗号化 / 復号を行う権限がサービス アカウントにない場合、メッセージが表示されます。この場合は、[付与] をクリックして、選択した KMS 鍵に対する roles/cloudkms.cryptoKeyEncrypterDecrypter> IAM ロールをサービス アカウントに付与します。
  12. 構成オプションを選択したら、[作成] をクリックします。
  13. 顧客管理の暗号鍵を使用する場合の影響を説明するメッセージが表示されます。メッセージを確認して理解したうえで、インスタンスの作成に進みます。

gcloud

gcloud sql instances create INSTANCE_NAME \
--project=PROJECT_ID \
--disk-encryption-key=KMS_KEY_ID \
--database-version=VERSION \
--cpu=NUMBER_CPUS \
--memory=MEMORY_SIZE \
--region=REGION \
--root-password=INSERT-PASSWORD-HERE

Terraform

CMEK でインスタンスを作成するには、Terraform リソースを使用します。

resource "google_sql_database_instance" "postgres_instance_with_cmek" {
  name                = "postgres-instance-cmek"
  provider            = google-beta
  region              = "us-central1"
  database_version    = "POSTGRES_14"
  encryption_key_name = google_kms_crypto_key.key.id
  settings {
    tier = "db-custom-2-7680"
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

変更を削除する

変更を削除するには、次の手順を行います。

  1. 削除の保護を無効にするには、Terraform 構成ファイルで deletion_protection 引数を false に設定します。
    deletion_protection =  "false"
  2. 次のコマンドを実行します。プロンプトで「yes」と入力して、更新された Terraform 構成を適用します。
    terraform apply
  1. 次のコマンドを実行しています。プロンプトで「yes」と入力して、以前に Terraform 構成で適用されたリソースを削除します。

    terraform destroy

REST v1

顧客管理の暗号鍵を使用してインスタンスを作成するには、diskEncryptionConfiguration をコマンドに渡します。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: プロジェクト ID
  • instance-id: インスタンス ID
  • region: リージョン
  • database-version: バージョンの列挙型文字列(POSTGRES_12 など)
  • kms-resource-id: 鍵の作成から受け取った ID。

HTTP メソッドと URL:

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances

JSON 本文のリクエスト:

{
  "name":"instance-id",
  "region":"region",
  "databaseVersion": "database-version",
  "diskEncryptionConfiguration" :
  {
      "kmsKeyName" : "kms-resource-id"
  },
  "settings":
  {
     "backupConfiguration":
      {
         "pointInTimeRecoveryEnabled": true,
         "enabled":true
      }
   }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}
この例では instances:insert を使用します。

REST v1beta4

顧客管理の暗号鍵を使用してインスタンスを作成するには、diskEncryptionConfiguration をコマンドに渡します。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: プロジェクト ID
  • instance-id: インスタンス ID
  • region: リージョン
  • database-version: バージョンの列挙型文字列(POSTGRES_12 など)
  • kms-resource-id: 鍵の作成から受け取った ID。

HTTP メソッドと URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances

JSON 本文のリクエスト:

{
  "name":"instance-id",
  "region":"region",
  "databaseVersion": "database-version",
  "diskEncryptionConfiguration" :
  {
      "kmsKeyName" : "kms-resource-id"
  },
  "settings":
  {
     "backupConfiguration":
      {
         "pointInTimeRecoveryEnabled": true,
         "enabled":true
      }
   }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}
この例では instances:insert を使用します。

CMEK 対応インスタンスのバックアップを作成する

Cloud SQL インスタンスのバックアップを作成すると、バックアップは、プライマリ インスタンスの顧客管理の暗号鍵と同じプライマリ キー バージョンで暗号化されます。

オンデマンド バックアップと自動バックアップの作成と管理をご覧ください。

[バックアップの作成] フォームに次のメッセージが表示されます。「バックアップは、このインスタンスの顧客管理の暗号鍵のメイン バージョンを使用して暗号化されます。誰かがこの鍵のバージョンを破棄するか無効にすると、この鍵のバージョンを使用して暗号化されているすべてのデータが完全に失われます。鍵のメインのバージョンは、Cloud KMS で確認できます。」

バックアップ ページで、顧客管理の暗号鍵が有効になっているバックアップのリストには列が 2 つ追加されています。CMEK 対応インスタンスのバックアップであることを示す列と、バックアップの暗号化に使用された鍵バージョンを示す列です。

CMEK 対応インスタンスのレプリカを作成する

Cloud SQL インスタンスのリードレプリカを同じリージョン内に作成すると、親インスタンスと同じ顧客管理の暗号鍵を継承します。別のリージョンにリードレプリカを作成すると、顧客管理の暗号鍵の新しいリストから選択できます。リージョンごとに独自の鍵セットが使用されます。

リードレプリカの作成をご覧ください。

[リードレプリカの作成] ページには、次の情報が表示されます。

  1. [暗号化] には、[顧客管理] と表示されます。
  2. レプリカの暗号鍵が表示されます。
  3. 次のメッセージが表示されます。「レプリカは、プライマリ インスタンスの顧客管理の暗号鍵を使用して暗号化されます。誰かがこの鍵を破棄すると、この鍵を使用して暗号化されているすべてのデータが完全に失われます。」

クロスリージョン レプリカの場合、次のメッセージが表示されます。

「クロスリージョン レプリカは、選択した顧客管理の暗号鍵を使用して暗号化されます。誰かがこの鍵を破棄すると、この鍵を使用して暗号化されているすべてのデータが完全に失われます。」

CMEK 対応インスタンスのクローンを作成する

Cloud SQL インスタンスのクローンを作成すると、ソース インスタンスの暗号化に使用したのと同じ顧客管理の暗号鍵を継承します。

インスタンスのクローンを作成するをご覧ください。

[クローンの作成] ページに、次の情報が表示されます。

  1. [暗号化] には、[顧客管理] と表示されます。
  2. クローンの暗号鍵が表示されます。
  3. 次のメッセージが表示されます。「クローンは、ソース インスタンスの顧客管理の暗号鍵を使用して暗号化されます。誰かがこの鍵を破棄すると、この鍵を使用して暗号化されているすべてのデータが完全に失われます。」

CMEK 対応インスタンスの鍵情報を表示する

Cloud SQL インスタンスが正常に作成されたら、インスタンス リストまたはインスタンスの概要ページで、顧客管理の暗号鍵を使用してインスタンスが作成されたことを確認できます。詳細には、インスタンスの作成に使用された鍵も表示されます。

  1. Google Cloud Console で、Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. [インスタンス] リストで、[暗号化] 列が表示されるまで右にスクロールします。この列には、[Google が管理] および [顧客管理] と表示されます。
  3. インスタンスの名前をクリックして [概要] ページを開きます。顧客管理の暗号鍵が [構成] ペインに表示されます。

既存の CMEK 対応インスタンスまたはレプリカを再暗号化する

最新の主キーのバージョンで既存の Cloud SQL インスタンスとレプリカを再暗号化できます。既存の CMEK 対応インスタンスまたはレプリカを再暗号化する方法については、鍵についてをご覧ください。

新しい主キーのバージョンを取得する

  • インスタンスまたはレプリカを新しいバージョンで再暗号化するには、新しい主キーのバージョンが必要です。インスタンスで新しい鍵バージョンが必要な場合は、Cloud Key Management Service を使用して鍵をローテーションする必要があります。主キーをローテーションするには、鍵のローテーションをご覧ください。

  • 鍵のローテーションが完了したら、主キーの変更が伝播されるのを待ってから、インスタンスを再暗号化します。鍵バージョンの変更に一貫性がない場合、再暗号化後もインスタンスは引き続き古い鍵バージョンを使用します。詳細については、鍵バージョンの整合性をご覧ください。

CMEK 対応インスタンスを再暗号化する

鍵のローテーションが完了したら、既存の CMEK 対応インスタンスまたはレプリカを再暗号化します。

コンソール

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. [構成] セクションで、[インスタンスを再暗号化する] をクリックします。
  4. 表示されるダイアログで、[再暗号化] をクリックして選択内容を確定します。

gcloud

インスタンスまたはレプリカを再暗号化するには、次のコマンドを実行します。

gcloud sql instances reencrypt INSTANCE_NAME
INSTANCE_NAME は、再暗号化するインスタンスまたはレプリカの名前に置き換えます。

REST v1

新しい鍵でインスタンスまたはレプリカを再暗号化するには、次のコマンドを実行します。

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/reencrypt

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: プロジェクト ID
  • INSTANCE_ID: インスタンス ID

HTTP メソッドと URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/reencrypt

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2023-06-28T21:19:09.503Z",
  "operationType": "REENCRYPT",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

REST v1beta4

新しい鍵でインスタンスまたはレプリカを再暗号化するには、次のコマンドを実行します。
    POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/reencrypt

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: プロジェクト ID
  • INSTANCE_ID: インスタンス ID

HTTP メソッドと URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/reencrypt

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2023-06-28T21:22:13.663Z",
  "operationType": "REENCRYPT",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

自動再暗号化バックアップ

新しい主キーのバージョンでプライマリ インスタンスを再暗号化すると、Cloud SQL は再暗号化バックアップと呼ばれるオンデマンド バックアップを自動的に作成します。

Cloud SQL インスタンスのバックアップのリストに、再暗号化バックアップがタイプ on-demand として一覧表示され、backup created automatically for data before CMEK re-encryption というラベルが付けられます。

他のオンデマンド バックアップと同様に、暗号化バックアップは、それを削除するかインスタンスを削除するまで残ります。

再暗号化の制限

インスタンスを再暗号化するときは、次の制限事項に注意してください。

  • 再暗号化オペレーションの進行中は、インスタンスに対して他の管理オペレーションを実行できません。
  • 再暗号化オペレーションは、インスタンスまたはレプリカのサイズに応じたダウンタイムをトリガーします。
  • インスタンスが暗号化されても、インスタンスのレプリカは再暗号化されません。各レプリカを個別に再暗号化する必要があります。
  • インスタンスを再暗号化したとき、バックアップが新しい鍵バージョンで自動的に再暗号化されることはありません。 バックアップまたはポイントインタイム リカバリをバックアップの作成後の時点に復元するには、バックアップを暗号化した Cloud KMS 鍵バージョンを保持する必要があります。

トラブルシューティングについては、再暗号化のトラブルシューティングの表をご覧ください。

Cloud External Key Manager(Cloud EKM)を使用する

Cloud SQL インスタンス内のデータを保護するには、サポートされている外部の鍵管理パートナー内で管理する鍵を使用します。詳細については、Cloud External Key Manager をご覧ください。考慮事項のセクションもご覧ください。

Cloud EKM 鍵を作成する準備ができたら、Cloud EKM 鍵の管理をご覧ください。鍵を作成したら、Cloud SQL インスタンスを作成するときに鍵の名を指定します。

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

KAJ では、データを復号する正当な理由をすべて提供することで、データをより細かく制御します。

Google では、外部の鍵管理パートナー システムで鍵の可用性を制御することはできません。

鍵バージョンを無効にしてから再度有効にする

次のトピックをご覧ください。

トラブルシューティング

ここでは、CMEK 対応インスタンスの設定中または使用中にエラー メッセージが表示された場合の対処方法について説明します。

Cloud KMS エラーやロールまたは権限がないために、作成、クローン作成、更新などの Cloud SQL 管理者のオペレーションが失敗する場合があります。失敗の一般的な理由には、Cloud KMS 鍵バージョンがない、Cloud KMS 鍵バージョンが無効かまたは破棄されている、Cloud KMS 鍵バージョンにアクセスするための IAM 権限が不足している、Cloud KMS 鍵バージョンが Cloud SQL インスタンスと別のリージョンにあるなどがあります。一般的な問題を診断して解決するには、次のトラブルシューティングの表を使用しください。

顧客管理の暗号鍵のトラブルシューティングの表

エラー: 次のような問題が考えられます... 次のことを試します...
プロダクトごと、プロジェクトごとのサービス アカウントが見つかりません サービス アカウント名が正しくありません。 正しいユーザー プロジェクトのサービス アカウントが作成されていることを確認します。

[サービス アカウント] ページに移動

サービス アカウントへのアクセスを許可できません ユーザー アカウントに、この鍵バージョンへのアクセスを許可する権限がありません。 ユーザー アカウントまたはサービス アカウントで組織管理者のロールを追加してください。

IAM アカウントのページに移動

Cloud KMS 鍵バージョンが破棄されています 鍵バージョンが破棄されています。 鍵バージョンが破棄されている場合、データの暗号化や復号に使用できません。
Cloud KMS 鍵バージョンが無効です 鍵バージョンが無効です。 Cloud KMS 鍵バージョンを再度有効にします。

暗号鍵のページに移動

Cloud KMS 鍵を使用するための十分な権限がありません Cloud SQL インスタンスへのオペレーションの実行に使用しているユーザー アカウントまたはサービス アカウントに cloudkms.cryptoKeyEncrypterDecrypter のロールがないか、Cloud KMS 鍵バージョンが存在しません。 ユーザー アカウントまたはサービス アカウントに cloudkms.cryptoKeyEncrypterDecrypter のロールを追加します。

IAM アカウントのページに移動


アカウントにすでにロールがある場合は、鍵の作成を参照して、新しい鍵バージョンの作成方法を確認してください。注を参照。
Cloud KMS 鍵が見つかりません 鍵バージョンが存在しません。 新しい鍵バージョンを作成します。鍵の作成をご覧ください。 注を参照。
Cloud SQL インスタンスと Cloud KMS 鍵バージョンが異なるリージョンにあります Cloud KMS 鍵バージョンと Cloud SQL インスタンスは同じリージョン内にある必要があります。Cloud KMS 鍵バージョンがグローバル リージョンまたはマルチリージョンにある場合は機能しません。 インスタンスを作成するリージョンと同じリージョンに鍵バージョンを作成します。鍵の作成をご覧ください。注を参照。

再暗号化のトラブルシューティングの表

エラー: 次のような問題が考えられます... 次のことを試します...
Cloud KMS 鍵にアクセスできないため、CMEK リソースの再暗号化に失敗しました。主キーのバージョンが有効で、権限が正しく付与されていることを確認してください。 鍵バージョンが有効になっていないか、適切な権限がありません。

Cloud KMS 鍵バージョンを再度有効にします。

暗号鍵のページに移動

適切な権限があることを確認します。

IAM アカウントのページに移動

サーバー内部エラーが発生したため、CMEK リソースの再暗号化に失敗しました。しばらくしてからもう一度お試しください サーバー内部エラーが発生しました。 再暗号化を再試行します。詳細については、既存の CMEK 対応インスタンスまたはレプリカを再暗号化するをご覧ください。

次のステップ