Usar contas de serviço

Algumas fontes de dados são compatíveis com a autenticação de transferência de dados usando uma conta de serviço pelo console, a API ou a linha de comando bq do Google Cloud . Uma conta de serviço é uma Conta do Google associada ao seu projeto do Google Cloud . Ela pode executar jobs, como consultas programadas ou pipelines de processamento em lote, ao autenticar usando as credenciais da conta de serviço em vez das credenciais de um usuário.

É possível atualizar uma transferência de dados atual com as credenciais de uma conta de serviço. Para mais informações, consulte Atualizar as credenciais de transferência de dados.

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

  • A transferência não autorizou o acesso do usuário à fonte de dados:

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

  • Você recebe o erro INVALID_USER ao tentar 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 Introdução à autenticação.

Origens de dados compatíveis com a conta de serviço

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

Antes de começar

Permissões necessárias

Para atualizar uma transferência de dados para usar uma conta de serviço, é necessário ter as seguintes permissões:

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

    O papel predefinido do IAM roles/bigquery.admin inclui essa permissão.

  • Acesso à conta de serviço. Para mais informações sobre como conceder o papel da conta de serviço aos usuários, consulte Papel do usuário da conta de serviço.

Verifique se a conta de serviço que você escolheu para executar a transferência tem as seguintes permissões:

  • Permissões bigquery.datasets.get e bigquery.datasets.update no conjunto de dados de destino Se a tabela usar o controle de acesso no nível da coluna, a conta de serviço também precisará ter a permissão bigquery.tables.setCategory.

    O papel predefinido do Cloud IAM bigquery.admin inclui todas essas permissões. Para mais informações sobre os papéis do IAM no serviço de transferência de dados do BigQuery, consulte Introdução ao IAM.

  • Acesso à origem de dados da transferência configurada. Para mais informações sobre as permissões necessárias para diferentes fontes de dados, consulte Fontes de dados compatíveis com a conta de serviço.

  • Para transferências do Google Ads, a conta de serviço precisa receber autoridade em todo o domínio. Para mais informações, consulte o Guia da conta de serviço da API Google Ads.

Atualizar as credenciais de transferência de dados

Console

O procedimento a seguir atualiza uma configuração de transferência de dados para autenticar como uma conta de serviço em vez de sua conta de usuário individual.

  1. No console do Google Cloud , acesse a página "Transferências de dados".

    Acesse Transferências de dados

  2. Clique na transferência na lista correspondente.

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

    Clique em "Editar" para modificar uma transferência de dados

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

  5. Clique em Salvar.

bq

Para atualizar as credenciais de uma transferência de dados, use a ferramenta de linha de comando bq para atualizar a configuração de transferência.

Use o comando bq update--transfer_config--update_credentials com as sinalizações --service_account_name e .

Por exemplo, o comando a seguir atualiza uma configuração de transferência de dados para autenticar como uma conta de serviço em vez de sua conta de usuário individual:

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

Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Java.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

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 testar esta amostra, siga as instruções de configuração do Python no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Python.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

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