顧客管理の認証局(CA)を使用する

このページでは、Cloud SQL インスタンスのサーバー CA モードとして、ユーザー管理の認証局(CA)オプションを使用する方法について説明します。

概要

お客様が管理する CA オプションを使用すると、Certificate Authority Service(CA Service)で独自の CA プールと CA を設定できます。顧客管理 CA オプションを選択すると、CA 階層を設定し、Cloud SQL インスタンスの CA 証明書のローテーションを管理します。

顧客管理 CA オプションを使用して Cloud SQL インスタンスを作成する前に、インスタンスと同じリージョンに CA プールを作成し、そのプールに CA Service を使用して 1 つ以上の CA を作成します。CA は、ルート CA または下位 CA のいずれかです。CA Service で下位 CA を作成し、下位 CA を外部ルート CA に連結することもできます。インスタンスを作成するときに、CA プールを指定します。リクエストは、CA プールを使用する権限を持つプロジェクト固有のサービス アカウントに委任されます。サービス アカウントがプールから CA をリクエストし、Cloud SQL はその CA を使用してインスタンスのサーバー証明書に署名します。

Cloud SQL インスタンスのサーバー CA モードには、次の 3 つのオプションがあります。

  • インスタンスごとの内部 CA
  • Google マネージド共有 CA
  • お客様が管理する CA

コンプライアンス上の理由から独自の CA を管理する必要がある場合は、顧客管理 CA オプションを選択できます。他のオプションの使用方法については、SSL/TLS 証明書で承認するをご覧ください。

ワークフロー

顧客管理 CA オプションを使用するワークフローは次のとおりです。

  1. Cloud SQL プロジェクトのサービス アカウントを作成します。
  2. CA Service で CA プールを作成します。
  3. CA Service で CA を作成します。
  4. CA を使用する Cloud SQL インスタンスを作成します。インスタンスを作成するときに、作成した CA プールでサーバー証明書に署名する権限をサービス アカウントに委任します。

始める前に

カスタマー マネージド CA オプションを使用する前に、次の要件を満たしていることを確認してください。

必要なロール

Cloud SQL 固有のサービス アカウントの作成に必要な権限を取得するには、個々のプロジェクトに対してサービス アカウント作成者 roles/iam.serviceAccountCreator)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

CA プールと CA の作成に必要な権限を取得するには、CA Service に対する CA Service オペレーション マネージャー(roles/privateca.caManager)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

プロジェクト固有のサービス アカウントを作成する

Cloud SQL インスタンスを作成するプロジェクトで、Cloud SQL インスタンスのサーバー証明書の作成と署名のリクエストを処理する専用のサービス アカウントを作成します。

gcloud

次のコマンドを実行して、Cloud SQL プロジェクトのサービス アカウントを作成します。

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

PROJECT_ID は、Cloud SQL インスタンスを作成するプロジェクトの ID に置き換えます。

このコマンドは、プロジェクトに service-PROJECT_ID@gcp-sa-cloud-sql.iam.gserviceaccount.com という名前のサービス アカウントを作成します。CA Service 証明書リクエスト元サービス アカウント名をメモします。

CA プールを作成します

CA Service で CA プールを作成します。

CA プールは、Cloud SQL インスタンスを作成するプロジェクトと同じプロジェクトに作成することも、別のプロジェクトに作成することもできます。ただし、CA プールを別のプロジェクトに作成すると、組織のポリシーによっては、VPC Service Controls によって Cloud SQL インスタンスの作成がブロックされる場合があります。この問題を解決するには、CA プールと CA をホストするプロジェクトと、Cloud SQL をホストするプロジェクトが同じサービス境界に属していることを確認します。詳細については、サービス境界サービス境界を管理するをご覧ください。

