Connettiti a un'istanza utilizzando Private Service Connect

Questa pagina descrive come utilizzare Private Service Connect per connettersi a un'istanza AlloyDB per PostgreSQL.

Puoi utilizzare Private Service Connect per connetterti a un'istanza AlloyDB principale o a una delle sue repliche di lettura oppure a un'istanza AlloyDB secondaria da più reti VPC (Virtual Private Cloud) appartenenti a gruppi, team, progetti o organizzazioni diversi.

Ruoli obbligatori

Per poter connetterti a un'istanza AlloyDB, devi concedere tutti i seguenti ruoli a un utente della tua rete VPC.

Ruolo Descrizione
compute.networkAdmin Concede il pieno controllo sulla rete VPC che avvia una connessione a un'istanza AlloyDB. Se utilizzi Private Service Connect per connetterti a un'istanza AlloyDB da più reti VPC, ogni rete ha il proprio amministratore.
dns.admin Concede il controllo completo sulle risorse Cloud DNS, inclusi record e zone DNS.
alloydb.admin Fornisce il controllo completo di un'istanza AlloyDB e la controlla durante il suo ciclo di vita.
alloydb.databaseUser (facoltativo) Fornisce l'accesso all'istanza AlloyDB. Se ti connetti tramite il client AlloyDB Auth Proxy, devi disporre del ruolo Client AlloyDB. Se esegui la connessione direttamente, non sono necessari ruoli e autorizzazioni IAM (Identity and Access Management).
Custom AlloyDB role (facoltativo) Se utilizzi un ruolo personalizzato, oltre a concedere i ruoli compute.networkAdmin e dns.admin, concedi le seguenti autorizzazioni:
  • alloydb.clusters.create: fornisce l'accesso per attivare Private Service Connect per un cluster.
  • alloydb.instances.create e alloydb.instances.update: forniscono l'accesso per aggiungere un elenco di progetti consentiti e per impostare un URI dell'allegato di rete per un'istanza.

Attivare Private Service Connect

Per abilitare la connettività in entrata, crea un cluster AlloyDB con Private Service Connect abilitato. Quando crei un'istanza principale, specifica i progetti consentiti per la connettività. Per la connettività in uscita, fornisci l'URI del collegamento alla rete.

Crea un cluster principale AlloyDB

L'esempio seguente utilizza il comando gcloud alloydb clusters create con il flag --enable-private-service-connect che crea un cluster AlloyDB con Private Service Connect abilitato.

La procedura di creazione di un cluster rimane invariata, ad eccezione del passaggio del flag --enable-private-service-connect. Per informazioni dettagliate sulla creazione di un cluster, vedi Creare un cluster e la relativa istanza principale.

Per creare il cluster, utilizza il comando gcloud alloydb clusters create.

  gcloud alloydb clusters create CLUSTER_ID \
    --password=PASSWORD \
    --region=REGION_ID \
    --project=PROJECT_ID \
    --enable-private-service-connect

Sostituisci quanto segue:

  • CLUSTER_ID: l'ID del cluster che stai creando. Deve iniziare con una lettera minuscola e può contenere lettere minuscole, numeri e trattini.

  • PASSWORD: la password da utilizzare per l'utente postgres predefinito.

  • REGION_ID: la regione in cui vuoi collocare il cluster.

  • PROJECT_ID: l'ID del progetto dove vuoi posizionare il cluster.

Questo comando avvia un'operazione a lunga esecuzione, restituendo un ID operazione.

Un cluster secondario creato per un cluster principale abilitato per Private Service Connect eredita automaticamente la configurazione di Private Service Connect. Per ulteriori informazioni, vedi Creare un cluster secondario.

Crea un'istanza AlloyDB

L'esempio seguente mostra come creare un'istanza principale con un elenco di progetti consentiti configurati. La procedura di creazione di un'istanza rimane invariata, ad eccezione del passaggio dell'elenco dei progetti consentiti utilizzando il flag --allowed-psc-projects per un cluster principale abilitato per Private Service Connect.

Per ulteriori informazioni sulla creazione di altri tipi di istanze, vedi Creare un'istanza del pool di lettura e Creare un'istanza secondaria.

gcloud

Per utilizzare gcloud CLI, puoi installare e inizializzare Google Cloud CLI oppure utilizzare Cloud Shell.

Per creare l'istanza principale, utilizza il comando gcloud alloydb instances create.

