Cloud SQL インスタンスのカスタム DNS 名を設定する

このページでは、Cloud SQL インスタンスにカスタム ドメイン名システム(DNS)名を設定する方法について説明します。

概要

組織で管理されているカスタム DNS 名を使用してアプリケーションが接続できるように、Cloud SQL インスタンスを構成できます。IP アドレスではなくカスタム DNS 名を使用して Cloud SQL インスタンスに接続する場合は、カスタム サブジェクト代替名(SAN)を構成します。カスタム SAN は、インスタンスの作成時または更新時に構成できます。

カスタム DNS 名をカスタム SAN 構成としてインスタンスに追加すると、Cloud SQL はカスタム DNS 名をインスタンスのサーバー証明書の SAN フィールドに挿入します。このカスタマイズにより、ホスト名の検証でカスタム DNS 名を安全に使用できます。カスタム SAN 構成には、最大 3 つのカスタム DNS 名をカンマ区切りで追加できます。セキュリティ上の理由から、カスタム SAN 構成は、サーバー CA モードとして CUSTOMER_MANAGED_CAS_CA で構成したインスタンスでのみ使用できます。

インスタンスのカスタム DNS 名を構成したら、そのカスタム DNS 名を使用して、Cloud SQL 言語コネクタCloud SQL Auth Proxy などのデータベース クライアントまたはアプリケーションに接続できます。

ワークフロー

インスタンスのカスタム DNS 名を設定する手順は次のとおりです。

  1. 顧客管理 CA で構成されたインスタンスを作成します。
  2. インスタンスにカスタム SAN 値を追加します。カスタム SAN 値は、インスタンスのサーバー証明書の SAN フィールドに挿入されます。
  3. インスタンスの IP アドレスを確認します。
  4. インスタンスのカスタム DNS レコードを作成します。
  5. カスタム DNS 名を使用してインスタンスに接続します。

始める前に

インスタンスのカスタム DNS 名を設定する前に、必要なロールと権限があることを確認してください。

新しい Cloud SQL インスタンスを作成する場合、カスタム SAN を使用するには、インスタンスでサーバー CA モードに顧客管理の認証局(CA)も使用する必要があります。

カスタム SAN 値を使用してインスタンスを作成する

カスタム SAN 値を使用してインスタンスを作成するには、次の gcloud sql instances create コマンドを使用します。

gcloud

gcloud sql instances create "INSTANCE_NAME" \
  --database-version=DATABASE_VERSION \
  --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
  --custom-subject-alternative-names=CUSTOM_DNS_NAME

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

  • INSTANCE_NAME は、作成する Cloud SQL インスタンスの名前に置き換えます。
  • DATABASE_VERSION は、作成する Cloud SQL インスタンスのバージョンの enum に置き換えます。
  • PROJECT_ID は、Cloud SQL インスタンスを作成するプロジェクトの ID に置き換えます。
  • PROJECT_ID_CAS は、CA_POOL_ID を作成したプロジェクトの ID に置き換えます。このプロジェクトは、Cloud SQL インスタンスを作成するプロジェクトと同じ場合も異なる場合もあります。
  • REGION は、CA プールを作成したリージョンに置き換えます。インスタンスは CA プールと同じリージョンに作成する必要があります。
  • CA_POOL_ID は、作成した CA プールの ID に置き換えます。
  • CUSTOM_DNS_NAME: 最大 3 つのカスタム DNS 名をカンマ区切りで指定します。値の間にスペースを入れないでください。例: develop.example.com,test.example.com,production.example.com

インスタンスのカスタム SAN 値を追加または更新する

既存のインスタンスのカスタム SAN 値を追加または更新するには、次の操作を行います。

gcloud

gcloud sql instances patch INSTANCE_NAME \
  --custom-subject-alternative-names=CUSTOM_DNS_NAME
注意: カスタム SAN 値がすでに設定されているインスタンスを更新する場合は、既存のカスタム SAN 値を指定してください。指定しない場合、既存の値が置き換えられます。

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

  • INSTANCE_NAME は、更新する Cloud SQL インスタンスの名前に置き換えます。
  • CUSTOM_DNS_NAME: 最大 3 つのカスタム DNS 名をカンマ区切りで指定します。値の間にスペースを入れないでください。例: develop.example.com,new-test.example.com,production.example.com