CA プールを作成するには、CA プールを作成するの手順に沿って操作します。CA プールのデフォルト値をそのまま使用し、次の必須の構成設定を行います。

  • CA プールは、Cloud SQL インスタンスを作成する同じリージョンに作成します。Cloud SQL でサポートされているリージョンの一覧については、リージョンをご覧ください。
  • 構成ベースの証明書リクエストを許可します。
  • サブジェクト代替名(SAN)に DNS 名を許可します。CA プールの ID 制約を構成する場合は、Cloud SQL が SAN に追加する内容と競合する可能性がある DNS 名の形式に制限を設定しないでください。

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

サービス アカウントに Cloud SQL インスタンスの証明書をリクエストして署名する権限を付与するには、作成した CA プールのサービス アカウントに次のロールを付与します。

  • roles/privateca.certificateRequester

gcloud

gcloud privateca pools コマンドを実行して、サービス アカウントに CA プールへのアクセス権を付与します。

gcloud privateca pools add-iam-policy-binding CA_POOL_ID \
  --project=PROJECT_ID \
  --location=REGION \
  --member serviceAccount:SERVICE_ACCOUNT_NAME \
  --role=roles/privateca.certificateRequester

次のように置き換えます。

  • CA_POOL_ID は、作成した CA プールの ID に置き換えます。
  • PROJECT_ID は、Cloud SQL インスタンスを作成するプロジェクトの ID に置き換えます。
  • REGION は、CA プールを作成したリージョンに置き換えます。
  • SERVICE_ACCOUNT_NAME は、プロジェクト用に前に作成した CA サービス証明書リクエスタ サービス アカウントの名前に置き換えます。

CA プールに CA を作成する

作成した CA プールに少なくとも 1 つの CA を作成します。

ルート CA または下位 CA を作成できます。

ルート CA を作成するには、ルート CA を作成するの手順に沿って操作します。CA のデフォルト値をそのまま使用できますが、CA は [有効] の状態で作成してください。

CA の鍵サイズとアルゴリズムを構成する場合は、任意の鍵サイズとアルゴリズムを選択できます。Cloud SQL は、EC P-384(SHA-384)楕円曲線鍵を使用してサーバー証明書を生成しますが、CA 暗号鍵が一致している必要はありません。

サブ CA を作成する場合は、まずルート CA を作成して構成する必要があります。

Cloud SQL インスタンスを作成する

ユーザー管理 CA オプションを使用する Cloud SQL インスタンスを作成する手順は次のとおりです。

Console

プレビュー版では、Google Cloud コンソールを使用して、カスタマー マネージド CA オプションを使用するインスタンスを作成することはできません。

代わりに、gcloud beta sql instances create コマンドを使用してください。

gcloud

gcloud beta sql instances create "INSTANCE_NAME" \
  --project=PROJECT_ID \
  --region=REGION \
  --server-ca-mode=CUSTOMER_MANAGED_CAS_CA \
  --server-ca-pool=projects/PROJECT_ID_CAS/locations/REGION/caPools/CA_POOL_ID

次のように置き換えます。

  • INSTANCE_NAME は、作成する Cloud SQL インスタンスの名前に置き換えます。
  • PROJECT_ID は、Cloud SQL インスタンスを作成するプロジェクトの ID に置き換えます。
  • PROJECT_ID_CAS は、CA_POOL_ID を作成したプロジェクトの ID に置き換えます。このプロジェクトは、Cloud SQL インスタンスを作成する場所と同じでも異なる場合もあります。
  • REGION は、CA プールを作成したリージョンに置き換えます。インスタンスは CA プールと同じリージョンに作成する必要があります。
  • CA_POOL_ID は、作成した CA プールの ID に置き換えます。

REST

カスタマー マネージド CA オプションを使用する Cloud SQL インスタンスを作成するには、instances.insert メソッドを使用して、次のプロパティを指定します。

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

  • PROJECT_ID Cloud SQL インスタンスを作成するプロジェクトの ID。
  • PROJECT_ID_CAS は、CA_POOL_ID を作成したプロジェクトの ID です。このプロジェクトは、Cloud SQL インスタンスを作成する場所と同じでも異なる場合もあります。
  • INSTANCE_ID は、作成する Cloud SQL インスタンスの名前です。
  • REGION CA プールを作成したリージョン。インスタンスは CA プールと同じリージョンに作成する必要があります。
  • CA_POOL_ID は、作成した CA プールの ID に置き換えます。