gcloud alloydb instances create INSTANCE_ID \
    --instance-type=PRIMARY \
    --cpu-count=CPU_COUNT \
    --availability-type=AVAILABILITY \
    --region=REGION_ID \
    --cluster=CLUSTER_ID \
    --project=PROJECT_ID \
    --allowed-psc-projects=ALLOWED_PROJECT_LIST
    --psc-network-attachment-uri=NETWORK_ATTACHMENT_URI

Sostituisci quanto segue:

  • INSTANCE_ID: l'ID dell'istanza che stai creando. Deve iniziare con una lettera minuscola e può contenere lettere minuscole, numeri e trattini.
  • CPU_COUNT: il numero di vCPU che vuoi per l'istanza. I valori validi sono:
    • 2: 2 vCPU, 16 GB di RAM
    • 4: 4 vCPU, 32 GB di RAM
    • 8: 8 vCPU, 64 GB di RAM
    • 16: 16 vCPU, 128 GB di RAM
    • 32: 32 vCPU, 256 GB di RAM
    • 64: 64 vCPU, 512 GB di RAM
    • 96: 96 vCPU, 768 GB di RAM
    • 128: 128 vCPU, 864 GB di RAM
  • AVAILABILITY: indica se questa istanza deve essere di alta disponibilità (HA) con nodi in più zone. I valori validi includono:
    • REGIONAL: crea un'istanza HA con nodi attivi e di standby separati e il failover automatico tra di essi. Questo è il valore predefinito, adatto per gli ambienti di produzione.
    • ZONAL: crea un'istanza di base contenente un solo nodo e senza failover automatico.
  • REGION_ID: la regione in cui vuoi collocare l'istanza.
  • CLUSTER_ID: l'ID del cluster creato in precedenza.
  • ALLOWED_PROJECT_LIST: l'elenco separato da virgole di ID progetto o numero di progetto a cui vuoi consentire l'accesso all'istanza, ad esempio my-project-1, 12345,my-project-n.
  • NETWORK_ATTACHMENT_URI: il nome completo della risorsa dell'URI allegato di rete che crei. Ad esempio: projects/PROJECT_ID/regions/REGION_ID/networkAttachments/NETWORK_ATTACHMENT_ID.

Terraform

Per creare un'istanza all'interno del cluster di database, utilizza una risorsa Terraform.

resource "google_alloydb_instance" "default" {
  cluster       = google_alloydb_cluster.default.name
  instance_id   = "alloydb-instance"
  instance_type = "PRIMARY"
  machine_config {
    cpu_count = 2
  }
  psc_instance_config {
  allowed_consumer_projects = ["123456789"]
  psc_interface_configs {
    network_attachment_resource = google_compute_network_attachment.default.id
  }
  }
}

resource "google_compute_network" "default" {
    name = "alloydb-network"
    auto_create_subnetworks = false
}

resource "google_compute_subnetwork" "default" {
    name = "alloydb-subnetwork"
    region = "us-central1"
    network = google_compute_network.default.id
    ip_cidr_range = "10.0.0.0/16"
}

resource "google_compute_network_attachment" "default" {
  name                  = "alloydb-network-attachment"
  region                = "us-central1"
  connection_preference = "ACCEPT_AUTOMATIC"
  subnetworks = [
    google_compute_subnetwork.default.self_link
  ]
}

data "google_project" "project" {}

Prepara Cloud Shell

Per applicare la configurazione Terraform in un progetto Google Cloud, prepara Cloud Shell come segue:

  1. Avvia Cloud Shell.
  2. Imposta il progetto Google Cloud predefinito in cui vuoi applicare le configurazioni di 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 all'interno di quella directory. Il nome del file deve essere un file TF, ad esempio main.tf. In questo documento, il file è indicato come main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 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.
    git clone https://github.com/terraform-google-modules/terraform-docs-samples
  3. Nella directory terraform-docs-samples, vai alla directory alloydb.
    cd terraform-docs-samples/alloydb
  4. Copia il codice di esempio nel main.tf appena creato.
    cp SAMPLE_FILE
    Sostituisci <var>SAMPLE_FILE</var> con il nome del file di esempio da copiare, ad esempio main.tf.
  5. Rivedi e modifica i parametri di esempio da applicare al tuo ambiente.
  6. Salva le modifiche.
  7. Inizializza Terraform. Devi eseguire questa operazione una sola volta per directory.
    terraform init
    Facoltativo: per utilizzare la versione più recente del provider Google, includi l'opzione -upgrade:
    terraform init -upgrade

Applica le modifiche

  1. Rivedi la configurazione per verificare che gli aggiornamenti di Terraform 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 finché Terraform non mostra il messaggio Apply complete!.

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.

Configura la connettività in entrata