インスタンスからすべてのカスタム SAN 値を消去する

インスタンスからすべてのカスタム SAN 値を消去するには、次の操作を行います。

gcloud

gcloud sql instances patch INSTANCE_NAME \
  --clear-custom-subject-alternative-names

INSTANCE_NAME は、更新する Cloud SQL インスタンスの名前に置き換えます。

カスタム DNS レコードを作成する

クライアントとアプリケーションでカスタム DNS 名を使用してインスタンスに接続する前に、DNS 名と IP アドレスのマッピングを設定します。このマッピングは DNS 解決と呼ばれます。非公開で接続する場合は、対応する Virtual Private Cloud(VPC)ネットワークの限定公開 DNS ゾーンに DNS レコードを作成します。

インスタンスのカスタム DNS レコードを作成するには、次の操作を行います。

  1. インスタンスの IP アドレスを取得します。次のコマンドを実行します。

    gcloud sql instances describe INSTANCE_NAME \
     --project=PROJECT_ID

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

    • INSTANCE_NAME: Cloud SQL インスタンスの名前
    • PROJECT_ID: インスタンスが含まれている Google Cloud プロジェクトの ID またはプロジェクト番号
  2. レスポンスで ipAddresses: フィールドを探します。

    次に例を示します。

    ipAddresses:
    - ipAddress: 192.0.2.4
      type: PRIVATE
    

    プライベート サービス アクセスPrivate Service Connect、またはその両方用に構成されたインスタンスのプライベート IP アドレスを取得できます。

  3. アプリケーションで使用される DNS ゾーンに 2 つの DNS レコードを追加します。自分で管理する DNS サーバーまたはアプリケーションで使用される Cloud DNS プライベート ゾーンを使用できます。

    • インスタンスの IP アドレスの A レコードを作成する
    • インスタンス接続名を含む TXT レコードを作成します。

    標準のデータベース クライアントは、A レコードを使用して IP アドレスを検索し、接続を行います。Cloud SQL 言語コネクタと Cloud SQL Auth Proxy は、TXT レコードを使用してインスタンス接続名を検索します。

    たとえば、インスタンスの接続文字列は my-project:region:my-instance ですが、DNS 名 prod-db.mycompany.example.com を使用して接続する場合などです。会社のネットワーク上のインスタンスの IP アドレスが 192.0.2.4 の場合は、次の DNS レコードを作成します。

    Record type: A
    Name: prod-db.mycompany.example.com
    Value: 192.0.2.4
    TTL: 600
    
    Record type: TXT
    Name: prod-db.mycompany.example.com
    Value: my-project:region:my-instance
    TTL: 600
    

カスタム DNS 名を使用してインスタンスに接続する

Cloud SQL for PostgreSQL インスタンスに接続する場合は、カスタム DNS 名をホスト名として構成し、クライアントでサーバー ID の検証を有効にします。

たとえば、psql クライアントを使用する場合は、フラグ sslmode=verify-full を指定します。他の PostgreSQL クライアント ドライバにも同様の構成フラグがあります。

外部ネットワークからプライベート Cloud SQL インスタンスに接続する場合は、外部接続を許可し、Cloud DNS がオンプレミス システムと通信できるように、Cloud SQL インスタンスとその Virtual Private Cloud(VPC)ネットワークを構成する必要があります。この構成の詳細については、外部ソースから接続するオンプレミス システムの DNS を構成するをご覧ください。

制限事項

  • Cloud SQL インスタンスのサーバー証明書に、カスタム SAN 値として 3 つを超える DNS 名を追加することはできません。
  • インスタンスのカスタム SAN 値として証明書に追加できる DNS 名の最大長は 253 文字です。
  • インスタンスの証明書に追加する DNS 名には、ワイルドカード文字(*)や末尾のドットを含めることはできません。たとえば、test.example.com. は許可されません。
  • DNS 名は、RFC 1034 で規定されている有効な名前である必要があります。
  • カスタム SAN 値は CUSTOMER_MANAGED_CAS_CA インスタンスでのみ指定できます。

次のステップ