Configurare sia l'accesso privato ai servizi sia Private Service Connect

Questa pagina descrive come configurare sia l'accesso ai servizi privati sia Private Service Connect.

Configurando l'accesso privato ai servizi, puoi allocare un intervallo di indirizzi IP e creare una connessione di servizio privato per la rete Virtual Private Cloud (VPC) nel tuo progetto Google Cloud. In questo modo, le risorse nella rete VPC possono connettersi alle tue istanze Cloud SQL.

Configurando Private Service Connect, puoi connetterti a un'istanza Cloud SQL principale o a una delle relative repliche di lettura da più reti VPC appartenenti a gruppi, team, progetti o organizzazioni diversi.

Crea un'istanza che supporti l'accesso ai servizi privati e Private Service Connect

Se crei un'istanza Cloud SQL che supporta sia l'accesso privato ai servizi sia Private Service Connect, puoi usufruire dei vantaggi di entrambi i servizi. Per saperne di più, consulta Opzioni di connessione per le istanze.

Con Private Service Connect puoi connetterti a un'istanza Cloud SQL da più reti VPC appartenenti a gruppi, team, progetti o organizzazioni diversi.

Puoi creare un'istanza Cloud SQL che supporti l'accesso privato ai servizi e Private Service Connect utilizzando gcloud CLI o l'API.

gcloud

Per creare un'istanza che supporti sia l'accesso ai servizi privati sia Private Service Connect, utilizza il comando gcloud beta sql instances create:

gcloud beta sql instances create INSTANCE_NAME \
--project=PROJECT_ID \
--region=REGION_NAME \
--enable-private-service-connect \
--allowed-psc-projects=ALLOWED_PROJECTS \
--availability-type=AVAILABILITY_TYPE \
--no-assign-ip \
--allocated-ip-range-name=RANGE_NAME \
--enable-google-private-path \
--tier=MACHINE_TYPE \
--database-version=DATABASE_VERSION \
--network=VPC_PSA_NETWORK_PATH \
--enable-bin-log \
--psc-auto-connections=network=VPC_PSC_NETWORK_PATH,project=SERVICE_PROJECT

Esegui le seguenti sostituzioni:

  • INSTANCE_NAME: il nome dell'istanza.
  • PROJECT_ID: l'ID o il numero di progetto del progetto Google Cloud che contiene l'istanza.
  • REGION_NAME: il nome della regione per l'istanza.
  • ALLOWED_PROJECTS: un elenco di ID o numeri di progetto consentiti, separati da virgole. Se un progetto non è incluso in questo elenco, non puoi creare endpoint Private Service Connect nel progetto per connetterti all'istanza.

  • AVAILABILITY_TYPE: abilita l'alta disponibilità per l'istanza. Per questo parametro, specifica uno dei seguenti valori:
    • REGIONAL: abilita la disponibilità elevata ed è consigliato per le istanze di produzione. Viene eseguito il failover dell'istanza in un'altra zona all'interno della regione selezionata.
    • ZONAL: non forniscono funzionalità di failover. Questo è il valore predefinito.

    Per ulteriori informazioni su come impostare e rimuovere l'alta disponibilità per le istanze, consulta Configurare un'istanza esistente per l'alta disponibilità e Disattivare l'alta disponibilità per un'istanza.

  • RANGE_NAME: per questo parametro facoltativo, imposta un nome per un intervallo per il quale è allocato un intervallo IP. Il nome dell'intervallo deve essere conforme a RFC 1035 e contenere da 1 a 63 caratteri.
  • MACHINE_TYPE: il tipo di macchina per l'istanza.
  • DATABASE_VERSION: la versione del database per l'istanza (ad esempio MYSQL_8_0).
  • VPC_PSA_NETWORK_PATH: il nome e il percorso della rete VPC a cui si connette l'istanza (ad esempio "projects/PROJECT_ID/global/networks/default"). Questa rete viene utilizzata per le connessioni di accesso privato ai servizi e per l'indirizzo IP di accesso privato ai servizi per l'istanza Cloud SQL.
  • VPC_PSC_NETWORK_PATH: il percorso della rete VPC da cui deve essere creato l'endpoint Private Service Connect. Ad esempio:
    projects/my-host-project/global/networks/default.
  • SERVICE_PROJECT: il progetto in cui viene creato l'endpoint Private Service Connect. Se la rete VPC non è un VPC condiviso, questo può essere solo il progetto host per la rete. Se si tratta di un VPC condiviso, può essere il progetto host o il progetto di servizio.

