Connettiti a Cloud SQL

In qualità di amministratore BigQuery, puoi creare connection per accedere o i dati di Cloud SQL. Questa connessione consente agli analisti di dati di eseguire query in Cloud SQL. Per connetterti a Cloud SQL, devi seguire questi passaggi:

  1. Crea una connessione Cloud SQL
  2. Concedi l'accesso all'agente di servizio di connessione BigQuery.

Prima di iniziare

  1. Seleziona il progetto che contiene il database Cloud SQL.

    Vai al selettore progetti

  2. Abilita l'API BigQuery Connection.

    Abilitare l'API

  3. Assicurati che l'istanza Cloud SQL abbia un connessione IP pubblica o connessione privata:
    • Per proteggere le tue istanze Cloud SQL, puoi aggiungere una connettività con IP pubblico senza un indirizzo autorizzato. Ciò rende l'istanza inaccessibile ma accessibile alle query da BigQuery.

    • Per consentire a BigQuery di accedere ai dati Cloud SQL tramite una connessione privata, configura la connettività con IP privato per un'istanza Cloud SQL nuova o esistente, quindi seleziona la casella di controllo Percorso privato per i servizi Google Cloud. Questo servizio utilizza un percorso diretto interno anziché l'indirizzo IP privato all'interno del Virtual Private Cloud.

  4. Per ottenere le autorizzazioni necessarie per creare una connessione Cloud SQL, chiedi all'amministratore di concederti Ruolo IAM Amministratore connessione BigQuery (roles/bigquery.connectionAdmin) nel progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

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

crea connessioni Cloud SQL

Come best practice, utilizza le connessioni per gestire le credenziali del database quando e la connessione a Cloud SQL. Le connessioni vengono criptate e archiviate in modo sicuro nel Servizio di connessione BigQuery. Se le credenziali utente sono valide per altri dati nell'origine, puoi riutilizzare la connessione. Ad esempio, potrebbe essere in grado di utilizzare una connessione per eseguire query su più database che si trovano nella stessa istanza Cloud SQL.

Seleziona una delle seguenti opzioni per creare una connessione Cloud SQL:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

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

  3. Nella finestra di dialogo Aggiungi dati, fai clic su Connessioni a origini dati esterne:

  4. Nella finestra di dialogo Origine dati esterna, inserisci le seguenti informazioni:

    • In Tipo di connessione, seleziona il tipo di origine, ad esempio MySQL o Postgres.
    • In ID connessione, inserisci un identificatore per la connessione. risorsa. Sono consentiti lettere, numeri e trattini bassi. Ad esempio: bq_sql_connection.
    • Per Località dei dati, seleziona un'istanza BigQuery località (o regione) compatibile con la regione esterna dell'origine dati.
    • (Facoltativo) In Nome semplice, inserisci un nome semplice per la connessione, ad esempio My connection resource. Il nome descrittivo può essere qualsiasi valore che ti aiuti a identificare la connessione risorsa se dovessi avere bisogno di modificarla in un secondo momento.
    • (Facoltativo) Per Descrizione, inserisci una descrizione. risorsa di connessione.
    • (Facoltativo) Crittografia Se vuoi utilizzare una chiave di crittografia gestita dal cliente (CMEK) per criptare le tue credenziali, seleziona Chiave di crittografia gestita dal cliente (CMEK) e poi una chiave gestita dal cliente. In caso contrario, le tue credenziali sono protette dalla chiave predefinita di proprietà di Google e gestita da Google.
    • Se hai scelto Cloud SQL MySQL o Postgres come tipo di connessione, In Nome connessione Cloud SQL, inserisci il nome dell'istanza Cloud SQL, solitamente nel formato project-id:location-id:instance-id. Puoi trovare l'ID istanza nella pagina dei dettagli del Istanza Cloud SQL su cui vuoi eseguire la query.
    • In Nome database, inserisci il nome del database.
    • In Nome utente database, inserisci il nome utente per il database.
    • Per Password del database, inserisci la password per il database.

      • (Facoltativo) Per visualizzare la password, fai clic su Mostra password.
  5. Fai clic su Crea connessione.

  6. Fai clic su Vai alla connessione.

  7. Nel riquadro Informazioni sulla connessione, copia l'ID account di servizio per utilizzarlo in una successivo.

