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

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

始める前に

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

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

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

    [プロジェクトの選択] ページに移動

  3. 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 SQL Server ポリシーを表示または変更する権限も含まれます。

現在使用できるのは、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 beta sql instances create [INSTANCE_NAME] \
  --project [PROJECT_ID] \
  --disk-encryption-key [KMS_RESOURCE_ID] \
  --database-version=[VERSION] \
  --cpu=[NUMBER_CPUS] \
  --memory=[MEMORY_SIZE] \
  --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]",
                "databaseVersion": "SQLSERVER_2017_STANDARD",
                "diskEncryptionConfiguration" : {"kmsKeyName" : "[KMS_RESOURCE_ID]"},
                "settings": {"tier": "[TIER_STRING]",
                "backupConfiguration": {"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. [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 鍵バージョンがグローバル リージョンまたはマルチリージョンにある場合は機能しません。 インスタンスを作成するリージョンと同じリージョンに鍵バージョンを作成します。鍵の作成をご覧ください。注を参照。

次のステップ