Configurazione dell'IP privato

Questa pagina descrive come configurare un'istanza Cloud SQL per utilizzare l'IP privato.

Per informazioni su come funziona l'IP privato, nonché sui requisiti di ambiente e gestione, vedi IP privato.

Prima di iniziare

Requisiti per API e IAM

  • Devi abilitare l' API Service Networking per il tuo progetto Google Cloud.
  • Se utilizzi una rete VPC condivisa, devi abilitare questa API anche per il progetto host.

  • Per gestire una connessione di accesso privato ai servizi, l'utente deve disporre delle seguenti autorizzazioni di Identity and Access Management (IAM). Se non disponi delle autorizzazioni necessarie, puoi ricevere errori di autorizzazioni insufficienti.
    • compute.networks.list
    • compute.addresses.create
    • compute.addresses.list
    • servicenetworking.services.addPeering

    Se utilizzi una rete VPC condivisa, devi anche aggiungere l'utente al progetto host e assegnare le stesse autorizzazioni all'utente nel progetto host.

Accesso privato ai servizi

Quando crei una nuova rete Virtual Private Cloud (VPC) nel tuo progetto, devi configurare l'accesso ai servizi privati per allocare un intervallo di indirizzi IP e creare una connessione ai servizi privati. Ciò consente alle risorse nella rete VPC di connettersi alle istanze Cloud SQL. La console Google Cloud fornisce una procedura guidata per aiutarti a impostare questa configurazione.

Configura un'istanza per l'utilizzo dell'IP privato

Puoi configurare un'istanza Cloud SQL in modo che utilizzi l'IP privato quando crei l'istanza o per un'istanza esistente.

Configura l'IP privato per una nuova istanza

Per configurare un'istanza Cloud SQL in modo che utilizzi l'IP privato durante la creazione di un'istanza:

Console

  1. Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.

    Vai a Istanze Cloud SQL

  2. Fai clic su Crea istanza.
  3. Espandi Mostra opzioni di configurazione.
  4. Espandi Connections (Connessioni).
  5. Seleziona IP privato.

    Un elenco a discesa mostra le reti VPC disponibili nel progetto. Se il tuo progetto è il progetto di servizio di un VPC condiviso, vengono mostrate anche le reti VPC del progetto host.

  6. Seleziona la rete VPC che vuoi utilizzare.
  7. Se vedi un messaggio che indica che devi configurare una connessione privata ai servizi, segui questi passaggi:

    1. Fai clic su Configura connessione.
    2. Nella sezione Alloca un intervallo IP, seleziona una delle seguenti opzioni:
      • Seleziona uno o più intervalli IP esistenti o creane uno nuovo dal menu a discesa. Il menu a discesa include eventuali intervalli allocati in precedenza, se presenti, oppure puoi selezionare Alloca un nuovo intervallo IP e inserire un nuovo intervallo e un nuovo nome.
      • Utilizza un intervallo IP allocato automaticamente nella tua rete.
    3. Fai clic su Continua.
    4. Fai clic su Crea connessione.
    5. Verifica che venga visualizzato il messaggio: Private service connection for network VPC_NETWORK_NAME has been successfully created.
  8. Facoltativamente, puoi specificare un intervallo IP allocato che le istanze possono utilizzare per le connessioni.
    1. Espandi Mostra l'opzione dell'intervallo IP allocato.
    2. Seleziona un intervallo IP dal menu a discesa.
  9. Completa la configurazione dell'istanza.
  10. Fai clic su Crea istanza.

gcloud

Prima di creare un'istanza utilizzando un indirizzo IP privato, assicurati che il progetto sia configurato per l' accesso privato ai servizi.

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • INSTANCE_ID: l'ID istanza
  • PROJECT_ID: l'ID progetto
  • NETWORK_PROJECT_ID: l'ID progetto della rete VPC

  • VPC_NETWORK_NAME: il nome della rete VPC
  • RANGE_NAME: facoltativo. Se specificato, imposta il nome di un intervallo a cui viene allocato un intervallo IP. Il nome dell'intervallo deve essere conforme a RFC-1035 e contenere da 1 a 63 caratteri.
  • REGION_NAME: il nome della regione