bq

Inserisci il comando bq mk e fornisci il flag di connessione: --connection. Sono necessari anche i seguenti flag:

  • --connection_type
  • --properties
  • --connection_credential
  • --project_id
  • --location

I seguenti flag sono facoltativi:

  • --display_name Il nome descrittivo della connessione.
  • --description Una descrizione della connessione.

connection_id è un parametro facoltativo che può essere aggiunto come ultimo argomento del comando per l'archiviazione interna. Se non viene fornito un ID connessione, viene generato automaticamente un ID univoco. L'elemento connection_id può contenere lettere, numeri e trattini bassi.

    bq mk --connection --display_name='friendly name' --connection_type=TYPE \
      --properties=PROPERTIES --connection_credential=CREDENTIALS \
      --project_id=PROJECT_ID --location=LOCATION \
      CONNECTION_ID

Sostituisci quanto segue:

  • TYPE: il tipo di origine dati esterna.
  • PROPERTIES: i parametri per l'elemento pubblicitario creato in formato JSON. Ad esempio: --properties='{"param":"param_value"}'. Per creando una risorsa di connessione, devi fornire instanceID, database e type.
  • CREDENTIALS: i parametri username e password.
  • PROJECT_ID: il tuo ID progetto.
  • LOCATION: la regione in cui si trova l'istanza Cloud SQL in cui si trova.
  • CONNECTION_ID: l'identificatore della connessione.

Ad esempio, il comando seguente crea una nuova risorsa di connessione denominato my_new_connection (nome semplice: "My new connection") in un progetto con ID federation-test.

bq mk --connection --display_name='friendly name' --connection_type='CLOUD_SQL' \
  --properties='{"instanceId":"federation-test:us-central1:mytestsql","database":"mydatabase","type":"MYSQL"}' \
  --connection_credential='{"username":"myusername", "password":"mypassword"}' \
  --project_id=federation-test --location=us my_connection_id

API

All'interno dell'API BigQuery Connection, puoi richiamare CreateConnection all'interno ConnectionService per creare un'istanza di una connessione. Per ulteriori dettagli, consulta la pagina della libreria client.

Java

Prima di provare questo esempio, segui le istruzioni per la configurazione di Java nel Guida rapida di BigQuery con librerie client. Per ulteriori informazioni, consulta API Java BigQuery documentazione di riferimento.

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

import com.google.cloud.bigquery.connection.v1.CloudSqlCredential;
import com.google.cloud.bigquery.connection.v1.CloudSqlProperties;
import com.google.cloud.bigquery.connection.v1.Connection;
import com.google.cloud.bigquery.connection.v1.CreateConnectionRequest;
import com.google.cloud.bigquery.connection.v1.LocationName;
import com.google.cloud.bigqueryconnection.v1.ConnectionServiceClient;
import java.io.IOException;