Dopo aver attivato il PSC per un'istanza AlloyDB, puoi ottenere l'URL del collegamento del servizio e configurare un endpoint nel VPC di consumo per connetterti in sicurezza all'istanza AlloyDB.

Recupera il collegamento al servizio

Dopo aver creato un'istanza AlloyDB con Private Service Connect abilitato, recupera l'URL del collegamento di servizio e utilizzalo per creare l'endpoint Private Service Connect.

Utilizza il comando gcloud alloydb instances describe per visualizzare i dettagli di un'istanza.

gcloud alloydb instances describe INSTANCE_ID \
 --cluster=CLUSTER_ID --region=REGION_ID

Sostituisci quanto segue:

  • INSTANCE_ID: l'ID dell'istanza.
  • CLUSTER_ID: l'ID del cluster.
  • REGION_ID: la regione in cui è dipiegato il cluster AlloyDB.

Un esempio di risposta al comando è il seguente:

  "pscInstanceConfig": {
    "serviceAttachmentLink:": "https://www.googleapis.com/compute/v1/projects/my-project/regions/my-region/serviceAttachments/my-service-attachment-id"
        "allowedConsumerProjects": {
          "45678",
          "12345",
              "67890",
            },
            "pscDnsName": "11111111-1111-1111-1111-111111111111.22222222-2222-2222-2222-222222222222.alloydb-psc.goog."
          }

Il parametro serviceAttachmentLink contiene il valore dell'URL dell'allegato del servizio.

Creare un endpoint Private Service Connect

Per creare un endpoint Private Service Connect, passa l'URL dell'attacco del servizio insieme a un nome di endpoint univoco. Per ulteriori informazioni sulla creazione di un endpoint Private Service Connect, consulta Creare un endpoint.

Puoi anche prenotare un indirizzo IP interno per l'endpoint Private Service Connect utilizzando il comando gcloud compute addresses create e poi utilizzare l'indirizzo IP prenotato durante la creazione dell'endpoint.

Configura la connettività in uscita

Per attivare la connettività in uscita, imposta l'URI di allegato di rete quando crei o aggiorni un'istanza AlloyDB. Questo URI consente la connettività sicura tra il tuo progetto e l'istanza AlloyDB durante le operazioni in uscita, come le migrazioni.

Crea il collegamento di rete

Puoi creare un collegamento di rete che può accettare connessioni automaticamente(ACCEPT_AUTOMATIC) o manualmente (ACCEPT_MANUAL). Per saperne di più sulla creazione di un collegamento di rete, consulta Creare e gestire i collegamenti di rete.

Se scegli di creare un collegamento alla rete che accetta automaticamente le connessioni, non devi impostare esplicitamente un elenco di progetti accettati. Per accettare le connessioni manualmente, devi aggiungere il numero di progetto di proprietà del servizio del progetto in cui si trova l'istanza AlloyDB all'elenco dei progetti accettati.

Per trovare il numero di progetto di proprietà del servizio, esegui il seguente comando:

gcloud alpha alloydb clusters describe CLUSTER_ID --region=REGION_ID

Di seguito è riportato un esempio di risposta:

pscConfig:
pscEnabled: true
serviceOwnedProjectNumber: 123456789012

Dopo aver identificato il numero del progetto di proprietà del servizio, aggiungi il progetto all'elenco dei progetti accettati e poi crea il collegamento di rete.

Assicurati che la regione del collegamento di rete corrisponda a quella dell'istanza AlloyDB. Inoltre, la subnet utilizzata per creare il collegamento di rete deve appartenere agli intervalli IP RFC 1918, ovvero 10.0.0.0/8, 172.16.0.0/12 e 192.168.0.0/16.

Aggiornare un'istanza per la connettività in uscita

Per attivare la connettività in uscita per un'istanza AlloyDB esistente con Private Service Connect abilitato, passa il parametro --psc-network-attachment-uri al comando gcloud alloydb instances update.

Le istanze AlloyDB create prima del 1° marzo 2025 non possono essere aggiornate per abilitare le connessioni in uscita. Come approccio alternativo, ti consigliamo di utilizzare una delle seguenti opzioni:


Disattivare la connettività in uscita

Per disattivare la connettività in uscita per un'istanza AlloyDB esistente, passa il parametro --clear-psc-network-attachment-uri al comando gcloud alloydb instances update.

Connettiti a un'istanza AlloyDB

Puoi connetterti a un'istanza AlloyDB con Private Service Connect abilitato utilizzando una delle seguenti opzioni:

  • un indirizzo IP interno.
  • un record DNS
  • Proxy di autenticazione AlloyDB
  • Connettori dei linguaggi AlloyDB

