Usar contas de serviço

Algumas fontes de dados são compatíveis com a autenticação por transferência de dados com uma conta de serviço usando o console do Google Cloud, a API ou a linha de comando bq. Conta de serviço é uma Conta do Google associada ao 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.

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 Save.

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