Configurare un nome DNS personalizzato per un'istanza Cloud SQL

Questa pagina descrive come configurare un nome DNS (Domain Name System) personalizzato per l'istanza Cloud SQL.

Panoramica

Puoi configurare un'istanza Cloud SQL in modo che le tue applicazioni possano connettersi utilizzando un nome DNS personalizzato gestito dalla tua organizzazione. Se vuoi utilizzare un nome DNS personalizzato per connetterti a un'istanza Cloud SQL anziché utilizzare un indirizzo IP, configura un nome alternativo del soggetto (SAN) personalizzato. Puoi configurare un SAN personalizzato quando crei o aggiorni un'istanza.

Quando aggiungi un nome DNS personalizzato come configurazione SAN personalizzata all'istanza, Cloud SQL inserisce il nome DNS personalizzato nel campo SAN del certificato del server dell'istanza. Questa personalizzazione ti consente di utilizzare il nome DNS personalizzato con la convalida del nome host in modo sicuro. Puoi aggiungere un elenco separato da virgole di un massimo di tre nomi DNS personalizzati alla configurazione SAN personalizzata. Per motivi di sicurezza, puoi utilizzare una configurazione SAN personalizzata solo per le istanze che configuri con CUSTOMER_MANAGED_CAS_CA come modalità CA del server.

Dopo aver configurato il nome DNS personalizzato per l'istanza, puoi utilizzare quel nome DNS personalizzato per connettere i client o le applicazioni di database, inclusi i connettori dei linguaggi di Cloud SQL e il proxy di autenticazione Cloud SQL.

Flusso di lavoro

Per configurare un nome DNS personalizzato per un'istanza:

  1. Crea un'istanza configurata con una CA gestita dal cliente.
  2. Aggiungi valori SAN personalizzati all'istanza. I valori SAN personalizzati vengono inseriti nel campo SAN del certificato del server dell'istanza.
  3. Determina l'indirizzo IP dell'istanza.
  4. Crea record DNS personalizzati per l'istanza.
  5. Connettiti all'istanza utilizzando il nome DNS personalizzato.

Prima di iniziare

Prima di configurare un nome DNS personalizzato per l'istanza, assicurati di disporre di ruoli e autorizzazioni richiesti.

Se stai creando una nuova istanza Cloud SQL, per utilizzare SAN personalizzati, l'istanza deve utilizzare anche un' autorità di certificazione (CA) gestita dal cliente per la modalità CA del server.

Creare un'istanza con valori SAN personalizzati

Per creare un'istanza con valori SAN personalizzati, utilizza il seguente comando 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

Esegui le seguenti sostituzioni:

  • INSTANCE_NAME con il nome dell'istanza Cloud SQL che vuoi creare.
  • DATABASE_VERSION con l'enum della versione dell' istanza Cloud SQL che vuoi creare.
  • PROJECT_ID con l'ID del progetto in cui prevedi di creare le istanze Cloud SQL.
  • PROJECT_ID_CAS con l'ID del progetto in cui hai creato il tuo CA_POOL_ID. Questo progetto potrebbe essere lo stesso o diverso da quello in cui vuoi creare l'istanza Cloud SQL.
  • REGION con la regione in cui hai creato il pool di CA. Devi creare l'istanza nella stessa regione del pool di CA.
  • CA_POOL_ID con l'ID del pool di CA che hai creato.
  • CUSTOM_DNS_NAME con un massimo di tre nomi DNS personalizzati, separati da virgole senza spazi tra i valori. Ad esempio, develop.example.com,test.example.com,production.example.com.

Terraform

Per creare un'istanza con valori SAN personalizzati, utilizza una risorsa Terraform. L'esempio seguente crea anche le risorse prerequisiti per la nuova istanza.

resource "google_project_service_identity" "default" {
  provider = google-beta
  service  = "sqladmin.googleapis.com"
}

resource "random_string" "default" {
  length  = 10
  special = false
  upper   = false
}

resource "google_privateca_ca_pool" "default" {
  name     = "customer-ca-pool-${random_string.default.result}"
  location = "asia-northeast1"
  tier     = "DEVOPS"
  publishing_options {
    publish_ca_cert = false
    publish_crl     = false
  }
}

# This is required for setting up customer managed CAS (Certificate Authority Service) instances.
resource "google_privateca_certificate_authority" "default" {
  pool                                   = google_privateca_ca_pool.default.name
  certificate_authority_id               = "my-certificate-authority"
  location                               = "asia-northeast1"
  lifetime                               = "86400s"
  type                                   = "SELF_SIGNED"
  deletion_protection                    = false # set to "true" in production
  skip_grace_period                      = true
  ignore_active_certificates_on_deletion = true
  config {
    subject_config {
      subject {
        organization = "my organization"
        common_name  = "my certificate authority name"
      }
    }
    x509_config {
      ca_options {
        is_ca = true
      }
      key_usage {
        base_key_usage {
          cert_sign = true
          crl_sign  = true
        }
        extended_key_usage {
          server_auth = false
        }
      }
    }
  }
  key_spec {
    algorithm = "RSA_PKCS1_4096_SHA256"
  }
}

resource "google_privateca_ca_pool_iam_member" "default" {
  ca_pool = google_privateca_ca_pool.default.id
  role    = "roles/privateca.certificateRequester"

  member = "serviceAccount:${google_project_service_identity.default.email}"
}