// Sample to create a connection with cloud MySql database
public class CreateConnection {

  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";
    String database = "MY_DATABASE";
    String instance = "MY_INSTANCE";
    String instanceLocation = "MY_INSTANCE_LOCATION";
    String username = "MY_USERNAME";
    String password = "MY_PASSWORD";
    String instanceId = String.format("%s:%s:%s", projectId, instanceLocation, instance);
    CloudSqlCredential cloudSqlCredential =
        CloudSqlCredential.newBuilder().setUsername(username).setPassword(password).build();
    CloudSqlProperties cloudSqlProperties =
        CloudSqlProperties.newBuilder()
            .setType(CloudSqlProperties.DatabaseType.MYSQL)
            .setDatabase(database)
            .setInstanceId(instanceId)
            .setCredential(cloudSqlCredential)
            .build();
    Connection connection = Connection.newBuilder().setCloudSql(cloudSqlProperties).build();
    createConnection(projectId, location, connectionId, connection);
  }

  static void createConnection(
      String projectId, String location, String connectionId, Connection connection)
      throws IOException {
    try (ConnectionServiceClient client = ConnectionServiceClient.create()) {
      LocationName parent = LocationName.of(projectId, location);
      CreateConnectionRequest request =
          CreateConnectionRequest.newBuilder()
              .setParent(parent.toString())
              .setConnection(connection)
              .setConnectionId(connectionId)
              .build();
      Connection response = client.createConnection(request);
      System.out.println("Connection created successfully :" + response.getName());
    }
  }
}

Concedi l'accesso all'account di servizio

Un account di servizio viene creato automaticamente quando e creare la prima connessione a Cloud SQL all'interno del progetto. Il nome dell'account di servizio è BigQuery Connection Service. Agente. Per ottenere l'ID dell'account di servizio, visualizza i dettagli della connessione. L'ID dell'account di servizio è seguente formato:

service-PROJECT_NUMBER@gcp-sa-bigqueryconnection.iam.gserviceaccount.com.

Per connetterti a Cloud SQL, devi concedere alla nuova connessione la modalità di sola lettura a Cloud SQL per consentire a BigQuery di accedere ai file per conto degli utenti. L'account di servizio deve disporre delle seguenti autorizzazioni:

  • cloudsql.instances.connect
  • cloudsql.instances.get

Puoi concedere all'account di servizio associato alla connessione Ruolo IAM client Cloud SQL (roles/cloudsql.client), a cui sono state assegnate queste autorizzazioni. Puoi omettere questo passaggio se l'account di servizio dispone già del necessario autorizzazioni aggiuntive.

Console

  1. Vai alla sezione IAM e Console di amministrazione.

    Vai a IAM e Amministratore

  2. Fai clic su Concedi l'accesso.

    Si apre la finestra di dialogo Aggiungi entità.

  3. Nel campo Nuove entità, inserisci il nome dell'account di servizio Agente di servizio connessione BigQuery o l'ID account di servizio preso da le informazioni di connessione.

  4. Nel campo Seleziona un ruolo, seleziona Cloud SQL e poi Client Cloud SQL.

  5. Fai clic su Salva.

gcloud

Utilizza la gcloud projects add-iam-policy-binding :

gcloud projects add-iam-policy-binding PROJECT_ID --member=serviceAccount:SERVICE_ACCOUNT_ID --role=roles/cloudsql.client

Fornisci i seguenti valori:

  • PROJECT_ID: l'ID del tuo progetto Google Cloud.
  • SERVICE_ACCOUNT_ID: l'ID dell'account di servizio in uso dalle informazioni di connessione.

Condividere le connessioni con gli utenti

Puoi concedere i ruoli seguenti 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 con origini dati esterne ed eseguire query su di esse.

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

Per ulteriori informazioni su ruoli e autorizzazioni IAM in BigQuery, vedi Autorizzazioni e ruoli 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 esterne.

  2. Nel riquadro Explorer, fai clic sul nome del tuo progetto. > Connessioni esterne > connessione.

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

    1. Nella finestra di dialogo Autorizzazioni di connessione, condividi il connessione con altre entità aggiungendo o modificando tra cui scegliere.

    2. Fai clic su Salva.

bq

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

API

Utilizza la Metodo projects.locations.connections.setIAM nella sezione di riferimento dell'API REST di BigQuery Connections, fornisce un'istanza della risorsa policy.

Java

Prima di provare questo esempio, segui le istruzioni per la configurazione di Java nel Guida rapida di BigQuery con librerie client. Per ulteriori informazioni, consulta API Java BigQuery documentazione di riferimento.

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, 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");
    }
  }
}

Passaggi successivi