為 Cloud SQL 執行個體設定自訂 DNS 名稱

本頁說明如何為 Cloud SQL 執行個體設定自訂網域名稱系統 (DNS) 名稱。

總覽

您可以設定 Cloud SQL 執行個體,讓應用程式使用貴機構管理的自訂 DNS 名稱連線。如要使用自訂 DNS 名稱連線至 Cloud SQL 執行個體,而非使用 IP 位址,請設定自訂主體替代名稱 (SAN)。建立或更新執行個體時,您可以設定自訂 SAN。

將自訂 DNS 名稱做為自訂 SAN 設定新增至執行個體時,Cloud SQL 會將自訂 DNS 名稱插入執行個體伺服器憑證的 SAN 欄位。這項自訂功能可讓您安全地使用自訂 DNS 名稱進行主機名稱驗證。您可以在自訂 SAN 設定中,新增最多三個自訂 DNS 名稱 (以半形逗號分隔)。基於安全考量,只有在使用 CUSTOMER_MANAGED_CAS_CA 將執行個體設定為伺服器 CA 模式時,才能使用自訂 SAN 設定。

為執行個體設定自訂 DNS 名稱後,您可以使用該名稱連線至資料庫用戶端或應用程式,包括 Cloud SQL 語言連接器Cloud SQL 驗證 Proxy

工作流程

如要為執行個體設定自訂 DNS 名稱,請執行下列操作:

  1. 建立設定為使用客戶管理 CA 的執行個體。
  2. 在執行個體中新增自訂 SAN 值。自訂 SAN 值會插入執行個體伺服器憑證的 SAN 欄位。
  3. 判斷執行個體的 IP 位址。
  4. 為執行個體建立自訂 DNS 記錄。
  5. 使用自訂 DNS 名稱連線至執行個體。

事前準備

為執行個體設定自訂 DNS 名稱前,請確認您具備必要角色和權限

如果您要建立新的 Cloud SQL 執行個體,則執行個體也必須使用客戶管理的憑證授權單位 (CA),才能在伺服器 CA 模式中使用自訂 SAN。

使用自訂 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 enum 要建立的 Cloud SQL 執行個體版本
  • 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,最多可包含三個自訂 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,最多可包含三個自訂 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 解析。如果是透過私人連線,請在對應的虛擬私有雲 (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 區域中新增兩筆 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 名稱連線至執行個體

連線至 PostgreSQL 適用的 Cloud SQL 執行個體時,請將自訂 DNS 名稱設定為主機名稱,並在用戶端中啟用伺服器身分驗證。

舉例來說,使用 psql 用戶端時,請指定 sslmode=verify-full 旗標。其他 PostgreSQL 用戶端驅動程式也有類似的設定標記。

如要從外部網路連線至私人 Cloud SQL 執行個體,您必須設定 Cloud SQL 執行個體及其虛擬私有雲 (VPC) 網路,允許外部連線,並讓 Cloud DNS 與內部部署系統通訊。如要進一步瞭解這項設定,請參閱「從外部來源連線」和「設定內部部署系統的 DNS」。

限制

  • 您最多只能將三個 DNS 名稱新增為 Cloud SQL 執行個體伺服器憑證的自訂 SAN 值。
  • 新增至憑證的 DNS 名稱長度上限為 253 個字元,可做為執行個體的自訂 SAN 值。
  • 新增至執行個體憑證的 DNS 名稱不得包含萬用字元 (*) 或尾隨點。舉例來說,test.example.com. 不符合規定。
  • DNS 名稱必須有效,如 RFC 1034 所述。
  • 您只能為 CUSTOMER_MANAGED_CAS_CA 執行個體指定自訂 SAN 值。

後續步驟