Connettiti a PostgreSQL

In qualità di amministratore di BigQuery, puoi creare una connessione per accedere ai dati PostgreSQL. Questa connessione consente agli analisti di dati di eseguire query sui dati in PostgreSQL.

Ambienti e versioni PostgreSQL supportati

La federazione di BigQuery supporta i seguenti ambienti di deployment PostgreSQL:

  • Istanze PostgreSQL on-premise connesse a Google Cloud tramite Cloud VPN o Cloud Interconnect
  • Istanze PostgreSQL autogestite su Compute Engine
  • Istanze PostgreSQL ospitate nel cloud accessibili tramite indirizzi IP pubblici o collegamenti di rete

La federazione di BigQuery supporta le seguenti versioni di PostgreSQL:

  • PostgreSQL 16 (consigliato)
  • PostgreSQL 15

Prima di iniziare

Abilita le API necessarie, configura il database PostgreSQL e concedi i ruoli di Identity and Access Management che forniscono agli utenti le autorizzazioni necessarie per eseguire ogni attività in questo documento.

  1. Abilita l'API BigQuery Connection.

    Abilitare l'API

  2. Se prevedi di instradare il traffico attraverso reti private utilizzando i collegamenti di rete, abilita anche l'API Compute Engine.

    Abilita l'API Compute Engine

  3. Nel tuo database PostgreSQL, crea un utente del database dedicato con privilegi SELECT sulle tabelle o sullo schema su cui intendi eseguire query:

    CREATE USER USER_NAME WITH PASSWORD 'PASSWORD';
    GRANT USAGE ON SCHEMA SCHEMA_NAME TO USER_NAME;
    GRANT SELECT ON ALL TABLES IN SCHEMA SCHEMA_NAME TO USER_NAME;

    Sostituisci quanto segue:

    • USER_NAME: il nome utente dell'utente del database.
    • PASSWORD: la password dell'utente del database.
    • SCHEMA_NAME: lo schema delle tabelle su cui vuoi eseguire query.
  4. Configura la connessione di rete all'istanza del database PostgreSQL eseguendo una delle seguenti operazioni:

    • Se il traffico viene instradato tramite reti private, crea un collegamento di rete nella stessa regione della connessione BigQuery. Il peering DNS non è supportato. Connettiti utilizzando un indirizzo IP o un nome host risolvibile all'interno della tua rete VPC.
    • Se ti connetti tramite internet pubblico, aggiungi tutti gli intervalli di indirizzi IP di Google alle regole firewall del tuo database PostgreSQL.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per connetterti a PostgreSQL, chiedi all'amministratore di concederti i seguenti ruoli IAM:

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Connetti BigQuery a PostgreSQL

Puoi connettere BigQuery a PostgreSQL nella consoleGoogle Cloud o nello strumento a riga di comando bq.

Console

  1. Nella console Google Cloud , vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro Explorer, fai clic su Aggiungi dati.

    Viene visualizzata la pagina Aggiungi dati.

  3. Nel riquadro Filtra per, nella sezione Tipo di origine dati, seleziona Database.

    In alternativa, nel campo Cerca origini dati, inserisci postgresql.

  4. Nella sezione Origini dati in primo piano, fai clic su PostgreSQL.

  5. Nella sezione Accedi ai dati esterni in loco, fai clic sulla scheda della soluzione Federazione di BigQuery con la descrizione Query federate su PostgreSQL (non sulle schede Cloud SQL o AlloyDB per PostgreSQL).

    Viene visualizzato il riquadro Origine dati esterna.

  6. Nel riquadro Origine dati esterna, configura quanto segue:

    • Nel campo ID connessione, inserisci un ID connessione univoco (ad esempio postgres_prod_conn).
    • Nella sezione Tipo di località, seleziona Regione, quindi seleziona la regione in cui si trova il set di dati BigQuery. Le query che utilizzano questa connessione devono essere eseguite da questa regione.
    • (Facoltativo) Nel campo Nome descrittivo, inserisci un nome descrittivo per la connessione.
    • (Facoltativo) Nel campo Descrizione, inserisci una descrizione per questa risorsa di connessione.
    • Nella sezione Crittografia, seleziona Google-managed encryption key o Chiave Cloud KMS per utilizzare una chiave di crittografia gestita dal cliente (CMEK).
    • Nel campo Host:porta, inserisci l'host e la porta del server di database PostgreSQL nel formato HOST:PORT (ad esempio 10.10.2.2:5432).
    • Nel campo Nome utente, inserisci l'utente del database che hai creato nei prerequisiti.
    • Nel campo Password, inserisci la password dell'utente del database.
    • Nel campo Database, inserisci il nome del database PostgreSQL.
    • (Facoltativo) Nel campo Collegamento di rete, se utilizzi la connettività privata, inserisci il percorso della risorsa del collegamento di rete nel formato projects/PROJECT_ID/regions/NA_REGION/networkAttachments/ATTACHMENT_NAME.
    • Nell'elenco Modalità TLS, seleziona una delle modalità TLS supportate (ad esempio, Crittografa i dati, verifica la CA e il nome host (opzione consigliata)).
    • Nell'elenco Autorità di certificazione (CA), seleziona CA pubblica (Web PKI) o seleziona una CA personalizzata e incolla il certificato in formato PEM.
  7. Fai clic su Crea connessione.