Per specificare il nome della tua rete VPC, utilizza il parametro --network. Per disabilitare l'IP pubblico, utilizza il flag --no-assign-ip.

gcloud beta sql instances create INSTANCE_ID \
--project=PROJECT_ID \
--network=projects/NETWORK_PROJECT_ID/global/networks/VPC_NETWORK_NAME \
--no-assign-ip \
--allocated-ip-range-name=RANGE_NAME

Terraform

Per configurare l'IP privato per una nuova istanza, utilizza le seguenti risorse Terraform:


resource "google_compute_network" "peering_network" {
  name                    = "private-network"
  auto_create_subnetworks = "false"
}

resource "google_compute_global_address" "private_ip_address" {
  name          = "private-ip-address"
  purpose       = "VPC_PEERING"
  address_type  = "INTERNAL"
  prefix_length = 16
  network       = google_compute_network.peering_network.id
}

resource "google_service_networking_connection" "default" {
  network                 = google_compute_network.peering_network.id
  service                 = "servicenetworking.googleapis.com"
  reserved_peering_ranges = [google_compute_global_address.private_ip_address.name]
}

resource "google_sql_database_instance" "instance" {
  name             = "private-ip-sql-instance"
  region           = "us-central1"
  database_version = "SQLSERVER_2019_STANDARD"
  root_password    = "INSERT-PASSWORD-HERE"

  depends_on = [google_service_networking_connection.default]

  settings {
    tier = "db-custom-2-7680"
    ip_configuration {
      ipv4_enabled    = "false"
      private_network = google_compute_network.peering_network.id
    }
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

resource "google_compute_network_peering_routes_config" "peering_routes" {
  peering              = google_service_networking_connection.default.peering
  network              = google_compute_network.peering_network.name
  import_custom_routes = true
  export_custom_routes = true
}


## Uncomment this block after adding a valid DNS suffix

# resource "google_service_networking_peered_dns_domain" "default" {
#   name       = "example-com"
#   network    = google_compute_network.peering_network.id
#   dns_suffix = "example.com."
#   service    = "servicenetworking.googleapis.com"
# }

Applica le modifiche

Per applicare la tua configurazione Terraform a un progetto Google Cloud, completa i passaggi nelle sezioni seguenti.

Prepara Cloud Shell

  1. Avvia Cloud Shell.
  2. Imposta il progetto Google Cloud predefinito a cui vuoi applicare le configurazioni Terraform.

    Devi eseguire questo comando una sola volta per progetto e puoi eseguirlo in qualsiasi directory.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Le variabili di ambiente vengono sostituite se imposti valori espliciti nel file di configurazione Terraform.

Prepara la directory

Ogni file di configurazione Terraform deve avere la propria directory (chiamata anche modulo principale).

  1. In Cloud Shell, crea una directory e un nuovo file al suo interno. Il nome del file deve avere l'estensione .tf, ad esempio main.tf. In questo tutorial, il file è denominato main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Se stai seguendo un tutorial, puoi copiare il codice campione in ogni sezione o passaggio.

    Copia il codice campione nel nuovo oggetto main.tf.

    Facoltativamente, copia il codice da GitHub. Questa opzione è consigliata se lo snippet Terraform fa parte di una soluzione end-to-end.

  3. Esamina e modifica i parametri di esempio da applicare al tuo ambiente.
  4. Salva le modifiche.
  5. Inizializza Terraform. Devi eseguire questa operazione una sola volta per directory.
    terraform init

    Facoltativamente, per utilizzare la versione più recente del provider Google, includi l'opzione -upgrade:

    terraform init -upgrade

Applica le modifiche

  1. Esamina la configurazione e verifica che le risorse che Terraform creerà o aggiornerà soddisfino le tue aspettative:
    terraform plan

    Apporta le correzioni necessarie alla configurazione.

  2. Applica la configurazione Terraform eseguendo questo comando e inserendo yes al prompt:
    terraform apply

    Attendi finché in Terraform non viene visualizzato il messaggio "Applicazione completata!".

  3. Apri il progetto Google Cloud per visualizzare i risultati. Nella console Google Cloud, vai alle risorse nella UI per assicurarti che Terraform le abbia create o aggiornate.

Elimina le modifiche

Per eliminare le modifiche:

  1. Per disabilitare la protezione dall'eliminazione, imposta l'argomento deletion_protection nel file di configurazione di Terraform su false.
    deletion_protection =  "false"
  2. Applica la configurazione Terraform aggiornata eseguendo questo comando e inserendo yes al prompt:
    terraform apply
  1. Per rimuovere le risorse applicate in precedenza con la tua configurazione Terraform, esegui questo comando e inserisci yes al prompt:

    terraform destroy

REST v1

Crea una nuova istanza con un indirizzo IP privato:

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: L'ID del progetto
  • INSTANCE_ID: L'ID dell'istanza
  • VPC_NETWORK_NAME: Specifica il nome della rete Virtual Private Cloud (VPC) che vuoi utilizzare per questa istanza. L'accesso privato ai servizi deve essere già configurato per la rete.
  • RANGE_NAME: Facoltativo. Se specificato, imposta il nome di un intervallo a cui viene allocato un intervallo IP. Il nome dell'intervallo deve essere conforme a RFC-1035 e contenere da 1 a 63 caratteri.
  • AUTHORIZED_NETWORKS: Per le connessioni con IP pubblico, specifica le connessioni dalle reti autorizzate che possono connettersi alla tua istanza.

Per il parametro ipv4Enabled, imposta il valore su true se utilizzi un indirizzo IP pubblico per la tua istanza o su false se l'istanza ha un indirizzo IP privato.

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

{
  "name": "INSTANCE_ID",
  "region": "region",
  "databaseVersion": "database-version",
  "settings": {
    "tier": "machine-type",
    "ipConfiguration": {
      "ipv4Enabled": false,
      "privateNetwork": "projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME",
      "allocatedIpRange": "RANGE_NAME"
      "authorizedNetworks": [AUTHORIZED_NETWORKS],
      
    }
  }
}

Per inviare la richiesta, espandi una delle seguenti opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

REST v1beta4

Crea una nuova istanza con un indirizzo IP privato:

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: L'ID del progetto
  • INSTANCE_ID: L'ID dell'istanza
  • VPC_NETWORK_NAME: Specifica il nome della rete Virtual Private Cloud (VPC) che vuoi utilizzare per questa istanza. L'accesso privato ai servizi deve essere già configurato per la rete.
  • RANGE_NAME: Facoltativo. Se specificato, imposta il nome di un intervallo a cui viene allocato un intervallo IP. Il nome dell'intervallo deve essere conforme a RFC-1035 e contenere da 1 a 63 caratteri.
  • AUTHORIZED_NETWORKS: Per le connessioni con IP pubblico, specifica le connessioni dalle reti autorizzate che possono connettersi alla tua istanza.

Per il parametro ipv4Enabled, imposta il valore su true se utilizzi un indirizzo IP pubblico per la tua istanza o su false se l'istanza ha un indirizzo IP privato.

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

{
  "name": "INSTANCE_ID",
  "region": "region",
  "databaseVersion": "database-version",
  "settings": {
    "tier": "machine-type",
    "ipConfiguration": {
      "ipv4Enabled": false,
      "privateNetwork": "projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME",
      "allocatedIpRange": "RANGE_NAME"
      "authorizedNetworks": [AUTHORIZED_NETWORKS],
      
    }
  }
}

Per inviare la richiesta, espandi una delle seguenti opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

Configura l'IP privato per un'istanza esistente

La configurazione di un'istanza Cloud SQL esistente per l'utilizzo dell'IP privato ne provoca il riavvio, con conseguente tempo di inattività.

Per configurare un'istanza esistente in modo che utilizzi l'IP privato:

Console

  1. Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.

    Vai a Istanze Cloud SQL

  2. Per aprire la pagina Panoramica di un'istanza, fai clic sul nome dell'istanza.
  3. Seleziona Connections (Connessioni) dal menu di navigazione di Cloud SQL.
  4. Nella scheda Networking, seleziona la casella di controllo IP privato.

    Un elenco a discesa mostra le reti disponibili nel progetto.

  5. Seleziona la rete VPC che vuoi utilizzare:
  6. Se vedi il messaggio È richiesta una connessione privata ai servizi:

    1. Fai clic su Configura connessione.
    2. Nella sezione Alloca un intervallo IP, scegli una delle seguenti opzioni:
      • Seleziona uno o più intervalli IP esistenti o creane uno nuovo dal menu a discesa. Il menu a discesa include eventuali intervalli allocati in precedenza, se presenti, oppure puoi selezionare Alloca un nuovo intervallo IP e inserire un nuovo intervallo e un nuovo nome.
      • Utilizza un intervallo IP allocato automaticamente nella tua rete.
    3. Fai clic su Continua.
    4. Fai clic su Crea connessione.
    5. Verifica che sia visualizzato lo stato La connessione privata ai servizi per la rete VPC_NETWORK_NAME è stata creata.
  7. Fai clic su Salva.

gcloud

Assicurati che il progetto sia configurato per l' accesso privato ai servizi.

Aggiorna l'istanza Cloud SQL utilizzando il parametro --network per specificare il nome della rete VPC selezionata.

gcloud beta sql instances patch INSTANCE_ID \
--project=PROJECT_ID \
--network=projects/NETWORK_PROJECT_ID/global/networks/VPC_NETWORK_NAME \
--no-assign-ip

REST v1

Crea una nuova istanza con un indirizzo IP privato:

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: L'ID del progetto
  • INSTANCE_ID: L'ID dell'istanza
  • VPC_NETWORK_NAME: Specifica il nome della rete Virtual Private Cloud (VPC) che vuoi utilizzare per questa istanza. L'accesso privato ai servizi deve essere già configurato per la rete.
  • RANGE_NAME: Facoltativo. Se specificato, imposta il nome di un intervallo a cui viene allocato un intervallo IP. Il nome dell'intervallo deve essere conforme a RFC-1035 e contenere da 1 a 63 caratteri.
  • AUTHORIZED_NETWORKS: Per le connessioni con IP pubblico, specifica le connessioni dalle reti autorizzate che possono connettersi alla tua istanza.

Per il parametro ipv4Enabled, imposta il valore su true se utilizzi un indirizzo IP pubblico per la tua istanza o su false se l'istanza ha un indirizzo IP privato.

Metodo HTTP e URL:

PATCH https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/instances/INSTANCE_ID

Corpo JSON della richiesta:

{
  "settings":
  {
    "ipConfiguration": {
      "ipv4Enabled": false,
      "privateNetwork": "projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME",
      "allocatedIpRange": "RANGE_NAME"
      "authorizedNetworks": [AUTHORIZED_NETWORKS],
      
    }
  }
}

Per inviare la richiesta, espandi una delle seguenti opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

REST v1beta4

Crea una nuova istanza con un indirizzo IP privato:

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: L'ID del progetto
  • INSTANCE_ID: L'ID dell'istanza
  • VPC_NETWORK_NAME: Specifica il nome della rete Virtual Private Cloud (VPC) che vuoi utilizzare per questa istanza. L'accesso privato ai servizi deve essere già configurato per la rete.
  • RANGE_NAME: Facoltativo. Se specificato, imposta il nome di un intervallo a cui viene allocato un intervallo IP. Il nome dell'intervallo deve essere conforme a RFC-1035 e contenere da 1 a 63 caratteri.
  • AUTHORIZED_NETWORKS: per le connessioni con IP pubblico, specifica le connessioni dalle reti autorizzate che possono connettersi alla tua istanza.

Per il parametro ipv4Enabled, imposta il valore su true se utilizzi un indirizzo IP pubblico per la tua istanza o su false se l'istanza ha un indirizzo IP privato.

Metodo HTTP e URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID

Corpo JSON della richiesta:

{
  "settings":
  {
    "ipConfiguration": {
      "ipv4Enabled": false,
      "privateNetwork": "projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME",
      "allocatedIpRange": "RANGE_NAME"
      "authorizedNetworks": [AUTHORIZED_NETWORKS],
      
    }
  }
}

Per inviare la richiesta, espandi una delle seguenti opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

Connettiti a un'istanza tramite IP privato

Puoi utilizzare l'accesso privato ai servizi per connetterti alle istanze Cloud SQL da istanze di Compute Engine o Google Kubernetes Engine nella stessa rete VPC (definita qui come origini interne) o dall'esterno di questa rete (un'origine esterna).

Connettiti da una fonte interna

Per connettersi da un'origine nello stesso progetto Google Cloud della tua istanza Cloud SQL, ad esempio il proxy di autenticazione Cloud SQL in esecuzione su una risorsa Compute Engine, questa risorsa deve trovarsi nella stessa rete VPC in cui è stato stabilito l'accesso ai servizi privati per l'istanza Cloud SQL.

Per connetterti da un'origine serverless, come l'ambiente standard App Engine, Cloud Run o Cloud Functions, l'applicazione o la funzione si connettono direttamente all'istanza tramite l'accesso VPC serverless senza il proxy di autenticazione Cloud SQL.

Connettersi da una sorgente esterna

Se una rete esterna, ad esempio una rete on-premise o una rete VPC, è connessa alla rete VPC a cui è connessa l'istanza Cloud SQL, puoi utilizzare Cloud VPN o Cloud Interconnect per connetterti all'istanza da un client nella rete esterna.

Per consentire connessioni da una rete esterna:

  1. Assicurati che la tua rete VPC sia connessa alla rete esterna tramite un tunnel Cloud VPN o un collegamento VLAN per Dedicated Interconnect o Partner Interconnect.
  2. Assicurati che le sessioni BGP (Border Gateway Protocol) sui router Cloud che gestiscono i tunnel Cloud VPN e i collegamenti Cloud Interconnect (VLAN) abbiano ricevuto prefissi (destinazioni) specifici dalla rete on-premise.

    Le route predefinite (destinazione 0.0.0.0/0) non possono essere importate nella rete VPC di Cloud SQL perché questa rete ha una propria route predefinita locale. Le route locali per una destinazione vengono utilizzate anche se il peering Cloud SQL è configurato per importare route personalizzate dalla rete VPC.

  3. Identifica le connessioni in peering prodotte dalla connessione privata dei servizi. A seconda del servizio, la connessione privata ai servizi potrebbe creare una o più delle seguenti connessioni in peering, ma non necessariamente tutte:
    • cloudsql-mysql-googleapis-com
    • cloudsql-postgres-googleapis-com
    • servicenetworking-googleapis-com
  4. Aggiorna tutte le connessioni in peering per abilitare l'opzione Esporta route personalizzate.
  5. Identifica l'intervallo allocato utilizzato dalla connessione ai servizi privati.
  6. Configura la modalità di pubblicità personalizzata del router Cloud per l'intervallo allocato sui router Cloud che gestiscono le sessioni BGP per i tunnel Cloud VPN o i collegamenti di Cloud Interconnect (VLAN).

Connetti da Cloud Shell

Cloud Shell non supporta la connessione a un'istanza Cloud SQL che ha solo un indirizzo IP privato.

Connettiti da indirizzi IP non RFC 1918

RFC 1918 specifica gli indirizzi IP assegnati per essere utilizzati internamente (ossia all'interno di un'organizzazione) e non verranno instradati su internet. In particolare, si tratta di:

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16

Le connessioni a un'istanza Cloud SQL che utilizzano un indirizzo IP privato vengono autorizzate automaticamente per gli intervalli di indirizzi RFC 1918. In questo modo tutti i client privati possono accedere al database senza passare per il proxy.

Per connetterti da un indirizzo IP non RFC 1918, devi impostare l'autorizzazione IP per istanza in modo da consentire il traffico da intervalli di indirizzi IP non RFC 1918.

Ad esempio, utilizza un comando gcloud come questo:

gcloud sql instances patch INSTANCE_NAME \
--authorized-networks=192.88.99.0/24,11.0.0.0/24

Cloud SQL non apprende le route di subnet non RFC 1918 dalla rete VPC per impostazione predefinita. Per esportare route non RFC 1918 devi aggiornare il peering di rete a Cloud SQL.

gcloud compute networks peerings update PEERING_CONNECTION \
--network=VPC_NETWORK_NAME \
--export-subnet-routes-with-public-ip \
--project=PROJECT_ID

    Sostituisci quanto segue:

  • PEERING_CONNECTION è il nome della connessione in peering prodotta dalla connessione dei servizi privati tra la tua rete VPC e la rete del producer di servizi.
  • VPC_NETWORK_NAME è il nome della tua rete VPC.
  • PROJECT_ID è l'ID del progetto della rete VPC. Se utilizzi un VPC condiviso, utilizza l'ID progetto host.

Per ridurre l'esaurimento degli indirizzi IP, puoi utilizzare indirizzi IP pubblici utilizzati privatamente.

Connettiti da indirizzi IP pubblici utilizzati privatamente

Se vuoi configurare l'istanza in un intervallo di indirizzi IP pubblici utilizzato privatamente, abilita export-subnet-routes-with-public-ip sul peering di rete tra la tua rete e la rete Cloud SQL.

gcloud compute networks peerings update PEERING_CONNECTION \
--network=VPC_NETWORK_NAME \
--export-subnet-routes-with-public-ip \
--project=PROJECT_ID

    Sostituisci quanto segue:

  • PEERING_CONNECTION è il nome della connessione in peering prodotta dalla connessione ai servizi privati tra la tua rete VPC e la rete del producer di servizi. Per conoscere il nome della connessione in peering, vai alla pagina Peering di rete VPC.
  • VPC_NETWORK_NAME è il nome della tua rete VPC.
  • PROJECT_ID è l'ID del progetto della rete VPC. Se utilizzi un VPC condiviso, utilizza l'ID progetto host.

Connettiti a un'istanza configurata con indirizzi IP pubblici utilizzati privatamente

Se l'istanza è configurata in un intervallo di indirizzi IP pubblici utilizzato privatamente e vuoi connetterti all'istanza, abilita import-subnet-routes-with-public-ip sul peering di rete tra la tua rete e la rete Cloud SQL.

gcloud compute networks peerings update PEERING_CONNECTION \
--network=VPC_NETWORK_NAME \
--import-subnet-routes-with-public-ip \
--project=PROJECT_ID

    Sostituisci quanto segue:

  • PEERING_CONNECTION è il nome della connessione in peering prodotta dalla connessione ai servizi privati tra la tua rete VPC e la rete del producer di servizi. Per conoscere il nome della connessione in peering, vai alla pagina Peering di rete VPC.
  • VPC_NETWORK_NAME è il nome della tua rete VPC.
  • PROJECT_ID è l'ID del progetto della rete VPC. Utilizza l'ID progetto host se usi un VPC condiviso.

Risolvere i problemi

Consulta la risoluzione dei problemi per i problemi di connettività noti e il debug dei problemi di connessione per assistenza con l'autodiagnosi.

Passaggi successivi