Neste documento, descreveremos como controlar o acesso a conjuntos de dados no BigQuery.
Além disso, você também pode conferir os tópicos a seguir:
- Controlar o acesso nos níveis da tabela e da visualização.
- Restringir o acesso a colunas com a segurança no nível da coluna do BigQuery.
- Controlar o acesso em um nível superior na hierarquia de recursos do IAM.
Visão geral
As permissões no nível do conjunto de dados determinam os usuários, grupos e contas de serviço que têm
permissão para acessar as tabelas, visualizações e dados da tabela em um conjunto de dados específico. Por
exemplo, se você conceder o papel de IAM bigquery.dataOwner
a um
usuário em um conjunto de dados específico, ele poderá criar, atualizar e
excluir tabelas e visualizações no conjunto de dados.
É possível aplicar controles de acesso durante a criação do conjunto de dados chamando o método da API
datasets.insert
.
Não é possível aplicar controles de acesso durante a criação do conjunto de dados no Console do Cloud ou na ferramenta de linha de comando bq
.
É possível aplicar controles de acesso a um conjunto de dados depois que ele é criado das seguintes maneiras:
- Como usar o Console do Cloud.
- use o comando
bq update
na ferramenta de linha de comandobq
. - Chamada do método de API
datasets.patch
- Como usar bibliotecas de cliente.
Permissões necessárias
Para atribuir ou atualizar controles de acesso ao conjunto de dados, você precisa, no mínimo, receber as permissões bigquery.datasets.update
e bigquery.datasets.get
. Os
papéis predefinidos do IAM a seguir incluem as permissões bigquery.datasets.update
e bigquery.datasets.get
:
bigquery.dataOwner
bigquery.admin
Além disso, quando um usuário tem permissões bigquery.datasets.create
e
cria um conjunto de dados, ele recebe o acesso bigquery.dataOwner
ao conjunto.
O acesso bigquery.dataOwner
oferece aos usuários a capacidade de atualizar os conjuntos de dados que eles criaram.
Para mais informações sobre papéis e permissões do IAM no BigQuery, consulte Papéis e permissões predefinidos.
Como controlar o acesso a um conjunto de dados
Para atribuir controles de acesso a um conjunto de dados, faça o seguinte:
Console
Selecione um conjunto de dados em Recursos e clique em Compartilhar conjunto de dados no lado direito da janela.
No painel Compartilhar conjunto de dados da guia Permissões do conjunto de dados, digite a entidade que você quer incluir no campo Adicionar membros. É possível adicionar qualquer uma das entidades a seguir:
- E-mail da Conta do Google: concede acesso ao conjunto de dados a uma conta individual do Google.
- Grupo do Google: concede acesso ao conjunto de dados a todos os membros de um grupo do Google.
- Domínio do Google Apps: concede acesso ao conjunto de dados a todos os usuários e grupos em um domínio do Google.
- Conta de serviço: concede acesso ao conjunto de dados a uma conta de serviço.
- Qualquer pessoa: insira
allUsers
para conceder acesso ao público em geral. - Todas as Contas do Google: insira
allAuthenticatedUsers
para conceder acesso a qualquer usuário conectado a uma Conta do Google.
Em Selecionar um papel, clique em BigQuery e escolha um papel de IAM predefinido apropriado para os novos membros. Para mais informações sobre as permissões atribuídas a cada papel predefinido do BigQuery, consulte a seção Papéis da página de controle de acesso.
Clique em Concluído.
bq
Use o comando
show
para gravar as informações atuais do conjunto de dados, incluindo controles de acesso, em um arquivo JSON. Se o conjunto de dados estiver em um projeto diferente do padrão, adicione o ID do projeto ao nome do conjunto de dados no seguinte formato:project_id:dataset
.bq show \ --format=prettyjson \ project_id:dataset > path_to_file
Substitua:
- project_id é o ID do projeto.
- dataset é o nome do conjunto de dados;
- path_to_file é o caminho do arquivo JSON na sua máquina local.
Exemplos:
Digite o comando a seguir para gravar os controles de acesso para
mydataset
em um arquivo JSON.mydataset
está no projeto padrão.bq show --format=prettyjson mydataset > /tmp/mydataset.json
Digite o comando a seguir para gravar os controles de acesso para
mydataset
em um arquivo JSON.mydataset
está emmyotherproject
.bq show --format=prettyjson \ myotherproject:mydataset > /tmp/mydataset.json
Faça suas alterações na seção
"access"
do arquivo JSON. É possível adicionar ou remover qualquer uma das entradasspecialGroup
:projectOwners
,projectWriters
,projectReaders
eallAuthenticatedUsers
. É possível adicionar, remover ou modificar qualquer uma destas opções:userByEmail
,groupByEmail
edomain
.Por exemplo, a seção "access" do arquivo JSON de um conjunto de dados tem esta aparência:
{ "access": [ { "role": "READER", "specialGroup": "projectReaders" }, { "role": "WRITER", "specialGroup": "projectWriters" }, { "role": "OWNER", "specialGroup": "projectOwners" }, { "role": "READER", "specialGroup": "allAuthenticatedUsers" }, { "role": "READER", "domain": "domain_name" }, { "role": "WRITER", "userByEmail": "user_email" }, { "role": "READER", "groupByEmail": "group_email" } ], ... }
Quando as edições estiverem concluídas, use o comando
update
e inclua o arquivo JSON usando a sinalização--source
. Se o conjunto de dados estiver em um projeto diferente do padrão, adicione o ID do projeto ao nome do conjunto de dados no seguinte formato:project_id:dataset
.bq update \ --source path_to_file \ project_id:dataset
Substitua:
- path_to_file é o caminho do arquivo JSON na sua máquina local.
- project_id é o ID do projeto.
- dataset é o nome do conjunto de dados;
Exemplos:
Digite o comando a seguir para atualizar os controles de acesso para
mydataset
.mydataset
está no projeto padrão.bq update --source /tmp/mydataset.json mydataset
Digite o comando a seguir para atualizar os controles de acesso para
mydataset
.mydataset
está emmyotherproject
.bq update --source /tmp/mydataset.json myotherproject:mydataset
Para verificar as alterações no controle de acesso, insira o comando
show
novamente sem gravar as informações em um arquivo.bq show --format=prettyjson dataset
ou
bq show --format=prettyjson project_id:dataset
API
Ligue para datasets.insert
com um recurso de conjunto de dados definido para aplicar controles de acesso quando o conjunto de dados for criado. Ligue para datasets.patch
e use a propriedade access
no recurso do conjunto de dados para atualizar seus controles de acesso.
Como datasets.update
substitui todo o recurso do conjunto de dados, é melhor usar o método datasets.patch
para atualizar os controles de acesso.
Go
Antes de testar essa amostra, siga as instruções de configuração para Go 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 Go.
Defina a propriedade dataset.access_entries com os controles de acesso de um conjunto de dados. Em seguida, chame a função client.update_dataset() para atualizar a propriedade.
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.
Python
Antes de testar essa amostra, siga as instruções de configuração para 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.
Defina a propriedade dataset.access_entries com os controles de acesso de um conjunto de dados. Em seguida, chame a função client.update_dataset() para atualizar a propriedade.Próximas etapas
- Para mais informações sobre como criar conjuntos de dados, consulte Como criar conjuntos de dados.
- Para mais informações sobre como listar conjuntos de dados em um projeto, consulte Como listar conjuntos de dados.
- Para mais informações sobre metadados do conjunto de dados, consulte Como receber informações sobre conjuntos de dados.
- Para mais informações sobre como alterar propriedades do conjunto de dados, consulte Como atualizar conjuntos de dados.
- Para mais informações sobre como criar e gerenciar rótulos, consulte esta página.