bq

Utilizza il comando bq mk con il flag --connection:

bq mk --connection \
  --location=LOCATION \
  --project_id=PROJECT_ID \
  --connector_configuration '{
    "connector_id": "postgresql",
    "endpoint": {
      "host_port": "HOST_PORT"
    },
    "asset": {
      "database": "DATABASE"
    },
    "authentication": {
      "username_password": {
        "username": "USERNAME",
        "password": {
          "plaintext": "PASSWORD"
        }
      }
    },
    "tls": {
      "mode": "TLS_MODE"
    },
    "network": {
      "private_service_connect": {
        "network_attachment": "projects/PROJECT_ID/regions/NA_REGION/networkAttachments/ATTACHMENT_NAME"
      }
    }
  }' \
  CONNECTION_ID

Sostituisci quanto segue:

  • LOCATION: la regione BigQuery (ad esempio us-central1) corrispondente al set di dati su cui vuoi eseguire query insieme a PostgreSQL. Le query che utilizzano questa connessione devono essere eseguite da questa regione.
  • PROJECT_ID: il tuo ID progetto Google Cloud .
  • HOST_PORT: l'host e la porta del server del database PostgreSQL nel formato HOST:PORT (ad esempio, 10.10.2.2:5432).
  • DATABASE: il nome del database PostgreSQL.
  • USERNAME: l'utente del database PostgreSQL.
  • PASSWORD: la password dell'utente del database.
  • TLS_MODE: la modalità di crittografia TLS (ENCRYPT_VERIFY_CA_AND_HOST, ENCRYPT_VERIFY_CA, ENCRYPT_VERIFY_NONE o DISABLE). Se utilizzi un certificato CA personalizzato con ENCRYPT_VERIFY_CA_AND_HOST o ENCRYPT_VERIFY_CA, includi l'oggetto "private_pki": { "trusted_certificates_pem": "CERT_CONTENT" } in "tls".
  • NA_REGION: la regione in cui si trova il collegamento di rete.
  • ATTACHMENT_NAME: il nome del tuo collegamento di rete. Se la connessione avviene tramite IP pubblico, ometti l'oggetto "network".
  • CONNECTION_ID: l'identificatore univoco di questa connessione.
  • (Facoltativo) --kms_key_name=KMS_KEY_NAME: una chiave di crittografia gestita dal cliente (CMEK). Se omesso, le credenziali sono protette dal valore predefinito Google-owned and Google-managed encryption key.

Configurazione TLS (Transport Layer Security)

Il connettore PostgreSQL supporta Transport Layer Security (TLS) per criptare il traffico delle query in transito tra BigQuery e il tuo database PostgreSQL.

Quando connetti BigQuery a PostgreSQL, seleziona una delle seguenti modalità TLS:

  • Crittografa i dati e verifica l'autorità di certificazione (CA) e il nome host (modalità ENCRYPT_VERIFY_CA_AND_HOST). Esegue la convalida completa del server utilizzando TLS. Crittografa tutti i dati in transito, verifica che il certificato del server di database sia firmato da una CA attendibile e controlla che il nome host a cui ti connetti corrisponda al nome comune (CN) o al nome alternativo del soggetto (SAN) nel certificato. Obbligatorio per le connessioni su IP pubblici.

  • Crittografa i dati e verifica solo la CA (modalità ENCRYPT_VERIFY_CA). Crittografa tutti i dati in transito e verifica che il certificato del server sia firmato da una CA attendibile, ma non verifica il nome host del server. Utilizza questa modalità se il certificato del server è firmato da una CA attendibile, ma ti connetti utilizzando un indirizzo IP o un nome host che non corrisponde al CN o al SAN del certificato.

  • Solo crittografia (modalità ENCRYPT_VERIFY_NONE). Crittografa tutti i dati trasferiti tra BigQuery e il server. Non esegue la verifica del certificato o del nome host. Consigliato solo all'interno di VPC privati.

  • Nessuna crittografia o verifica (modalità DISABLE). Non cripta i dati e non esegue la verifica del certificato o del nome host. Consentito solo quando la connessione avviene tramite collegamenti di rete privati all'interno di reti VPC protette.

