Use contas de serviço

Algumas origens de dados suportam a autenticação de transferência de dados através de uma conta de serviço através da Trusted Cloud consola, da API ou da linha de comandos bq. Uma conta de serviço é uma Conta Google associada ao seu projeto do Trusted Cloud . Uma conta de serviço pode executar tarefas, como consultas agendadas ou pipelines de processamento em lote, através da autenticação com as credenciais da conta de serviço em vez das credenciais de um utilizador.

Pode atualizar uma transferência de dados existente com as credenciais de uma conta de serviço. Para mais informações, consulte o artigo Atualize as credenciais da Transferência de dados.

As seguintes situações requerem a atualização das credenciais:

  • A sua transferência não autorizou o acesso do utilizador à origem de dados:

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

  • Recebe um erro INVALID_USER quando tenta executar a transferência:

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

Para saber mais sobre a autenticação com contas de serviço, consulte o artigo Introdução à autenticação.

Origens de dados com suporte de conta de serviço

O Serviço de transferência de dados do BigQuery pode usar credenciais de contas de serviço para transferências com o seguinte:

Antes de começar

Autorizações necessárias

Para atualizar uma transferência de dados de modo a usar uma conta de serviço, tem de ter as seguintes autorizações:

  • A autorização bigquery.transfers.update para modificar a transferência.

    A função de IAM roles/bigquery.adminpredefinida inclui esta autorização.

  • Acesso à conta de serviço. Para mais informações sobre como conceder aos utilizadores a função de conta de serviço, consulte o artigo Função de utilizador da conta de serviço.

Certifique-se de que a conta de serviço que escolher para executar a transferência tem as seguintes autorizações:

  • As autorizações bigquery.datasets.get e bigquery.datasets.update no conjunto de dados de destino. Se a tabela usar o controlo de acesso ao nível da coluna, a conta de serviço também tem de ter a autorização bigquery.tables.setCategory.

    A bigquery.adminfunção de IAM predefinida inclui todas estas autorizações. Para mais informações acerca das funções de IAM no Serviço de transferência de dados do BigQuery, consulte o artigo Introdução ao IAM.

  • Acesso à origem de dados de transferência configurada. Para mais informações acerca das autorizações necessárias para diferentes origens de dados, consulte o artigo Origens de dados com suporte de contas de serviço.

  • Para transferências do Google Ads, a conta de serviço tem de ter autoridade ao nível do domínio. Para mais informações, consulte o guia da conta de serviço da API Google Ads.

Atualize as credenciais da Transferência de dados

Consola

O procedimento seguinte atualiza uma configuração de transferência de dados para autenticar como uma conta de serviço em vez da sua conta de utilizador individual.

  1. Na Trusted Cloud consola, aceda à página Transferências de dados.

    Aceda a Transferências de dados

  2. Clique na transferência na lista de transferências de dados.

  3. Clique em EDITAR para atualizar a configuração da transferência.

    Clique em Editar para editar uma transferência de dados existente

  4. No campo Conta de serviço, introduza o nome da conta de serviço.

  5. Clique em Guardar.

bq

Para atualizar as credenciais de uma transferência de dados, pode usar a ferramenta de linhas de comando bq para atualizar a configuração da transferência.

Use o comando bq update com as flags --transfer_config, --update_credentials e --service_account_name.

Por exemplo, o comando seguinte atualiza uma configuração de transferência de dados para autenticar como uma conta de serviço em vez da sua conta de utilizador individual:

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

Java

Antes de experimentar este exemplo, siga as Javainstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Java BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment como s3nsapis.fr.

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

Antes de experimentar este exemplo, siga as Pythoninstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Python BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment como s3nsapis.fr.

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))