La connessione tramite record DNS richiede la creazione di un record DNS in una zona DNS privata nella rete VPC corrispondente. Dopo aver creato un record DNS, puoi utilizzarlo per connetterti direttamente a un'istanza abilitata per Private Service Connect utilizzando un record DNS, il proxy di autenticazione AlloyDB o i connettori dei linguaggi AlloyDB.

Configura una zona gestita DNS e un record DNS

Per configurare una zona gestita e un record DNS nella tua rete:

  1. Per visualizzare informazioni di riepilogo su un'istanza AlloyDB, incluso il nome DNS dell'istanza, utilizza il comando gcloud alloydb instances describe:

    gcloud alloydb instances describe INSTANCE_ID \
    --cluster=CLUSTER_ID --region=REGION_ID

    Sostituisci quanto segue:

    • INSTANCE_ID: l'ID dell'istanza.
    • CLUSTER_ID: l'ID del cluster.

    Nella risposta, verifica che venga visualizzato il nome DNS. Il nome DNS ha il pattern INSTANCE_UID.PROJECT_UID.REGION_NAME.alloydb-psc.goog..

  2. Per creare una zona DNS privata, utilizza il comando gcloud dns managed-zones create. Questa zona è associata alla rete VPC utilizzata per connettersi all'istanza AlloyDB tramite l'endpoint Private Service Connect.

    gcloud dns managed-zones create ZONE_NAME \
    --project=PROJECT_ID \
    --description=DESCRIPTION \
    --dns-name=DNS_NAME \
    --networks=NETWORK_NAME \
    --visibility=private

    Sostituisci quanto segue:

    • ZONE_NAME: il nome della zona DNS.
    • PROJECT_ID: l'ID o il numero del progetto che contiene la zona. Google Cloud
    • DESCRIPTION: una descrizione della zona (ad esempio una zona DNS per l'istanza AlloyDB).
    • DNS_NAME: il nome DNS della zona, ad esempio INSTANCE_UID.PROJECT_UID.REGION_NAME.alloydb-psc.goog..
    • NETWORK_NAME: il nome della rete VPC.
  3. Dopo aver creato l'endpoint Private Service Connect, per creare un record DNS nella zona, utilizza il comando gcloud dns record-sets create:

    gcloud dns record-sets create DNS_NAME \
    --project=PROJECT_ID \
    --type=RRSET_TYPE \
    --rrdatas=RR_DATA \
    --zone=ZONE_NAME

    Sostituisci quanto segue:

    • DNS_NAME: il nome DNS recuperato in precedenza in questa procedura.
    • RRSET_TYPE: il tipo di record di risorse del set di record DNS (ad esempio A).
    • RR_DATA: l'indirizzo IP allocato per l'endpoint Private Service Connect (ad esempio 198.51.100.5). Puoi anche inserire più valori, ad esempio rrdata1 rrdata2 rrdata3 (ad esempio 10.1.2.3 10.2.3.4 10.3.4.5).

Eseguire la connessione direttamente utilizzando un record DNS

Dopo aver creato un endpoint Private Service Connect e un record DNS, puoi connetterti direttamente utilizzando il record DNS.

  1. Per recuperare il record DNS dell'endpoint Private Service Connect, utilizza il comando gcloud compute addresses describe:

    gcloud compute addresses describe DNS_RECORD \
    --project=PROJECT_ID \
    --region=REGION_NAME

    Sostituisci quanto segue:

    • DNS_RECORD: il record DNS per l'endpoint.
    • PROJECT_ID: l'ID o il numero del progetto che contiene l'endpoint. Google Cloud
    • REGION_NAME: il nome della regione per l'endpoint.
  2. Per connetterti all'istanza AlloyDB, utilizza il record DNS.

    psql -U USERNAME -h DNS_RECORD

    Sostituisci quanto segue:

    • USERNAME: il nome dell'utente che si connette all'istanza.
    • DNS_RECORD: il record DNS dell'endpoint.

Connettiti utilizzando il proxy di autenticazione AlloyDB

AlloyDB Auth Proxy è un connettore che ti consente di stabilire connessioni criptate e autorizzate ai database AlloyDB. Il proxy di autenticazione AlloyDB funziona con un client locale in esecuzione nell'ambiente locale. L'applicazione comunica con il proxy di autenticazione AlloyDB con il protocollo di database standard utilizzato dal database.

Quando imposti il flag --psc durante l'avvio del client Auth Proxy, il proxy di autenticazione AlloyDB utilizza il record DNS che hai creato per connettersi all'istanza abilitata per Private Service Connect.

Assicurati di avviare il client Auth Proxy passando l'URI dell'istanza recuperato utilizzando il comando gcloud alloydb instances list e imposta il flag --psc.

Per ulteriori informazioni su come connetterti a un'istanza utilizzando il proxy di autenticazione, consulta Eseguire la connessione utilizzando il proxy di autenticazione.

Eseguire la connessione utilizzando i connettori dei linguaggi AlloyDB

I connettori dei linguaggi AlloyDB sono librerie che forniscono mTLS automatico con TLS 1.3 e autorizzazione Identity and Access Management (IAM) quando si connettono a un'istanza AlloyDB.

Dopo che Language Connector ha stabilito che l'istanza supporta Private Service Connect, utilizza il record DNS che hai creato per connettersi all'istanza.

Java

Se utilizzi Private Service Connect per connetterti all'istanza AlloyDB, includere quanto segue:

config.addDataSourceProperty("alloydbIpType", "PSC");

Per ulteriori informazioni sull'utilizzo dell'endpoint Private Service Connect nei connettori di lingua Java, consulta il repository GitHub.

Python (pg8000)

Se utilizzi Private Service Connect per connetterti all'istanza AlloyDB, includere quanto segue:

  def getconn() -> pg8000.dbapi.Connection:
      conn: pg8000.dbapi.Connection = connector.connect(
          inst_uri,
          "pg8000",
          user=user,
          password=password,
          db=db,
          # use ip_type to specify PSC
          ip_type=IPTypes.PSC,
      )
      return conn

Per ulteriori informazioni sull'utilizzo dell'endpoint Private Service Connect nei connettori di lingua Python, consulta il repository GitHub.

Python (asyncpg)

Se utilizzi Private Service Connect per connetterti all'istanza AlloyDB, includere quanto segue:

  async def getconn() -> asyncpg.Connection:
    conn: asyncpg.Connection = await connector.connect(
        inst_uri,
        "asyncpg",
        user=user,
        password=password,
        db=db,
        # use ip_type to specify PSC
        ip_type=IPTypes.PSC,
    )
    return conn

Per ulteriori informazioni sull'utilizzo dell'endpoint Private Service Connect nei connettori di lingua Python, consulta il repository GitHub.

Go (pgx)

Se utilizzi Private Service Connect per connetterti all'istanza AlloyDB, includere quanto segue:

d.Dial(ctx, instURI, alloydbconn.WithPSC())

Per ulteriori informazioni sull'utilizzo dell'endpoint Private Service Connect nei connettori per il linguaggio Go, consulta il repository GitHub.

Go (database/SQL)

Se utilizzi Private Service Connect per connetterti all'istanza AlloyDB, includere quanto segue:

  cleanup, err := pgxv5.RegisterDriver(
    "alloydb",
    alloydbconn.WithDefaultDialOptions(alloydbconn.WithPSC())
)

Per ulteriori informazioni sull'utilizzo dell'endpoint Private Service Connect nei connettori per il linguaggio Go, consulta il repository GitHub.

Connettiti direttamente tramite un indirizzo IP interno

Dopo aver creato un endpoint Private Service Connect, puoi connetterti direttamente a un'istanza AlloyDB utilizzando l'indirizzo IP configurato.

  1. Per recuperare l'indirizzo IP dell'endpoint Private Service Connect, utilizza il comando gcloud compute addresses describe:

    gcloud compute addresses describe ADDRESS_NAME \
    --project=PROJECT_ID \
    --region=REGION_NAME

    Sostituisci quanto segue:

    • ADDRESS_NAME: il nome dell'indirizzo IP dell'endpoint.
    • PROJECT_ID: l'ID o il numero del progetto Google Cloud che contiene l'endpoint.
    • REGION_NAME: il nome della regione per l'endpoint.
  2. Per connetterti all'istanza AlloyDB, utilizza l'indirizzo IP interno.

    psql -U USERNAME -h IP_ADDRESS"

    Sostituisci quanto segue:

    • USERNAME: il nome dell'utente che si connette all'istanza.
    • IP_ADDRESS: l'indirizzo IP dell'endpoint.

Limitazioni

  • Puoi configurare fino a 20 endpoint Private Service Connect che si connettono al collegamento al servizio di un'istanza AlloyDB con Private Service Connect abilitato.
  • Non puoi utilizzare il flag --network quando crei un cluster abilitato per Private Service Connect perché è associato all'accesso ai servizi privati.
  • Non puoi attivare o disattivare Private Service Connect in un'istanza esistente.
  • Non puoi configurare un'istanza in cui è abilitato Private Service Connect per utilizzare l'accesso ai servizi privati.