Como controlar o acesso a tabelas e visualizações

Neste documento, descrevemos como usar a ACL de tabela do BigQuery para controlar o acesso a tabelas e visualizações. Para uma visão geral da ACL da tabela do BigQuery, consulte Introdução aos controles de acesso de tabela.

Depois de criar uma tabela ou uma visualização, é possível definir a política dela das seguintes maneiras:

  • Como usar o Console do Cloud
  • Usando o comando bq set-iam-policy
  • Chamando o método tables.setIamPolicy

É possível usar a ACL da tabela do BigQuery para definir o acesso nas visualizações lógicas e nas visualizações autorizadas no nível do conjunto de dados. Uma visualização lógica também pode se referir a outras tabelas e visualizações de origem que você compartilhou usando a ACL da tabela do BigQuery.

Antes de começar

  1. Crie a tabela ou a visualização que você quer usar com a ACL da tabela do BigQuery.

  2. Conceda o papel "Proprietário do BigQuery" (roles/bigquery.dataOwner) ou o papel "Administrador do BigQuery" (roles/bigquery.admin) à pessoa que executará as etapas neste tópico.

  3. Para mais informações sobre as políticas de gerenciamento de identidade e acesso (IAM, na sigla em inglês), consulte Noções básicas sobre políticas e o tópico de referência Política.

Como criar uma política de acesso

Para criar uma política de acesso em uma tabela ou visualização:

Console

  1. Abra a página do BigQuery no Console do Cloud.

    Acessar o Console do Cloud

  2. No painel Explorer, selecione o projeto.

  3. Selecione o conjunto de dados que contém a tabela ou a visualização.

  4. Selecione a tabela ou a visualização.

  5. Se você estiver modificando o acesso a uma tabela, clique em Compartilhar tabela. Se você estiver modificando o acesso a uma visualização, clique em Compartilhar visualização.

  6. A página Permissões de tabela ou a Permissões de visualização será aberta. Em Adicionar membros, insira o endereço de e-mail do usuário que receberá acesso à tabela ou à visualização.

  7. Na lista suspensa Selecionar papel, escolha o papel que você quer conceder ao usuário. Veja a seguir como conceder a joe@example.com o papel "Visualizador de dados do BigQuery" (roles/bigquery.dataViewer).

    Permissões da tabela

  8. Clique em Done.

bq

  1. Recuperar a política existente de um arquivo local.

    bq get-iam-policy \
     project-id:dataset.table_or_view \
     > policy.json
    

    onde:

    • project-id é o ID do projeto.
    • dataset é o nome do conjunto de dados que contém o recurso (tabela ou visualização) que você está atualizando;
    • table_or_view é o nome do recurso que você está atualizando.

    Mais exemplos de como identificar uma tabela ou visualização e redirecionar a saída da política para um arquivo:

    • bq get-iam-policy dataset1.table1 > policy.json
    • bq get-iam-policy --project_id=project1 -t dataset1.table1 > policy.json
    • bq get-iam-policy project1:dataset1.table1 > policy.json
  2. Se você ainda não adicionou nenhum membro à política, o arquivo policy.json conterá um valor etag e nenhum outro campo. Para mais informações sobre como formatar o arquivo policy.json, consulte Noções básicas sobre políticas.

  3. Para adicionar o primeiro membro, adicione um campo bindings à política. Por exemplo, para conceder o papel "Visualizador de dados do BigQuery" (roles/bigquery.dataViewer) a joe@example.com:

    "bindings": [
     {
       "members": [
         "user:joe@example.com"
       ],
       "role": "roles/bigquery.dataViewer"
     }
    ]
    

    Se você precisar adicionar mais membros a uma vinculação existente, basta adicionar o membro. Neste exemplo, você verá como conceder a jane@example.com o papel "Visualizador de dados do BigQuery" (roles/bigquery.dataViewer) para uma vinculação que já existe.

    "members": [
           "user:joe@example.com",
           "user:jane@example.com"
         ],
         "role": "roles/bigquery.dataViewer"
       }
    
  4. Atualize a política.

    bq set-iam-policy \
     project-id:dataset.table_or_view \
     policy.json
    

    Para informações sobre as versões do esquema da política do IAM, consulte Versões da política.

API

  1. Chame tables.getIamPolicy para recuperar a política atual.

  2. Edite a política para adicionar membros e/ou vinculações. Consulte o exemplo de bq para o formato da política.

  3. Chame tables.setIamPolicy para gravar a nova política.

Para informações sobre as versões do esquema da política do IAM, consulte Versões da política.

