Utilizzare gli account di servizio

Alcune origini dati supportano l'autenticazione del trasferimento di dati tramite un account di servizio mediante la console Google Cloud, l'API o la riga di comando bq. Un servizio è un Account Google associato al tuo progetto Google Cloud. Un servizio un account può eseguire job, come query pianificate o pipeline di elaborazione batch tramite l'autenticazione con le credenziali dell'account di servizio anziché con e credenziali.

Puoi aggiornare un trasferimento di dati esistente con le credenziali di un servizio . Per ulteriori informazioni, vedi Aggiornare le credenziali di Data Transfer.

Nei seguenti casi è necessario aggiornare le credenziali:

  • Il trasferimento non ha autorizzato l'accesso dell'utente all'origine dati:

    Error code 401 : Request is missing required authentication credential. UNAUTHENTICATED

  • Ricevi un errore INVALID_USER quando tenti di eseguire il trasferimento:

    Error code 5 : Authentication failure: User Id not found. Error code: INVALID_USERID

Per scoprire di più sull'autenticazione con gli account di servizio, consulta Introduzione all'autenticazione.

Origini dati con supporto per account di servizio

BigQuery Data Transfer Service può utilizzare le credenziali dell'account di servizio per i trasferimenti con seguenti:

Prima di iniziare

  • Verifica di aver completato tutte le azioni richieste in Attivazione di BigQuery Data Transfer Service.
  • Concedi ruoli IAM (Identity and Access Management) che concedono agli utenti le risorse necessarie autorizzazioni per eseguire ogni attività in questo documento.

Autorizzazioni obbligatorie

Per aggiornare un trasferimento di dati in modo che utilizzi un account di servizio, devi disporre di quanto segue autorizzazioni:

  • Autorizzazione bigquery.transfers.update per modificare il trasferimento.

    Il ruolo IAM predefinito di roles/bigquery.admin include questo autorizzazione.

  • Accesso all'account di servizio. Per ulteriori informazioni sulla concessione agli utenti del il ruolo dell'account di servizio, consulta Ruolo Utente account di servizio.

Assicurati che l'account di servizio che scegli per eseguire il trasferimento abbia le seguenti autorizzazioni:

  • Autorizzazioni bigquery.datasets.get e bigquery.datasets.update attivate il set di dati di destinazione. Se la tabella utilizza controllo dell'accesso a livello di colonna, l'account di servizio deve avere anche bigquery.tables.setCategory autorizzazione.

    Il ruolo IAM predefinito bigquery.admin che includa tutte queste autorizzazioni. Per ulteriori informazioni sui ruoli IAM in BigQuery Data Transfer Service, consulta Introduzione a IAM.

  • Accesso all'origine dati di trasferimento configurata. Per ulteriori informazioni sui autorizzazioni necessarie per origini dati diverse, consulta Origini dati con supporto per account di servizio.

  • Per i trasferimenti Google Ads, è necessario concedere l'account di servizio a livello di dominio. Per ulteriori informazioni, consulta la guida all'account di servizio dell'API Google Ads.

Aggiorna le credenziali di Data Transfer

Console

La seguente procedura aggiorna la configurazione di un trasferimento di dati in devono eseguire l'autenticazione come account di servizio anziché come account utente individuale.

  1. Nella console Google Cloud, vai alla pagina Trasferimenti di dati.

    Vai a Trasferimenti di dati

  2. Fai clic sul trasferimento nell'elenco dei trasferimenti di dati.

  3. Fai clic su MODIFICA per aggiornare la configurazione di trasferimento.

    Fai clic su Modifica per modificare un trasferimento di dati esistente

  4. Nel campo Account di servizio, inserisci il nome dell'account di servizio.

  5. Fai clic su Salva.

bq

Per aggiornare le credenziali di un Data Transfer, puoi utilizzare lo strumento a riga di comando bq aggiornare la configurazione di trasferimento.

Usa il comando bq update con --transfer_config, Flag --update_credentials e --service_account_name.

Ad esempio, il comando seguente aggiorna una configurazione di Data Transfer in esegui l'autenticazione come account di servizio anziché come account utente individuale:

bq update \
--transfer_config \
--update_credentials \
--service_account_name=abcdef-test-sa@abcdef-test.iam.gserviceaccount.com projects/862514376110/locations/us/transferConfigs/5dd12f26-0000-262f-bc38-089e0820fe38 \

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.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.cloud.bigquery.datatransfer.v1.UpdateTransferConfigRequest;
import com.google.protobuf.FieldMask;
import com.google.protobuf.util.FieldMaskUtil;
import java.io.IOException;

// Sample to update credentials in transfer config.
public class UpdateCredentials {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String configId = "MY_CONFIG_ID";
    String serviceAccount = "MY_SERVICE_ACCOUNT";
    TransferConfig transferConfig = TransferConfig.newBuilder().setName(configId).build();
    FieldMask updateMask = FieldMaskUtil.fromString("service_account_name");
    updateCredentials(transferConfig, serviceAccount, updateMask);
  }

  public static void updateCredentials(
      TransferConfig transferConfig, String serviceAccount, FieldMask updateMask)
      throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      UpdateTransferConfigRequest request =
          UpdateTransferConfigRequest.newBuilder()
              .setTransferConfig(transferConfig)
              .setUpdateMask(updateMask)
              .setServiceAccountName(serviceAccount)
              .build();
      dataTransferServiceClient.updateTransferConfig(request);
      System.out.println("Credentials updated successfully");
    } catch (ApiException ex) {
      System.out.print("Credentials was not updated." + ex.toString());
    }
  }
}

Python

Prima di provare questo esempio, segui le istruzioni per la configurazione di Python nel Guida rapida di BigQuery con librerie client. Per ulteriori informazioni, consulta API Python 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.

from google.cloud import bigquery_datatransfer
from google.protobuf import field_mask_pb2

transfer_client = bigquery_datatransfer.DataTransferServiceClient()

service_account_name = "abcdef-test-sa@abcdef-test.iam.gserviceaccount.com"
transfer_config_name = "projects/1234/locations/us/transferConfigs/abcd"

transfer_config = bigquery_datatransfer.TransferConfig(name=transfer_config_name)

transfer_config = transfer_client.update_transfer_config(
    {
        "transfer_config": transfer_config,
        "update_mask": field_mask_pb2.FieldMask(paths=["service_account_name"]),
        "service_account_name": service_account_name,
    }
)

print("Updated config: '{}'".format(transfer_config.name))