Configurazione dell'accesso privato ai servizi

In questa pagina viene descritto come configurare l'accesso privato ai servizi nella rete VPC.

L'accesso privato ai servizi è implementato come connessione di peering VPC tra la rete VPC e la rete VPC Google Cloud sottostante in cui si trova l'istanza Cloud SQL. La connessione privata abilita le istanze VM nella rete VPC e i servizi a cui accedi per comunicare esclusivamente tramite indirizzi IP interni. Le istanze VM non hanno bisogno dell'accesso a internet o di indirizzi IP esterni per raggiungere i servizi disponibili tramite l'accesso privato ai servizi.

Prima di iniziare

Cloud SQL richiede l'accesso privato ai servizi per ogni rete VPC utilizzata per le connessioni con IP privato. Per gestire una connessione di accesso privato ai servizi, l'utente deve disporre delle seguenti autorizzazioni IAM:

  • compute.networks.list
  • compute.addresses.create
  • compute.addresses.list
  • servicenetworking.services.addPeering

Se non disponi di queste autorizzazioni, potresti visualizzare errori di autorizzazioni insufficienti.

Se utilizzi una rete VPC condivisa, devi anche:

  • Aggiungi l'utente al progetto host.
  • Assegna le stesse quattro autorizzazioni all'utente nel progetto host.
  • Concedi all'utente l'autorizzazione IAM compute.globalAddresses.list.

Configurare l'accesso privato ai servizi per Cloud SQL

Il processo di configurazione dell'accesso privato ai servizi è composto da due parti:

  • Selezionare un intervallo di indirizzi IP esistente o allocarne uno nuovo.

    Puoi anche consentire a Google di allocare automaticamente l'intervallo. In questo caso, Google allocherà automaticamente un intervallo IP con lunghezza del prefisso pari a /20 e utilizzerà il nome default-ip-range.

    Se vuoi creare istanze in più regioni o per tipi di database diversi, devi avere a disposizione un intervallo minimo di /24 di indirizzi IP per ogni regione o tipo di database. Sono incluse altre applicazioni, come Filestore o Memorystore. Per una nuova regione o tipo di database, Cloud SQL deve avere un intervallo /24 gratuito.

  • Creazione di una connessione privata dalla tua rete VPC alla rete del producer di servizi sottostante.

Alloca un intervallo di indirizzi IP

Console

  1. Nella console Google Cloud, vai alla pagina Reti VPC.

    Vai a Reti VPC

  2. Seleziona la rete VPC che vuoi utilizzare.
  3. Seleziona la scheda Connessione ai servizi privati.
  4. Seleziona la scheda Intervalli IP allocati per i servizi.
  5. Fai clic su Assegna intervallo IP.
  6. Nel campo Nome dell'intervallo allocato, specifica google-managed-services-VPC_NETWORK_NAME, dove VPC_NETWORK_NAME è il nome della rete VPC che stai collegando (ad esempio google-managed-services-default). La descrizione è facoltativa.
  7. Seleziona l'opzione Personalizzato, quindi inserisci l'intervallo di indirizzi IP da allocare, in notazione CIDR.
  8. Fai clic su Assegna per creare l'intervallo allocato.

gcloud

Esegui una di queste operazioni:

  • Per specificare un intervallo di indirizzi e una lunghezza del prefisso (subnet mask), utilizza i flag addresses e prefix-length. Ad esempio, per allocare il blocco CIDR 192.168.0.0/16, specifica 192.168.0.0 per l'indirizzo e 16 per la lunghezza del prefisso.
  •         gcloud compute addresses create google-managed-services-VPC_NETWORK_NAME \
            --global \
            --purpose=VPC_PEERING \
            --addresses=192.168.0.0 \
            --prefix-length=16 \
            --network=projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME
            
  • Per specificare solo la lunghezza del prefisso (subnet mask), utilizza il flag prefix-length. Quando ometti l'intervallo di indirizzi, Google Cloud seleziona automaticamente un intervallo di indirizzi inutilizzato nella tua rete VPC. L'esempio seguente seleziona un intervallo di indirizzi IP inutilizzato con una lunghezza del prefisso di 16 bit.
  •         gcloud compute addresses create google-managed-services-VPC_NETWORK_NAME \
            --global \
            --purpose=VPC_PEERING \
            --prefix-length=16 \
            --network=projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME
            

Sostituisci VPC_NETWORK_NAME con il nome della tua rete VPC, ad esempio my-vpc-network.

L'esempio seguente alloca un intervallo IP che consente alle risorse nella rete VPC my-vpc-network di connettersi alle istanze Cloud SQL utilizzando l'IP privato.

    gcloud compute addresses create google-managed-services-my-vpc-network \
    --global \
    --purpose=VPC_PEERING \
    --prefix-length=16 \
    --network=projects/myprojectid/global/networks/myvpcnetwork \
    --project=my-project
    

Terraform

Per allocare un intervallo di indirizzi IP, utilizza una risorsa Terraform.

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
}

Applica le modifiche

Per applicare la configurazione Terraform in 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

    Se imposti valori espliciti nel file di configurazione Terraform, le variabili di ambiente vengono sostituite.

Prepara la directory