Certificati server attendibili in formato PEM

Se utilizzi la modalità ENCRYPT_VERIFY_CA_AND_HOST o la modalità ENCRYPT_VERIFY_CA, segui questi passaggi:

  • Se il certificato del server di database è firmato da una CA pubblica (come quelle incluse nel programma Mozilla Root CA, tra cui Let's Encrypt, DigiCert o Google Trust Services), non è necessario fornire un certificato. I certificati radice per le CA pubbliche sono considerati attendibili per impostazione predefinita.
  • Se utilizzi un certificato firmato da una CA interna o privata all'interno della tua organizzazione o un certificato autofirmato, devi fornire la catena di certificati completa in formato PEM (Privacy-Enhanced Mail) nel campo Certificato PEM attendibile durante la configurazione della connessione.

Condividi le connessioni con gli utenti

Puoi concedere i seguenti ruoli per consentire agli utenti di eseguire query sui dati e gestire le connessioni:

  • roles/bigquery.connectionUser: consente agli utenti di utilizzare le connessioni per connettersi a origini dati esterne ed eseguire query su di esse.

  • roles/bigquery.connectionAdmin: consente agli utenti di gestire le connessioni.

Per saperne di più sui ruoli e sulle autorizzazioni IAM in BigQuery, consulta Ruoli e autorizzazioni predefiniti.

Seleziona una delle seguenti opzioni:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

    Le connessioni sono elencate nel progetto, in un gruppo denominato Connessioni.

  2. Nel riquadro a sinistra, fai clic su Spazio di esplorazione:

    Pulsante evidenziato per il riquadro Spazio di esplorazione.

    Se non vedi il riquadro a sinistra, fai clic su Espandi riquadro sinistro per aprirlo.

  3. Fai clic sul progetto, su Connessioni e poi seleziona una connessione.

  4. Nel riquadro Dettagli, fai clic su Condividi per condividere una connessione. Quindi:

    1. Nella finestra di dialogo Autorizzazioni di connessione, condividi la connessione con altre entità aggiungendole o modificandole.

    2. Fai clic su Salva.

bq

Non puoi condividere una connessione con lo strumento a riga di comando bq. Per condividere una connessione, utilizza la console Google Cloud o il metodo dell'API BigQuery Connections.

API

Utilizza il metodo projects.locations.connections.setIAM nella sezione di riferimento dell'API REST BigQuery Connections e fornisci un'istanza della risorsa policy.

Java

Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.

Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

import com.google.api.resourcenames.ResourceName;
import com.google.cloud.bigquery.connection.v1.ConnectionName;
import com.google.cloud.bigqueryconnection.v1.ConnectionServiceClient;
import com.google.iam.v1.Binding;
import com.google.iam.v1.Policy;
import com.google.iam.v1.SetIamPolicyRequest;
import java.io.IOException;

// Sample to share connections
public class ShareConnection {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String location = "MY_LOCATION";
    String connectionId = "MY_CONNECTION_ID";
    shareConnection(projectId, location, connectionId);
  }

  static void shareConnection(String projectId, String location, String connectionId)
      throws IOException {
    try (ConnectionServiceClient client = ConnectionServiceClient.create()) {
      ResourceName resource = ConnectionName.of(projectId, location, connectionId);
      Binding binding =
          Binding.newBuilder()
              .addMembers("group:example-analyst-group@google.com")
              .setRole("roles/bigquery.connectionUser")
              .build();
      Policy policy = Policy.newBuilder().addBindings(binding).build();
      SetIamPolicyRequest request =
          SetIamPolicyRequest.newBuilder()
              .setResource(resource.toString())
              .setPolicy(policy)
              .build();
      client.setIamPolicy(request);
      System.out.println("Connection shared successfully");
    }
  }
}

Prezzi

Le query e le connessioni federate sono soggette ai seguenti addebiti:

Passaggi successivi