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

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

始める前に

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

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

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

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

  4. Cloud SDK をインストールして初期化します。
  5. ユーザー アカウントに Cloud SQL 管理者のロールがあることを確認します。

    [IAM] ページに移動

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

    API を有効にする

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

    API を有効にする

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

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

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

サービス アカウントの作成

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

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

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

現在は、gcloud コマンドライン ツールコマンドを使用して、顧客管理の暗号鍵に必要なサービス アカウントの種類を作成することのみ行えます。Console を使用している場合は、Cloud SQL がこのサービス アカウントを自動的に作成します。

サービス アカウントを作成するには gcloud コマンドライン ツールで次のコマンドを実行します。

gcloud beta services identity create --service=sqladmin.googleapis.com \
             --project=[USER_PROJECT]

このコマンドは、次の形式でサービス アカウント名を返します。

service-[PROJECT_NUMBER]@gcp-sa-cloud-sql.iam.gserviceaccount.com

例:

service-534582264470@gcp-sa-cloud-sql.iam.gserviceaccount.com

このサービス アカウント名は、サービス アカウントへの鍵へのアクセス権の付与の手順で使用します。

鍵の作成

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

Cloud KMS 鍵を作成するには:

Console

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

gcloud

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

サービス アカウントへの鍵のアクセス権の付与

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

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

  gcloud kms keys add-iam-policy-binding 
[KEY_NAME] --location [LOCATION] --keyring [KEY_RING_NAME]
--member serviceAccount:service-[PROJECT_NUMBER]@gcp-sa-cloud-sql.iam.gserviceaccount.com
--role roles/cloudkms.cryptoKeyEncrypterDecrypter

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

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

Console

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

    [Cloud SQL インスタンス] ページに移動

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

gcloud

  gcloud sql instances create [INSTANCE_NAME] \
  --project [PROJECT_ID] \
  --disk-encryption-key [KMS_RESOURCE_ID]
  --database-version=[VERSION]
  --tier= [MACHINE_TYPE] \
  --region=[REGION] \
  --root-password=[INSERT-PASSWORD-HERE]
  

cURL

顧客管理の暗号鍵を使用してインスタンスを作成するには、diskEncryptionConfiguration をコマンドに渡します。このパラメータの値は、鍵の作成手順から受け取った KMS_RESOURCE_ID です。
  gcloud auth login
  ACCESS_TOKEN="$(gcloud auth print-access-token)"
  curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
       --header 'Content-Type: application/json' \
       --data '{"name":"[INSTANCE_NAME]", "region":"[REGION]",
                "diskEncryptionConfiguration" : {"kmsKeyName" : "[KMS_RESOURCE_ID]"},
                "settings": {"tier":"[MACHINE_TYPE]",
                "backupConfiguration": {"binaryLogEnabled":true, "enabled":true}}}' \
       -X POST \
       https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances
  
この cURL コマンドは、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. [Cloud SQL インスタンス] ページに移動します。

    [Cloud SQL インスタンス] ページに移動

  2. [インスタンス] リストで、[暗号化] 列が表示されるまで右にスクロールします。この列には、[Google が管理] および [顧客管理] と表示されます。

  3. インスタンスの名前をクリックして [概要] ページを開きます。顧客管理の暗号鍵が [構成] ペインに表示されます。

鍵バージョンの無効化と再有効化

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

トラブルシューティング

ここでは、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 鍵バージョンがグローバル リージョンまたはマルチリージョンにある場合は機能しません。 インスタンスを作成するリージョンと同じリージョンに鍵バージョンを作成します。鍵の作成をご覧ください。注を参照。

次のステップ