Ogni file di configurazione Terraform deve avere una propria directory (detta 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 è indicato come 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 file main.tf appena creato.

    Se vuoi, 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. Rivedi la configurazione e verifica che le risorse che Terraform creerà o aggiornerà corrispondano alle tue aspettative:
    terraform plan

    Apporta le correzioni necessarie alla configurazione.

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

    Attendi finché Terraform non visualizza il messaggio "Applicazione completata".

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

Elimina le modifiche

Rimuovi le risorse applicate in precedenza con la tua configurazione Terraform eseguendo il comando seguente e inserendo yes al prompt:

terraform destroy

Crea una connessione privata

Console

  1. Nella console Google Cloud, vai alla pagina Reti VPC.

    Vai a Reti VPC

  2. Seleziona la rete VPC che vuoi utilizzare.
  3. Seleziona la scheda Connessione ai servizi privati.
  4. Seleziona la scheda Connessioni private ai servizi.
  5. Fai clic su Crea connessione per creare una connessione privata tra la tua rete e un producer di servizi.
  6. Per Allocazione assegnata, seleziona uno o più intervalli assegnati esistenti che non vengono utilizzati da altri producer di servizi.
  7. Fai clic su Connetti per creare la connessione.

gcloud

  1. Creare una connessione privata.

    gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=google-managed-services-VPC_NETWORK_NAME \
    --network=VPC_NETWORK_NAME \
    --project=PROJECT_ID
    

    Il comando avvia un'operazione di istanza Cloud SQL a lunga esecuzione, restituendo un ID operazione.

  2. Controlla se l'operazione è riuscita.

    gcloud services vpc-peerings operations describe \
    --name=OPERATION_ID
    

Puoi specificare più di un intervallo allocato quando crei una connessione privata. Ad esempio, se un intervallo è esaurito, puoi assegnare intervalli allocati aggiuntivi. Il servizio utilizza gli indirizzi IP di tutti gli intervalli forniti nell'ordine specificato.

Terraform

Per creare una connessione privata, utilizza una risorsa Terraform.

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]
}

A un account di servizio nel formato service-HOST_PROJECT_NUMBER@service-networking.iam.gserviceaccount.com viene concesso il ruolo servicenetworking.serviceAgent durante la creazione della connessione privata perché viene eseguito il provisioning dell'account just-in-time.

Se viene visualizzato un errore sull'autorizzazione compute.globalAddresses.list o compute.projects.get per il progetto, esegui questo comando gcloud:

gcloud projects add-iam-policy-binding HOST_PROJECT_NAME \
    --member=serviceAccount:service-HOST_PROJECT_NUMBER@service-networking.iam.gserviceaccount.com \
    --role=roles/servicenetworking.serviceAgent

Modificare la configurazione dell'accesso privato ai servizi

Puoi modificare l'intervallo di indirizzi allocato di una connessione privata ai servizi senza modificare le istanze Cloud SQL esistenti. Per modificare l'indirizzo IP privato di un'istanza Cloud SQL esistente, segui questi passaggi.

Per modificare l'intervallo di indirizzi allocato:

Console

  1. Nella console Google Cloud, vai alla pagina Reti VPC.

    Vai a Reti VPC

  2. Seleziona la rete VPC che vuoi utilizzare.
  3. Seleziona la scheda Connessione ai servizi privati.
  4. Seleziona la scheda Intervalli IP allocati per i servizi.
  5. Seleziona il nome dell'intervallo che vuoi eliminare.

  6. Fai clic su Rilascia.

  7. Fai clic su Assegna intervallo IP.

  8. Crea un nuovo intervallo con lo stesso nome e un nuovo intervallo

    Il nome è importante perché la connessione privata è già stata stabilita utilizzando questo nome indirizzo.

gcloud services vpc-peerings update \
--network=VPC_NETWORK_NAME \
--ranges=ALLOCATED_RANGES \
--service=servicenetworking.googleapis.com \
--force

Modifica l'indirizzo IP privato di un'istanza Cloud SQL esistente

Per modificare l'indirizzo IP privato di un'istanza Cloud SQL esistente, sposta l'istanza dalla rete originale a una rete VPC temporanea. Quindi, modifica la configurazione dell'accesso privato ai servizi della rete originale dell'istanza e sposta nuovamente l'istanza Cloud SQL nella rete originale.

Per passare a una rete VPC diversa, segui tutto tranne il passaggio finale (spostamento dell'istanza) nella procedura seguente. In questo caso, TEMPORARY_VPC_NETWORK_NAME è la nuova rete VPC. Inoltre, elimina la vecchia connessione privata. Potrebbero essere necessari alcuni giorni prima che la connessione privata eliminata non sia più visibile nella console Google Cloud.

Se l'istanza Cloud SQL è ospitata in una rete VPC condiviso, le variabili VPC_NETWORK_NAME utilizzate nelle seguenti istruzioni devono essere i nomi di rete VPC del progetto host. Per specificare una rete con una rete VPC condiviso, utilizza l'URL completo della rete, ad esempio projects/HOST_PROJECT/global/networks/NETWORK_NAME.

Console

  1. Nella console Google Cloud, vai alla pagina Reti VPC.

    Vai a Reti VPC

  2. Crea una rete VPC temporanea.
  3. Crea un'allocazione di IP nella rete VPC temporanea.
  4. Crea una connessione privata nella rete VPC temporanea.
  5. Sposta l'istanza Cloud SQL nella rete VPC temporanea.

    gcloud beta sql instances patch INSTANCE_ID \
      --project=PROJECT_ID \
      --network=projects/PROJECT_ID/global/networks/TEMPORARY_VPC_NETWORK_NAME \
      --no-assign-ip
    
  6. Modifica la configurazione dell'accesso privato ai servizi nella rete originale per aggiungere un nuovo intervallo allocato o eliminare quelli esistenti.

  7. Ripristina l'istanza Cloud SQL nella rete VPC originale.

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