resource "google_sql_database_instance" "default" {
  name             = "sqlserver-instance"
  region           = "asia-northeast1"
  database_version = "SQLSERVER_2022_STANDARD"
  root_password    = "INSERT-PASSWORD-HERE"
  settings {
    tier = "db-custom-2-7680"
    ip_configuration {
      # The following server CA mode lets the instance use customer-managed CAS CA to issue server certificates.
      # https://cloud.google.com/sql/docs/sqlserver/admin-api/rest/v1beta4/instances#ipconfiguration
      server_ca_mode                   = "CUSTOMER_MANAGED_CAS_CA"
      server_ca_pool                   = google_privateca_ca_pool.default.id
      custom_subject_alternative_names = ["customSan.test.com"]
    }
  }
}

Aggiungere o aggiornare i valori SAN personalizzati per un'istanza

Per aggiungere o aggiornare i valori SAN personalizzati per un'istanza esistente:

gcloud

gcloud sql instances patch INSTANCE_NAME \
  --custom-subject-alternative-names=CUSTOM_DNS_NAME

Esegui le seguenti sostituzioni:

  • INSTANCE_NAME con il nome dell'istanza Cloud SQL che vuoi aggiornare.
  • CUSTOM_DNS_NAME con un massimo di tre nomi DNS personalizzati, separati da virgole senza spazi tra i valori. Ad esempio, develop.example.com,new-test.example.com,production.example.com.

Terraform

Per aggiornare un'istanza che ha già valori SAN personalizzati, utilizza una risorsa Terraform.

resource "google_sql_database_instance" "default" {
  name             = "sqlserver-instance"
  region           = "asia-northeast1"
  database_version = "SQLSERVER_2022_STANDARD"
  root_password    = "INSERT-PASSWORD-HERE"
  settings {
    tier = "db-custom-2-7680"
    ip_configuration {
      # The following server CA mode lets the instance use customer-managed CAS CA to issue server certificates.
      # https://cloud.google.com/sql/docs/sqlserver/admin-api/rest/v1beta4/instances#ipconfiguration
      server_ca_mode                   = "CUSTOMER_MANAGED_CAS_CA"
      server_ca_pool                   = google_privateca_ca_pool.default.id
      custom_subject_alternative_names = ["customSan.test.com"]
    }
  }
}

Cancellare tutti i valori SAN personalizzati da un'istanza

Per cancellare tutti i valori SAN personalizzati da un'istanza:

gcloud

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

Sostituisci INSTANCE_NAME con il nome dell'istanza Cloud SQL che vuoi aggiornare.

Creare record DNS personalizzati

Prima di poter connetterti all'istanza utilizzando il nome DNS personalizzato con i client e le applicazioni, configura il mapping tra il nome DNS e l'indirizzo IP. Questo mapping è noto come risoluzione DNS. Se ti connetti in privato, allora crea il record DNS in una zona DNS privata nella rete Virtual Private Cloud (VPC) corrispondente.

Per creare record DNS personalizzati per l'istanza:

  1. Recupera l'indirizzo IP per l'istanza. Esegui questo comando:

    gcloud sql instances describe INSTANCE_NAME \
     --project=PROJECT_ID

    Esegui le seguenti sostituzioni:

    • INSTANCE_NAME: il nome dell'istanza Cloud SQL
    • PROJECT_ID: l'ID o il numero del progetto che contiene l'istanza Google Cloud
  2. Nella risposta, cerca il campo ipAddresses:.

    Ad esempio:

    ipAddresses:
    - ipAddress: 192.0.2.4
      type: PRIVATE
    

    Puoi recuperare l'indirizzo IP privato per un'istanza configurata per l'accesso privato ai servizi, Private Service Connect o entrambi.

  3. Aggiungi due record DNS a una zona DNS utilizzata dall'applicazione. Puoi utilizzare un server DNS gestito da te o la zona privata di Cloud DNS utilizzata dall'applicazione.

    • Crea un record A per l'indirizzo IP dell'istanza.
    • Crea un record TXT contenente il nome della connessione dell'istanza.

    I client di database standard utilizzano il record A per cercare l'indirizzo IP per stabilire la connessione. I connettori dei linguaggi di Cloud SQL e il proxy di autenticazione Cloud SQL utilizzano il record TXT per cercare il nome della connessione dell'istanza.

    Ad esempio, la stringa di connessione per l'istanza è my-project:region:my-instance, ma vuoi connetterti utilizzando il nome DNS prod-db.mycompany.example.com. Se l'indirizzo IP dell'istanza nella rete aziendale è 192.0.2.4, crea i seguenti record 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
    

Connettersi a un'istanza utilizzando un nome DNS personalizzato

Quando ti connetti all'istanza Cloud SQL per SQL Server, configura il nome DNS personalizzato come nome host. Quindi, attiva la verifica dell'identità del server specificando il flag -N per sqlcmd o selezionando l'opzione Crittografa connessione/Crittografia di SSMS.

Altri driver SQL Server hanno flag o configurazioni simili.

Se ti connetti a un'istanza Cloud SQL privata da una rete esterna, devi configurare l'istanza Cloud SQL e la relativa rete Virtual Private Cloud (VPC) per consentire le connessioni esterne e consentire a Cloud DNS di comunicare con i sistemi on-premise. Per saperne di più su questa configurazione, consulta Connettersi da un'origine esterna e Configurare il DNS per i sistemi on-premise.

Limitazioni

  • Non puoi aggiungere più di tre nomi DNS come valori SAN personalizzati al certificato del server di un'istanza Cloud SQL.
  • La lunghezza massima di un nome DNS che puoi aggiungere al certificato come valore SAN personalizzato per un'istanza è di 253 caratteri.
  • I nomi DNS che aggiungi al certificato per un'istanza non possono contenere caratteri jolly (*) o punti finali. Ad esempio, test.example.com. non è consentito.
  • I nomi DNS devono essere validi, come specificato nella RFC 1034.
  • Puoi specificare valori SAN personalizzati solo per le istanze CUSTOMER_MANAGED_CAS_CA.

Passaggi successivi