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.

Se configuri 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.

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

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

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

Utilizzando 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 ai servizi privati 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 \
--psc-auto-connections=network=VPC_PSC_NETWORK_PATH,project=SERVICE_PROJECT

Effettua 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: attiva l'alta disponibilità per l'istanza. Per questo parametro, specifica uno dei seguenti valori:
    • REGIONAL: abilita l'alta disponibilità ed è consigliato per le istanze di produzione. L'istanza esegue il failover a un'altra zona all'interno della regione selezionata.
    • ZONAL: non forniscono funzionalità di failover. Questo è il valore predefinito.

    Per saperne di più 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 di intervallo per cui viene allocato un intervallo IP. Il nome dell'intervallo deve rispettare 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, POSTGRES_13).
  • 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 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, 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 per cui è abilitato Private Service Connect, consulta Connettersi a un'istanza Cloud SQL.

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

Inoltre, se vuoi, utilizza il parametro --enable-google-private-path per consentire ad altri servizi Google Cloud 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 l'accesso ai servizi privati e Private Service Connect abilitati, utilizza la risorsa Terraform google_sql_database_instance.


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             = "postgres-instance"
  region           = "us-central1"
  database_version = "POSTGRES_17"

  depends_on = [google_service_networking_connection.default]

  settings {
    tier              = "db-custom-2-7680"
    availability_type = "REGIONAL"
    backup_configuration {
      enabled = true
    }
    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
    }
  }
}

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"
  region       = "us-central1"
  address_type = "INTERNAL"
  subnetwork   = "default"      # Replace value with the name of the subnet here.
  address      = "192.168.0.42" # 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 di 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 in 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 di Terraform deve avere la propria directory (chiamata anche modulo radice).

  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 viene 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 file main.tf appena creato.

    (Facoltativo) Copia il codice da GitHub. Questa operazione è 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 effettuare questa operazione una sola volta per directory.
    terraform init

    (Facoltativo) Per utilizzare l'ultima versione 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 di Terraform eseguendo il comando seguente e inserendo yes al prompt:
    terraform apply

    Attendi che Terraform visualizzi il messaggio "Apply complete!" (Applicazione completata).

  3. Apri il tuo Google Cloud progetto 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: attiva l'alta disponibilità per l'istanza. Per questo parametro, specifica uno dei seguenti valori:
    • REGIONAL: abilita l'alta disponibilità ed è consigliato per le istanze di produzione. L'istanza esegue il failover a un'altra zona all'interno della regione selezionata.
    • ZONAL: non forniscono funzionalità di failover. Questo è il valore predefinito.

    Per saperne di più 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 di intervallo per cui viene allocato un intervallo IP. Il nome dell'intervallo deve rispettare 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, 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 per cui è abilitato Private Service Connect, consulta Connettersi a un'istanza Cloud SQL.

Hai impostato il parametro ipv4Enabled su false perché la tua istanza ha un indirizzo IP interno.

Se imposti il parametro facoltativo enablePrivatePathForGoogleCloudServices su true, consenti ad altri servizi Google Cloud , 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 servizi Google Cloud 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": "POSTGRES_13",
  "kind": "sql#instance",
  "settings": {
    "availabilityType": "AVAILABILITY_TYPE",
    "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 richiede 8 minuti con circa 45 secondi di inattività dell'istanza. Al termine dell'operazione, i percorsi di connettività di accesso privato ai servizi e Private Service Connect non coesistono più sulla 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

Effettua 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

Terraform

Per disattivare Private Service Connect per un'istanza, utilizza la risorsa Terraform google_sql_database_instance.

resource "google_sql_database_instance" "disable_psc_example" {
  name             = "postgres-disable-psc-example"
  region           = "us-central1"
  database_version = "POSTGRES_17"

  depends_on = [google_service_networking_connection.default]

  settings {
    tier              = "db-custom-2-7680"
    availability_type = "REGIONAL"
    backup_configuration {
      enabled = true
    }
    ip_configuration {
      psc_config {
        psc_enabled               = false
        allowed_consumer_projects = [] # clear consumer projects
      }
      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 # Set to "true" to prevent destruction of the resource
}

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

Abilitare Private Service Connect per un'istanza

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

Quando abiliti Private Service Connect per l'istanza, questa operazione richiede 8 minuti con circa 45 secondi di inattività dell'istanza. Al termine dell'operazione, i percorsi di connettività di accesso privato ai servizi e Private Service Connect coesistono sulla stessa istanza.

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

gcloud

Per abilitare 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

Effettua 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, 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 per cui è abilitato Private Service Connect, consulta Connettersi a un'istanza Cloud SQL.

Terraform

Per abilitare Private Service Connect per un'istanza, utilizza la risorsa Terraform google_sql_database_instance.

resource "google_sql_database_instance" "default" {
  name             = "postgres-instance"
  region           = "us-central1"
  database_version = "POSTGRES_17"

  depends_on = [google_service_networking_connection.default]

  settings {
    tier              = "db-custom-2-7680"
    availability_type = "REGIONAL"
    backup_configuration {
      enabled = true
    }
    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
    }
  }
}

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 quelli 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, 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 per cui è abilitato Private Service Connect, consulta Connettersi a un'istanza Cloud SQL.