Java

Antes de testar essa amostra, siga as instruções de configuração para 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.

import com.google.cloud.Identity;
import com.google.cloud.Policy;
import com.google.cloud.Role;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.TableId;

// Sample to create iam policy for table
public class CreateIamPolicy {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    createIamPolicy(datasetName, tableName);
  }

  public static void createIamPolicy(String datasetName, String tableName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId tableId = TableId.of(datasetName, tableName);

      Policy policy = bigquery.getIamPolicy(tableId);
      policy
          .toBuilder()
          .addIdentity(Role.of("roles/bigquery.dataViewer"), Identity.allUsers())
          .build();
      bigquery.setIamPolicy(tableId, policy);
      System.out.println("Iam policy created successfully");
    } catch (BigQueryException e) {
      System.out.println("Iam policy was not created. \n" + e.toString());
    }
  }
}

Como atualizar uma política de acesso

Para atualizar uma política de acesso em uma tabela ou uma visualização:

Console

  1. Abra a página do BigQuery no Console do Cloud.

    Acessar o Console do Cloud

  2. No painel Explorer, selecione o projeto.

  3. Selecione o conjunto de dados que contém a tabela ou a visualização.

  4. Selecione a tabela ou a visualização.

  5. Se você estiver modificando o acesso a uma tabela, clique em Compartilhar tabela. Se você estiver modificando o acesso à visualização, clique em Compartilhar visualização.

  6. A página Permissões de tabela ou a Permissões de visualização será aberta.

    • Se você quiser adicionar novos membros, use a mesma técnica mostrada em Como criar uma política de acesso.

    • Se você quiser remover o acesso de um usuário, pesquise-o no campo Pesquisar membros. Se você quiser remover um usuário de um grupo, expanda o grupo e clique no botão Excluir do usuário.

    • Para alterar a associação ao grupo de um usuário, faça adições e/ou exclusões conforme descrito nas duas etapas imediatas acima.

  7. Repita a ação conforme necessário para outros usuários cujo acesso você queira adicionar, modificar ou remover. Quando terminar, clique em Concluído.

bq

  1. Recuperar a política existente de um arquivo local.

    bq get-iam-policy --format=prettyjson \
     project-id:dataset.table_or_view \
     > policy.json
    

    onde:

    • project-id é o ID do projeto.
    • dataset é o nome do conjunto de dados que contém a tabela que você está atualizando;
    • table_or_view é o nome da tabela ou da visualização que você está atualizando.

    Mais exemplos de como identificar uma tabela ou visualização e redirecionar a saída da política para um arquivo:

    • bq get-iam-policy dataset1.table1 > policy.json
    • bq get-iam-policy --project_id=project1 -t dataset1.table1 > policy.json
    • bq get-iam-policy project1:dataset1.table1 > policy.json
  2. Modifique policy.json conforme necessário.

    Para mais informações sobre como formatar o arquivo policy.json, consulte Noções básicas sobre políticas.

    Para informações sobre as versões do esquema da política do IAM, consulte Versões da política.

  3. Atualize a política.

    bq set-iam-policy \
     project-id:dataset.table_or_view \
     policy.json
    

API

  1. Chame tables.getIamPolicy para recuperar a política atual.

  2. Edite a política para adicionar membros e/ou vinculações.

    Quanto ao formato necessário à política, consulte o tópico de referência Políticas.

  3. Chame tables.setIamPolicy para gravar a política atualizada.

Java

Antes de testar essa amostra, siga as instruções de configuração para 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.

import com.google.cloud.Identity;
import com.google.cloud.Policy;
import com.google.cloud.Role;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.TableId;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

// Sample to update iam policy in table
public class UpdateIamPolicy {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    updateIamPolicy(datasetName, tableName);
  }

  public static void updateIamPolicy(String datasetName, String tableName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId tableId = TableId.of(datasetName, tableName);

      Policy policy = bigquery.getIamPolicy(tableId);
      Map<Role, Set<Identity>> binding = new HashMap<>(policy.getBindings());
      binding.remove(Role.of("roles/bigquery.dataViewer"));

      policy.toBuilder().setBindings(binding).build();
      bigquery.setIamPolicy(tableId, policy);

      System.out.println("Iam policy updated successfully");
    } catch (BigQueryException e) {
      System.out.println("Iam policy was not updated. \n" + e.toString());
    }
  }
}

Para mais informações sobre as políticas de gerenciamento de identidade e acesso, consulte Noções básicas sobre políticas e o tópico de referência da Política.

A seguir