HTTP メソッドと URL:

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

リクエストの本文(JSON):

{
  "name":"INSTANCE_ID",
  "region":"REGION",
  "databaseVersion": "DATABASE_VERSION",
  "settings":{
     "ipConfiguration":
      {
         "serverCaPool": "projects/PROJECT_ID_CAS/locations/REGION/caPools/CA_POOL_ID",
         "serverCaMode": "CUSTOMER_MANAGED_CAS_CA"
      }
   }
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2025-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID_CSQL/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

トラブルシューティング

問題 トラブルシューティング

次のエラー メッセージが表示されます。

PERMISSION_DENIED: Permission privateca.certificates.create denied on CA_POOL_ID です。
Cloud SQL プロジェクト用に作成したサービス アカウントに roles/privateca.certificateRequester ロールが付与されていることを確認します。詳細については、サービス アカウントに CA プールへのアクセス権を付与するをご覧ください。

次のエラー メッセージが表示されます。

PERMISSION_DENIED: Request is prohibited by organization's policy vpcServiceControlsUniqueIdentifier VPC_SERVICE_CONTROLS_UNIQUE_IDENTIFIER.
CA Service CA プールと CA をホストするプロジェクトと、Cloud SQL をホストするプロジェクトが同じサービス境界に属するように VPC Service Controls を構成してください。詳細については、サービス境界サービス境界を管理するをご覧ください。

次のいずれかの INVALID ARGUMENT エラー メッセージが表示される

  • Public key algorithm is not permitted by the CaPool's issuance policy.
  • This CaPool's issuance policy does not permit passthrough subjects and/or subject alternative names, and thus can only be used with the REFLECTED_SPIFFE subject mode.
  • Config issuance mode is not permitted by the CaPool's issuance policy.

CA プールと CA の構成設定を確認します。CA プールを作成するCA プールに CA を作成するに記載されているすべての要件を満たしていることを確認します。

次のエラー メッセージが表示されます。

RESOURCE_EXHAUSTED

これは、CA Service の割り当てに関する問題を表します。プロジェクトの CA Service の割り当てを確認します。Cloud SQL の外部で CA プール内のリクエストを使用している可能性があるかどうかを確認します。詳細については、割り当てと上限をご覧ください。

次のエラー メッセージが表示されます。

NOT FOUND: parent resource CA_POOL_ID not found.
Cloud SQL インスタンスの作成時に指定した CA プールのプロジェクト ID、ロケーション、名前を確認します。誤字脱字がないことを確認します。

次のエラー メッセージが表示されます。

FAILED_PRECONDITION: There are no enabled CAs in the CaPool. Please ensure that there is at least one enabled Certificate Authority to issue a certificate.
Cloud SQL インスタンスの作成時に指定した CA プールに 1 つ以上の CA が作成され、CA が有効な状態であることを確認します。

次のエラー メッセージが表示されます。

FAILED_PRECONDITION: Per-Product Per-Project Service Account (P4 SA) SERVICE_ACCOUNT_NAME not found for project PROJECT_ID.
Cloud SQL プロジェクトのサービス アカウントが作成されていることを確認します。詳細については、プロジェクト固有のサービス アカウントを作成するをご覧ください。

次のエラー メッセージが表示されます。

INVALID ARGUMENT: Invalid format for server CA pool.

CA プールが正しい形式で指定されていることを確認します。

projects/PROJECT_ID/locations/REGION/caPools/CA_POOL_ID

次のエラー メッセージが表示されます。

INVALID ARGUMENT: The instance's server CA pool must be in the same region as the instance.

CA プールが、作成する Cloud SQL インスタンスと同じリージョンにあることを確認します。