Per scoprire come connetterti a un'istanza in cui è abilitato Private Service Connect, consulta Connettersi a un'istanza Cloud SQL.

Per disattivare l'IP pubblico, utilizza il parametro --no-assign-ip.

Se vuoi, puoi anche utilizzare il parametro --enable-google-private-path per consentire ad altri Google Cloud servizi come BigQuery di accedere ai dati in Cloud SQL ed eseguire query su questi dati tramite una connessione IP privata. Questo parametro è valido solo se:

  • Utilizzi il parametro --no-assign-ip.
  • Utilizza il parametro --network per specificare il nome della rete VPC che vuoi utilizzare per creare una connessione privata.

Terraform

Per creare un'istanza con accesso ai servizi privati e Private Service Connect abilitati, utilizza la google_sql_database_instancerisorsa 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" "default" {
  name             = "mysql-instance"
  region           = "us-central1"
  database_version = "MYSQL_8_0"

  depends_on = [google_service_networking_connection.default]

  settings {
    tier = "db-f1-micro"
    ip_configuration {
      psc_config {
        psc_enabled               = true
        allowed_consumer_projects = [] # Add consumer project IDs here.
      }
      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
}

resource "google_compute_address" "default" {
  name         = "psc-compute-address-${google_sql_database_instance.default.name}"
  region       = "us-central1"
  address_type = "INTERNAL"
  subnetwork   = "default"      # Replace value with the name of the subnet here.
  address      = "192.168.0.43" # Replace value with the IP address to reserve.
}

data "google_sql_database_instance" "default" {
  name = resource.google_sql_database_instance.default.name
}

resource "google_compute_forwarding_rule" "default" {
  name                  = "psc-forwarding-rule-${google_sql_database_instance.default.name}"
  region                = "us-central1"
  network               = "default"
  ip_address            = google_compute_address.default.self_link
  load_balancing_scheme = ""
  target                = data.google_sql_database_instance.default.psc_service_attachment_link
}

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

Prepara Cloud Shell

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

    Devi eseguire questo comando una sola volta per progetto e puoi farlo 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 di Terraform deve avere una propria directory (chiamata anche modulo principale).

  1. In Cloud Shell, crea una directory e un nuovo file al suo interno. Il nome 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 di esempio in ogni sezione o passaggio.

    Copia il codice di esempio nel main.tf appena creato.

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

  3. Rivedi 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

    Se vuoi, 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 sta per creare o aggiornare corrispondano alle tue aspettative:
    terraform plan

    Apporta le correzioni necessarie alla configurazione.

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

    Attendi che Terraform mostri il messaggio "Applicazione completata".

  3. Apri il tuo 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.

REST

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

  • PROJECT_ID: l'ID o il numero di progetto del progetto Google Cloud che contiene l'istanza.
  • INSTANCE_NAME: il nome dell'istanza.
  • REGION_NAME: il nome della regione per l'istanza.
  • AVAILABILITY_TYPE: abilita l'alta disponibilità per l'istanza. Per questo parametro, specifica uno dei seguenti valori:
    • REGIONAL: abilita la disponibilità elevata ed è consigliato per le istanze di produzione. Viene eseguito il failover dell'istanza in un'altra zona all'interno della regione selezionata.
    • ZONAL: non forniscono funzionalità di failover. Questo è il valore predefinito.

    Per ulteriori informazioni su come impostare e rimuovere l'alta disponibilità per le istanze, consulta Configurare un'istanza esistente per l'alta disponibilità e Disattivare l'alta disponibilità per un'istanza.

  • VPC_PSA_NETWORK_PATH: il percorso della rete VPC a cui si connette l'istanza (ad esempio "projects/PROJECT_ID/global/networks/default"). Questa rete viene utilizzata per le connessioni di accesso privato ai servizi e per l'indirizzo IP di accesso privato ai servizi per l'istanza Cloud SQL.
  • RANGE_NAME: per questo parametro facoltativo, imposta un nome per un intervallo per il quale è allocato un intervallo IP. Il nome dell'intervallo deve essere conforme a RFC 1035 e contenere da 1 a 63 caratteri.
  • ALLOWED_PROJECTS: un elenco di ID o numeri di progetto consentiti, separati da virgole. Se un progetto non è incluso in questo elenco, non puoi creare endpoint Private Service Connect nel progetto per connetterti all'istanza.

  • VPC_PSC_NETWORK_PATH: il percorso della rete VPC da cui deve essere creato l'endpoint Private Service Connect. Ad esempio:
    projects/my-host-project/global/networks/default.
  • SERVICE_PROJECT: il progetto in cui viene creato l'endpoint Private Service Connect. Se la rete VPC non è un VPC condiviso, questo può essere solo il progetto host per la rete. Se si tratta di un VPC condiviso, può essere il progetto host o il progetto di servizio.

  • MACHINE_TYPE: il tipo di macchina per l'istanza.

Per scoprire come connetterti a un'istanza in cui è abilitato Private Service Connect, consulta Connettersi a un'istanza Cloud SQL.

Imposti il parametro ipv4Enabled su false perché l'istanza ha un indirizzo IP interno.

Se imposti il parametro facoltativo enablePrivatePathForGoogleCloudServices su true, consenti ad altri Google Cloud servizi, come BigQuery, di accedere ai dati in Cloud SQL ed eseguire query su questi dati tramite una connessione IP interna. Se imposti questo parametro su false, altri Google Cloud servizi non possono accedere ai dati in Cloud SQL tramite una connessione IP interna.

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

{
  "name": "INSTANCE_NAME",
  "project": PROJECT_ID",
  "region": "REGION_NAME",
  "databaseVersion": "MYSQL_8_0",
  "kind": "sql#instance",
  "settings": {
    "availabilityType": "AVAILABILITY_TYPE",
    "backupConfiguration": {
      "binaryLogEnabled": true,
      "enabled": true,
      "kind": "sql#backupConfiguration",
      "startTime": "00:00"
    },
    "ipConfiguration": {
      "ipv4Enabled": false,
      "privateNetwork": VPC_PSA_NETWORK_PATH,
      "allocatedIpRange": "RANGE_NAME",
      "enablePrivatePathForGoogleCloudServices": true,
      "pscConfig": {
        "allowedConsumerProjects": [
          "ALLOWED_PROJECTS"
        ],
        "pscAutoConnections": [
          {
            "consumerProject":"SERVICE_PROJECT",
            "consumerNetwork":"projects/SERVICE_PROJECT/global/networks/VPC_PSC_NETWORK_PATH"
          }
        ],
        "pscEnabled": true
      }
    },
    "kind": "sql#settings",
    "pricingPlan": "PER_USE",
    "replicationType": "SYNCHRONOUS",
    "tier": "MACHINE_TYPE"
  }
}

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME",
  "status": "RUNNING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "startTime": "2023-06-14T18:48:35.499Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

Disattivare Private Service Connect per un'istanza

Puoi disattivare Private Service Connect per un'istanza per cui sono abilitati sia l'accesso ai servizi privati sia Private Service Connect.

Quando disattivi Private Service Connect per l'istanza, questa operazione dovrebbe richiedere 8 minuti con circa 45 secondi di tempo di riposo dell'istanza. Al termine dell'operazione, i percorsi di connettività di accesso privato ai servizi e Private Service Connect non coesistono più nella stessa istanza. Non puoi connetterti all'istanza utilizzando Private Service Connect.

Puoi disattivare Private Service Connect per un'istanza utilizzando gcloud CLI o l'API.

gcloud

Per disattivare Private Service Connect per un'istanza, utilizza il comando gcloud beta sql instances patch:

gcloud beta sql instances patch INSTANCE_NAME \
--project=PROJECT_ID \
--no-enable-private-service-connect \
--clear-allowed-psc-projects

Esegui le seguenti sostituzioni:

  • INSTANCE_NAME: il nome dell'istanza
  • PROJECT_ID: l'ID o il numero di progetto del progetto Google Cloud che contiene l'istanza

REST

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

  • PROJECT_ID: l'ID o il numero di progetto del progetto Google Cloud che contiene l'istanza
  • INSTANCE_NAME: il nome dell'istanza

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

{
  "kind": "sql#instance",
  "name": "INSTANCE_NAME",
  "project": "PROJECT_ID",
  "settings": {
    "ipConfiguration": {
      "pscConfig": {
        "pscEnabled": "false",
        "allowedConsumerProjects": [{}]
      }
    },
    "kind": "sql#settings"
  }
}

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME",
  "status": "RUNNING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "startTime": "2023-06-14T18:48:35.499Z",
  "operationType": "UPDATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

Abilita Private Service Connect per un'istanza

Puoi attivare Private Service Connect per un'istanza per cui è già abilitato l'accesso ai servizi privati. Puoi utilizzare Private Service Connect per connetterti a un'istanza Cloud SQL da più reti VPC.

Quando attivi Private Service Connect per l'istanza, puoi prevedere che questa operazione richieda 8 minuti con circa 45 secondi di tempo di riposo dell'istanza. Al termine dell'operazione, sia l'accesso privato ai servizi sia i percorsi di connettività Private Service Connect coesistono nella stessa istanza.

Puoi attivare Private Service Connect per un'istanza utilizzando gcloud CLI o l'API.

gcloud

Per attivare Private Service Connect per un'istanza, utilizza il comando gcloud beta sql instances patch:

gcloud beta sql instances patch INSTANCE_NAME \
--project=PROJECT_ID \
--enable-private-service-connect \
--allowed-psc-projects=ALLOWED_PROJECTS \
--psc-auto-connections=network=VPC_PSC_NETWORK_PATH,project=SERVICE_PROJECT

Esegui le seguenti sostituzioni:

  • INSTANCE_NAME: il nome dell'istanza
  • PROJECT_ID: l'ID o il numero di progetto del progetto Google Cloud che contiene l'istanza
  • ALLOWED_PROJECTS: un elenco di ID o numeri di progetto consentiti, separati da virgole. Se un progetto non è incluso in questo elenco, non puoi creare endpoint Private Service Connect nel progetto per connetterti all'istanza.

  • VPC_PSC_NETWORK_PATH: il percorso della rete VPC da cui viene creato l'endpoint Private Service Connect. Ad esempio:
    projects/my-host-project/global/networks/default.
  • SERVICE_PROJECT: il progetto in cui viene creato l'endpoint Private Service Connect. Se la rete VPC non è un VPC condiviso, questo può essere solo il progetto host per la rete. Se si tratta di un VPC condiviso, può essere il progetto host o il progetto di servizio.

Per scoprire come connetterti a un'istanza in cui è abilitato Private Service Connect, consulta Connettersi a un'istanza Cloud SQL.

REST

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

  • PROJECT_ID: l'ID o il numero di progetto del progetto Google Cloud che contiene l'istanza.
  • INSTANCE_NAME: il nome dell'istanza.
  • ALLOWED_PROJECTS: un elenco di ID o numeri di progetto consentiti, separati da virgole. Questi progetti sostituiscono i progetti già configurati per l'utilizzo di Private Service Connect. Se un progetto non è incluso in questo elenco, non puoi creare endpoint Private Service Connect nel progetto per connetterti all'istanza.
  • VPC_PSC_NETWORK_PATH: il percorso della rete VPC da cui viene creato l'endpoint Private Service Connect. Ad esempio:
    projects/my-host-project/global/networks/default.
  • SERVICE_PROJECT: il progetto in cui viene creato l'endpoint Private Service Connect. Se la rete VPC non è un VPC condiviso, questo può essere solo il progetto host per la rete. Se si tratta di un VPC condiviso, può essere il progetto host o il progetto di servizio.

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

{
  "kind": "sql#instance",
  "name": "INSTANCE_NAME",
  "project": "PROJECT_ID",
  "settings": {
    "ipConfiguration": {
      "pscConfig": {
        "pscAutoConnections": [
          {
            "consumerProject":"SERVICE_PROJECT",
            "consumerNetwork":"projects/SERVICE_PROJECT/global/networks/VPC_PSC_NETWORK_PATH"
          }
        ],
        "pscEnabled": "true",
        "allowedConsumerProjects": [ALLOWED_PROJECTS]
      }
    },
    "kind": "sql#settings"
  }
}

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME",
  "status": "RUNNING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "startTime": "2023-06-14T18:48:35.499Z",
  "operationType": "UPDATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

Per scoprire come connetterti a un'istanza in cui è abilitato Private Service Connect, consulta Connettersi a un'istanza Cloud SQL.