Usar o IAM para controlar o acesso a recursos
Neste documento, descrevemos como ver, conceder e revogar controles de acesso para conjuntos de dados do BigQuery e para os recursos dentro deles: tabelas, visualizações e rotinas. Embora os modelos também sejam recursos no nível do conjunto de dados, não é possível conceder acesso a modelos individuais usando papéis do IAM.
É possível conceder acesso a recursos do Google Cloud com políticas de permissão, também conhecidas como políticas do Identity and Access Management (IAM), que são anexadas aos recursos. É possível anexar apenas uma política a cada recurso. A política de permissão controla o acesso ao próprio recurso e todos os descendentes desse recurso que herdam a política.
Para mais informações sobre políticas de permissão, consulte Estrutura da política na documentação do IAM.
Para este documento, é preciso conhecer o Identity and Access Management (IAM) no Google Cloud.
Limitações
- As listas de controle de acesso (ACLs) de rotina não estão incluídas nas rotinas replicadas.
- As rotinas em conjuntos de dados externos ou vinculados não são compatíveis com controles de acesso.
- As tabelas em conjuntos de dados externos ou vinculados não são compatíveis com controles de acesso.
- Não é possível definir controles de acesso de rotina com o Terraform.
- Não é possível definir controles de acesso de rotina com o SDK Google Cloud.
- Não é possível definir controles de acesso de rotina usando a linguagem de controle de dados (DCL) do BigQuery.
- O Data Catalog não é compatível com controles de acesso de rotina. Se um usuário tiver concedido acesso condicional no nível da rotina, ele não vai ver as rotinas no painel lateral do BigQuery. Como solução alternativa, conceda acesso no nível do conjunto de dados.
- A
visualização
INFORMATION_SCHEMA.OBJECT_PRIVILEGES
não mostra controles de acesso para rotinas.
Antes de começar
Atribua papéis do Identity and Access Management (IAM) que concedam aos usuários as permissões necessárias para realizar cada tarefa deste documento.
Funções exigidas
Para conseguir as permissões necessárias para modificar as políticas do IAM para recursos, peça ao administrador para conceder a você o papel do IAM de Proprietário de dados do BigQuery (roles/bigquery.dataOwner
) no projeto.
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Esse papel predefinido contém as permissões necessárias para modificar as políticas do IAM para recursos. Para conferir as permissões exatas necessárias, expanda a seção Permissões necessárias:
Permissões necessárias
As seguintes permissões são necessárias para modificar as políticas do IAM para recursos:
-
Para ver a política de acesso a um conjunto de dados:
bigquery.datasets.get
-
Para definir a política de acesso de um conjunto de dados:
bigquery.datasets.update
-
Para ver a política de acesso a um conjunto de dados (somente no consoleGoogle Cloud ):
bigquery.datasets.getIamPolicy
-
Para definir a política de acesso a um conjunto de dados (somente console):
bigquery.datasets.setIamPolicy
-
Para ver a política de uma tabela ou visualização:
bigquery.tables.getIamPolicy
-
Para definir a política de uma tabela ou visualização:
bigquery.tables.setIamPolicy
-
Para acessar a política de acesso de uma rotina:
bigquery.routines.getIamPolicy
-
Para definir a política de acesso de uma rotina:
bigquery.routines.setIamPolicy
-
Para criar a ferramenta bq ou jobs do SQL do BigQuery (opcional):
bigquery.jobs.create
Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.
Trabalhar com controles de acesso a conjuntos de dados
É possível conceder acesso a um conjunto de dados atribuindo a um principal do IAM um papel predefinido ou personalizado que determina o que o principal pode fazer com o conjunto de dados. Isso também é conhecido como anexar uma política de permissão a um recurso. Depois de conceder acesso, é possível conferir os controles de acesso do conjunto de dados e revogar o acesso a ele.
Conceder acesso a um conjunto de dados
Não é possível conceder acesso a um conjunto de dados ao criá-lo usando a UI da Web do BigQuery ou a ferramenta de linha de comando bq. É preciso primeiro criar o conjunto de dados e depois conceder acesso a ele.
Com a API, é possível conceder acesso durante a criação do conjunto de dados chamando o
método datasets.insert
com um recurso de conjunto de dados definido.
Um projeto é o recurso principal de um conjunto de dados, e um conjunto de dados é o recurso principal de tabelas e visualizações, rotinas e modelos. Quando você concede um papel no nível do projeto, o papel e as permissões dele são herdados pelo conjunto de dados e pelos recursos dele. Da mesma forma, quando você concede um papel no nível do conjunto de dados, o papel e as permissões dele são herdados pelos recursos dentro do conjunto.
É possível conceder acesso a um conjunto de dados atribuindo uma permissão de função do IAM para acessar o conjunto de dados ou concedendo acesso condicionalmente usando uma condição do IAM. Para mais informações sobre como conceder acesso condicional, consulte Controlar o acesso com as condições do IAM.
Para conceder a um papel do IAM acesso a um conjunto de dados sem usar condições, selecione uma das seguintes opções:
Console
Acessar a página do BigQuery.
No painel Explorer, expanda o projeto e selecione um conjunto de dados para compartilhar.
Clique em > Permissões.
CompartilhamentoClique em
adicionar conta principal.No campo Novos principais, digite um principal..
Na lista Selecionar papel, escolha uma função predefinida ou personalizada..
Clique em Save.
Para retornar às informações do conjunto de dados, clique em Fechar.
SQL
Para conceder aos principais acesso aos conjuntos de dados, use a
instrução DCL GRANT
:
No console do Google Cloud , acesse a página BigQuery.
No editor de consultas, digite a seguinte instrução:
GRANT `ROLE_LIST` ON SCHEMA RESOURCE_NAME TO "USER_LIST"
Substitua:
ROLE_LIST
: um papel ou uma lista de papéis separados por vírgulas que você queira conceder.RESOURCE_NAME
: o nome do conjunto de dados a que você está concedendo acesso.USER_LIST
: uma lista separada por vírgulas de usuários a que o papel é concedido.Para ver uma lista de formatos válidos, consulte
user_list
.
Clique em
Executar.
Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.
O exemplo a seguir concede o papel de Leitor de dados do BigQuery a myDataset
:
GRANT `roles/bigquery.dataViewer`
ON SCHEMA `myProject`.myDataset
TO "user:user@example.com", "user:user2@example.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Para gravar as informações do conjunto de dados atual (incluindo controles de acesso) em um arquivo JSON, use o comando
bq show
:bq show \ --format=prettyjson \ PROJECT_ID:DATASET > PATH_TO_FILE
Substitua:
- PROJECT_ID: ID do projeto
- DATASET: o nome do conjunto de dados
- PATH_TO_FILE: o caminho para o arquivo JSON em sua máquina local.
Faça suas alterações na seção
access
do arquivo JSON. É possível adicionar qualquer uma das entradasspecialGroup
:projectOwners
,projectWriters
,projectReaders
eallAuthenticatedUsers
. Também é possível adicionar qualquer uma das seguintes 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
bq update
e inclua o arquivo JSON usando a flag--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 neste formato:PROJECT_ID:DATASET
.bq update
--source PATH_TO_FILE
PROJECT_ID:DATASETPara verificar as alterações no controle de acesso, insira o comando
bq show
novamente sem gravar as informações em um arquivo.bq show --format=prettyjson PROJECT_ID:DATASET
- Inicie o Cloud Shell.
-
Defina o projeto Google Cloud padrão em que você quer aplicar as configurações do Terraform.
Você só precisa executar esse comando uma vez por projeto, e ele pode ser executado em qualquer diretório.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
As variáveis de ambiente serão substituídas se você definir valores explícitos no arquivo de configuração do Terraform.
-
No Cloud Shell, crie um diretório e um novo
arquivo dentro dele. O nome do arquivo precisa ter a extensão
.tf
, por exemplo,main.tf
. Neste tutorial, o arquivo é chamado demain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Se você estiver seguindo um tutorial, poderá copiar o exemplo de código em cada seção ou etapa.
Copie o exemplo de código no
main.tf
recém-criado.Se preferir, copie o código do GitHub. Isso é recomendado quando o snippet do Terraform faz parte de uma solução de ponta a ponta.
- Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
- Salve as alterações.
-
Inicialize o Terraform. Você só precisa fazer isso uma vez por diretório.
terraform init
Opcionalmente, para usar a versão mais recente do provedor do Google, inclua a opção
-upgrade
:terraform init -upgrade
-
Revise a configuração e verifique se os recursos que o Terraform vai criar ou
atualizar correspondem às suas expectativas:
terraform plan
Faça as correções necessárias na configuração.
-
Para aplicar a configuração do Terraform, execute o comando a seguir e digite
yes
no prompt:terraform apply
Aguarde até que o Terraform exiba a mensagem "Apply complete!".
- Abra seu Google Cloud projeto para conferir os resultados. No console Google Cloud , navegue até seus recursos na UI para verificar se foram criados ou atualizados pelo Terraform.
Terraform
Use os recursos google_bigquery_dataset_iam
para atualizar o acesso a um conjunto de dados.
Definir a política de acesso para um conjunto de dados
O exemplo a seguir mostra como usar o recurso google_bigquery_dataset_iam_policy
para definir a política do IAM para o conjunto de dados mydataset
. Isso substitui qualquer política existente já anexada ao conjunto de dados:
# This file sets the IAM policy for the dataset created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" dataset resource with a dataset_id of "mydataset". data "google_iam_policy" "iam_policy" { binding { role = "roles/bigquery.admin" members = [ "user:user@example.com", ] } binding { role = "roles/bigquery.dataOwner" members = [ "group:data.admin@example.com", ] } binding { role = "roles/bigquery.dataEditor" members = [ "serviceAccount:bqcx-1234567891011-12a3@gcp-sa-bigquery-condel.iam.gserviceaccount.com", ] } } resource "google_bigquery_dataset_iam_policy" "dataset_iam_policy" { dataset_id = google_bigquery_dataset.default.dataset_id policy_data = data.google_iam_policy.iam_policy.policy_data }
Definir associação de papel para um conjunto de dados
O exemplo a seguir mostra como usar o recurso google_bigquery_dataset_iam_binding
para definir a associação em um determinado papel para o conjunto de dados mydataset
. Isso substitui qualquer associação existente nesse papel.
Outros papéis na política do IAM para o conjunto de dados são preservados:
# This file sets membership in an IAM role for the dataset created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" dataset resource with a dataset_id of "mydataset". resource "google_bigquery_dataset_iam_binding" "dataset_iam_binding" { dataset_id = google_bigquery_dataset.default.dataset_id role = "roles/bigquery.jobUser" members = [ "user:user@example.com", "group:group@example.com" ] }
Definir associação de papel para um único principal
O exemplo a seguir mostra como usar o recurso google_bigquery_dataset_iam_member
para atualizar a política do IAM para o conjunto de dados mydataset
a fim de conceder um papel a um só principal. A atualização dessa política do IAM não afeta o acesso de outros principais que receberam esse papel no conjunto de dados.
# This file adds a member to an IAM role for the dataset created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" dataset resource with a dataset_id of "mydataset". resource "google_bigquery_dataset_iam_member" "dataset_iam_member" { dataset_id = google_bigquery_dataset.default.dataset_id role = "roles/bigquery.user" member = "user:user@example.com" }
Para aplicar a configuração do Terraform em um projeto Google Cloud , siga as etapas nas seções a seguir.
Preparar o Cloud Shell
Preparar o diretório
Cada arquivo de configuração do Terraform precisa ter o próprio diretório, também chamado de módulo raiz.
Aplique as alterações
API
Para aplicar controles de acesso quando o conjunto de dados for criado, chame o
método datasets.insert
com um
recurso de conjunto de dados definido.
Para atualizar os controles de acesso, chame o
método datasets.patch
e
use a propriedade access
no recurso Dataset
.
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 esta amostra, siga as instruções de configuração do 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.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Defina a nova lista de acesso anexando a nova entrada à lista atual com o tipoDatasetMetadataToUpdate
. Em seguida, chame a
função dataset.Update()
para atualizar a propriedade.
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.
Node.js
Antes de testar esta amostra, siga as instruções de configuração do Node.js 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 Node.js.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Defina a nova lista de acesso anexando a nova entrada à lista atual usando o método Dataset#metadata. Em seguida, chame a função Dataset#setMetadata() para atualizar a propriedade.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.
Defina a propriedadedataset.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.
Papéis predefinidos que concedem acesso a conjuntos de dados
Você pode conceder acesso a um conjunto de dados com os seguintes papéis predefinidos do IAM.
Papel | Descrição |
---|---|
Proprietário de dados do BigQuery
(roles/bigquery.dataOwner ) |
Quando concedido em um conjunto de dados, esse papel concede as seguintes permissões:
|
Editor de dados do BigQuery
(roles/bigquery.dataEditor ) |
Quando concedido em um conjunto de dados, esse papel concede as seguintes permissões:
|
Leitor de dados do BigQuery
(roles/bigquery.dataViewer ) |
Quando concedido em um conjunto de dados, esse papel concede as seguintes permissões:
|
Leitor de metadados do BigQuery
(roles/bigquery.metadataViewer ) |
Quando concedido em um conjunto de dados, esse papel concede as seguintes permissões:
|
Permissões do conjunto de dados
A maioria das permissões que começam com bigquery.datasets
se aplicam no nível do conjunto de dados.
bigquery.datasets.create
não. Para criar conjuntos de dados, a permissão bigquery.datasets.create
precisa ser concedida a uma função no contêiner principal, ou seja, o projeto.
A tabela a seguir lista todas as permissões para conjuntos de dados e o recurso de menor nível a que elas podem ser aplicadas.
Permissão | Recurso | Ação |
---|---|---|
bigquery.datasets.create |
Projeto | Crie conjuntos de dados no projeto. |
bigquery.datasets.get |
Conjunto de dados | Receba metadados e controles de acesso para o conjunto de dados. A visualização de permissões no console também requer a permissão bigquery.datasets.getIamPolicy . |
bigquery.datasets.getIamPolicy |
Conjunto de dados | Necessário no console para conceder ao usuário permissão para receber os controles de acesso de um conjunto de dados. Falha ao abrir. O console também exige a permissão
bigquery.datasets.get para visualizar o conjunto de dados. |
bigquery.datasets.update |
Conjunto de dados | Atualize os metadados e os controles de acesso do conjunto de dados. A atualização dos controles de acesso no console também requer a permissão bigquery.datasets.setIamPolicy .
|
bigquery.datasets.setIamPolicy |
Conjunto de dados | Necessário no console para conceder ao usuário permissão para definir os controles de acesso de um conjunto de dados. Falha ao abrir. O console também exige a permissão
bigquery.datasets.update para atualizar o conjunto de dados. |
bigquery.datasets.delete |
Conjunto de dados | Excluir um conjunto de dados. |
bigquery.datasets.createTagBinding |
Conjunto de dados | Anexe tags ao conjunto de dados. |
bigquery.datasets.deleteTagBinding |
Conjunto de dados | Remova as tags do conjunto de dados. |
bigquery.datasets.listTagBindings |
Conjunto de dados | Lista as tags do conjunto de dados. |
bigquery.datasets.listEffectiveTags |
Conjunto de dados | Lista as tags efetivas (aplicadas e herdadas) do conjunto de dados. |
bigquery.datasets.link |
Conjunto de dados | Crie um conjunto de dados vinculado. |
bigquery.datasets.listSharedDatasetUsage |
Projeto | Liste as estatísticas de uso de conjuntos de dados compartilhados para aqueles a que você tem acesso
no projeto. Essa permissão é necessária para consultar a visualização INFORMATION_SCHEMA.SHARED_DATASET_USAGE . |
Ver controles de acesso para um conjunto de dados
Para conferir os controles de acesso definidos explicitamente em um conjunto de dados, escolha uma das seguintes opções. Para ver os papéis herdados de um conjunto de dados, use a UI da Web do BigQuery.
Console
Acessar a página do BigQuery.
No painel Explorer, expanda o projeto e selecione um conjunto de dados.
Clique em > Permissões.
CompartilhamentoOs controles de acesso do conjunto de dados aparecem no painel Permissões do conjunto de dados.
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Para receber uma política atual e enviá-la para um arquivo local em JSON, use o comando
bq show
no Cloud Shell:bq show \ --format=prettyjson \ PROJECT_ID:DATASET > PATH_TO_FILE
Substitua:
- PROJECT_ID: ID do projeto
- DATASET: o nome do conjunto de dados
- PATH_TO_FILE: o caminho para o arquivo JSON na sua máquina local.
No console do Google Cloud , acesse a página BigQuery.
No editor de consultas, digite a seguinte instrução:
SELECT COLUMN_LIST FROM PROJECT_ID.`region-REGION`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES WHERE object_name = "DATASET";
Substitua:
- COLUMN_LIST: uma lista separada por vírgulas de colunas da visualização
INFORMATION_SCHEMA.OBJECT_PRIVILEGES
. - PROJECT_ID: ID do projeto;
- REGION: um qualificador de região
- DATASET: o nome de um conjunto de dados no projeto.
- COLUMN_LIST: uma lista separada por vírgulas de colunas da visualização
Clique em
Executar.
SQL
Consulte a visualização INFORMATION_SCHEMA.OBJECT_PRIVILEGES
.
As consultas para recuperar controles de acesso de um conjunto de dados precisam especificar object_name
.
Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.
Exemplo:
Essa consulta recebe controles de acesso para mydataset
.
SELECT object_name, privilege_type, grantee FROM my_project.`region-us`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES WHERE object_name = "mydataset";
A saída será semelhante a esta:
+------------------+-----------------------------+-------------------------+
| object_name | privilege_type | grantee |
+------------------+-----------------------------+-------------------------+
| mydataset | roles/bigquery.dataOwner | projectOwner:myproject |
| mydataset | roles/bigquery.dataViwer | user:user@example.com |
+------------------+-----------------------------+-------------------------+
API
Para conferir os controles de acesso de um conjunto de dados, chame o método
datasets.get
com um
recurso dataset
definido.
Os controles de acesso aparecem na propriedade access
do recurso dataset
.
Go
Antes de testar esta amostra, siga as instruções de configuração do 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.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Chame a funçãoclient.Dataset().Metadata()
. A política de acesso está disponível na propriedade Access
.
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.
Node.js
Antes de testar esta amostra, siga as instruções de configuração do Node.js 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 Node.js.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Recupere os metadados do conjunto de dados usando a funçãoDataset#getMetadata()
.
A política de acesso está disponível na propriedade de acesso do objeto de metadados resultante.
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.
Chame a funçãoclient.get_dataset()
.
A política de acesso está disponível na
propriedade dataset.access_entries
.
Revogar acesso a um conjunto de dados
Para revogar o acesso a um conjunto de dados, selecione uma das seguintes opções:
Console
Acessar a página do BigQuery.
No painel Explorer, expanda o projeto e selecione um conjunto de dados.
No painel de detalhes, clique em Compartilhamento>Permissões.
Na caixa de diálogo Permissões do conjunto de dados, expanda o principal cujo acesso você quer revogar.
Clique em
Remover principal.Na caixa de diálogo Remover papel do principal?, clique em Remover.
Para retornar aos detalhes do conjunto de dados, clique em Fechar.
SQL
Para remover o acesso de um principal a um conjunto de dados, use a
instrução DCL REVOKE
:
No console do Google Cloud , acesse a página BigQuery.
No editor de consultas, digite a seguinte instrução:
REVOKE `ROLE_LIST` ON SCHEMA RESOURCE_NAME FROM "USER_LIST"
Substitua:
ROLE_LIST
: um papel ou uma lista de papéis separados por vírgulas que você queira revogarRESOURCE_NAME
: o nome do recurso em que você quer revogar a permissão.USER_LIST
: uma lista separada por vírgulas de usuários que terão os papéis revogados.Para ver uma lista de formatos válidos, consulte
user_list
.
Clique em
Executar.
Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.
O exemplo a seguir revoga o papel de proprietário de dados do BigQuery de myDataset
:
REVOKE `roles/bigquery.dataOwner`
ON SCHEMA `myProject`.myDataset
FROM "group:group@example.com", "serviceAccount:user@test-project.iam.gserviceaccount.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Para gravar as informações do conjunto de dados atual (incluindo controles de acesso) em um arquivo JSON, use o comando
bq show
:bq show \ --format=prettyjson \ PROJECT_ID:DATASET > PATH_TO_FILE
Substitua:
- PROJECT_ID: ID do projeto
- DATASET: o nome do conjunto de dados
- PATH_TO_FILE: o caminho para o arquivo JSON em sua máquina local.
Faça suas alterações na seção
access
do arquivo JSON. É possível remover qualquer uma das entradasspecialGroup
:projectOwners
,projectWriters
,projectReaders
eallAuthenticatedUsers
. Também é possível remover qualquer um dos itens a seguir: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
bq update
e inclua o arquivo JSON usando a flag--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 neste formato:PROJECT_ID:DATASET
.bq update
--source PATH_TO_FILE
PROJECT_ID:DATASETPara verificar as alterações no controle de acesso, use o comando
show
sem gravar as informações em um arquivo:bq show --format=prettyjson PROJECT_ID:DATASET
API
Chame o método datasets.patch
e use a propriedade access
no recurso Dataset
para atualizar os 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 esta amostra, siga as instruções de configuração do 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.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Defina a nova lista de acesso removendo a entrada da lista atual com o tipoDatasetMetadataToUpdate
. Em seguida, chame a
função dataset.Update()
para atualizar a propriedade.
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.
Node.js
Antes de testar esta amostra, siga as instruções de configuração do Node.js 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 Node.js.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Atualize a lista de acesso ao conjunto de dados removendo a entrada especificada da lista atual usando o métodoDataset#get()
para recuperar os metadados atuais. Modifique a propriedade de acesso para excluir a entidade desejada e chame a função
Dataset#setMetadata()
para aplicar a lista de acesso atualizada.
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.
Defina a propriedadedataset.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.
Trabalhar com controles de acesso a tabelas e visualizações
As visualizações são tratadas como recursos de tabela no BigQuery. É possível conceder acesso a uma tabela ou visualização atribuindo a um principal do IAM um papel predefinido ou personalizado que determina o que o principal pode fazer com a tabela ou visualização. Isso também é conhecido como anexar uma política de permissão a um recurso. Depois de conceder acesso, é possível conferir os controles de acesso da tabela ou visualização e revogar o acesso a elas.
Permitir acesso a uma tabela ou visualização
Para um controle de acesso detalhado, é possível conceder um papel predefinido ou personalizado do IAM em uma tabela ou visualização específica. A tabela ou visualização também herda os controles de acesso especificados no nível do conjunto de dados e acima. Por exemplo, se você conceder a um principal o papel de proprietário de dados do BigQuery em um conjunto de dados, esse principal também terá permissões de proprietário de dados do BigQuery nas tabelas e visualizações do conjunto de dados.
Para conceder acesso a uma tabela ou visualização, selecione uma das seguintes opções:
Console
Acessar a página do BigQuery.
No painel Explorer, expanda seu projeto e selecione uma tabela ou visualização para compartilhar.
Clique em
Compartilhar.Clique em
adicionar conta principal.No campo Novos principais, digite um principal..
Na lista Selecionar papel, escolha uma função predefinida ou personalizada..
Clique em Save.
Para retornar à tabela ou aos detalhes da visualização, clique em Fechar.
SQL
Para conceder aos principais acesso a tabelas ou visualizações, use a
instrução DCL GRANT
:
No console do Google Cloud , acesse a página BigQuery.
No editor de consultas, digite a seguinte instrução:
GRANT `ROLE_LIST` ON RESOURCE_TYPE RESOURCE_NAME TO "USER_LIST"
Substitua:
ROLE_LIST
: um papel ou uma lista de papéis separados por vírgulas que você queira conceder.RESOURCE_TYPE
: o tipo de recurso ao qual o papel é aplicado.Os valores aceitos incluem
TABLE
,VIEW
,MATERIALIZED VIEW
eEXTERNAL TABLE
.RESOURCE_NAME
: o nome do recurso em que você quer conceder a permissão.USER_LIST
: uma lista separada por vírgulas de usuários a que o papel é concedido.Para ver uma lista de formatos válidos, consulte
user_list
.
Clique em
Executar.
Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.
O exemplo a seguir concede o papel de Leitor de dados do BigQuery em myTable
:
GRANT `roles/bigquery.dataViewer`
ON TABLE `myProject`.myDataset.myTable
TO "user:user@example.com", "user:user2@example.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Para conceder acesso a uma tabela ou visualização, use o comando
bq add-iam-policy-binding
:bq add-iam-policy-binding --member=MEMBER_TYPE:MEMBER --role=ROLE --table=true RESOURCE
Substitua:
- MEMBER_TYPE: o tipo de membro, como
user
,group
,serviceAccount
oudomain
. - MEMBER: o endereço de e-mail ou o nome de domínio do membro.
- ROLE: o papel que você quer conceder ao membro.
- RESOURCE: o nome da tabela ou visualização com a política que você quer atualizar.
- MEMBER_TYPE: o tipo de membro, como
- Inicie o Cloud Shell.
-
Defina o projeto Google Cloud padrão em que você quer aplicar as configurações do Terraform.
Você só precisa executar esse comando uma vez por projeto, e ele pode ser executado em qualquer diretório.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
As variáveis de ambiente serão substituídas se você definir valores explícitos no arquivo de configuração do Terraform.
-
No Cloud Shell, crie um diretório e um novo
arquivo dentro dele. O nome do arquivo precisa ter a extensão
.tf
, por exemplo,main.tf
. Neste tutorial, o arquivo é chamado demain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Se você estiver seguindo um tutorial, poderá copiar o exemplo de código em cada seção ou etapa.
Copie o exemplo de código no
main.tf
recém-criado.Se preferir, copie o código do GitHub. Isso é recomendado quando o snippet do Terraform faz parte de uma solução de ponta a ponta.
- Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
- Salve as alterações.
-
Inicialize o Terraform. Você só precisa fazer isso uma vez por diretório.
terraform init
Opcionalmente, para usar a versão mais recente do provedor do Google, inclua a opção
-upgrade
:terraform init -upgrade
-
Revise a configuração e verifique se os recursos que o Terraform vai criar ou
atualizar correspondem às suas expectativas:
terraform plan
Faça as correções necessárias na configuração.
-
Para aplicar a configuração do Terraform, execute o comando a seguir e digite
yes
no prompt:terraform apply
Aguarde até que o Terraform exiba a mensagem "Apply complete!".
- Abra seu Google Cloud projeto para conferir os resultados. No console Google Cloud , navegue até seus recursos na UI para verificar se foram criados ou atualizados pelo Terraform.
Para recuperar a política atual, chame o método
tables.getIamPolicy
.Edite a política para adicionar membros ou controles de acesso, ou ambos. Quanto ao formato necessário à política, consulte o tópico de referência Políticas.
Chame
tables.setIamPolicy
para gravar a política atualizada.
Terraform
Use os recursos google_bigquery_table_iam
para atualizar o acesso a uma tabela.
Definir a política de acesso para uma tabela
O exemplo a seguir mostra como usar o recurso google_bigquery_table_iam_policy
para definir a política do IAM para a tabela mytable
. Isso substitui qualquer política existente já anexada à tabela:
# This file sets the IAM policy for the table created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" table resource with a table_id of "mytable". data "google_iam_policy" "iam_policy" { binding { role = "roles/bigquery.dataOwner" members = [ "user:user@example.com", ] } } resource "google_bigquery_table_iam_policy" "table_iam_policy" { dataset_id = google_bigquery_table.default.dataset_id table_id = google_bigquery_table.default.table_id policy_data = data.google_iam_policy.iam_policy.policy_data }
Definir a assinatura de uma função para uma tabela
O exemplo a seguir mostra como usar o recurso google_bigquery_table_iam_binding
para definir a associação em um determinado papel para a tabela mytable
. Isso substitui qualquer associação existente nesse papel.
Outros papéis na política do IAM para a tabela são preservados.
# This file sets membership in an IAM role for the table created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" table resource with a table_id of "mytable". resource "google_bigquery_table_iam_binding" "table_iam_binding" { dataset_id = google_bigquery_table.default.dataset_id table_id = google_bigquery_table.default.table_id role = "roles/bigquery.dataOwner" members = [ "group:group@example.com", ] }
Definir associação de papel para um único principal
O exemplo a seguir mostra como usar o recurso google_bigquery_table_iam_member
para atualizar a política do IAM para a tabela mytable
a fim de conceder um papel a um só principal. A atualização dessa política do IAM não afeta o acesso de outros principais que receberam esse papel no conjunto de dados.
# This file adds a member to an IAM role for the table created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" table resource with a table_id of "mytable". resource "google_bigquery_table_iam_member" "table_iam_member" { dataset_id = google_bigquery_table.default.dataset_id table_id = google_bigquery_table.default.table_id role = "roles/bigquery.dataEditor" member = "serviceAccount:bqcx-1234567891011-12a3@gcp-sa-bigquery-condel.iam.gserviceaccount.com" }
Para aplicar a configuração do Terraform em um projeto Google Cloud , siga as etapas nas seções a seguir.
Preparar o Cloud Shell
Preparar o diretório
Cada arquivo de configuração do Terraform precisa ter o próprio diretório, também chamado de módulo raiz.
Aplique as alterações
API
Go
Antes de testar esta amostra, siga as instruções de configuração do 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.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Chame a funçãoIAM().SetPolicy()
do recurso
para salvar as mudanças na política de acesso de uma tabela ou visualização.
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.
Node.js
Antes de testar esta amostra, siga as instruções de configuração do Node.js 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 Node.js.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Chame a funçãoTable#getIamPolicy()
para recuperar a política atual do IAM de uma tabela ou visualização, modifique a política adicionando novas vinculações e use a
função Table#setIamPolicy()
para salvar as mudanças na política de acesso.
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.
Chame a funçãoclient.set_iam_policy()
para salvar as mudanças na política de acesso de uma tabela ou visualização.
Papéis predefinidos que concedem acesso a tabelas e visualizações
As visualizações são tratadas como recursos de tabela no BigQuery. Para controle de acesso refinado, é possível conceder um papel predefinido ou personalizado do IAM em uma tabela ou visualização específica. A tabela ou visualização também herda os controles de acesso especificados no nível do conjunto de dados e acima. Por exemplo, se você conceder a um principal o papel de proprietário de dados do BigQuery em um conjunto de dados, esse principal também terá permissões de proprietário de dados nas tabelas e visualizações do conjunto de dados.
Os seguintes papéis predefinidos do IAM têm permissões em tabelas ou visualizações.
Papel | Descrição |
---|---|
Proprietário de dados do BigQuery
(roles/bigquery.dataOwner ) |
Quando concedido em uma tabela ou visualização, esse papel concede as seguintes permissões:
|
Editor de dados do BigQuery
(roles/bigquery.dataEditor ) |
Quando concedido em uma tabela ou visualização, esse papel concede as seguintes permissões:
|
Leitor de dados do BigQuery
(roles/bigquery.dataViewer ) |
Quando concedido em uma tabela ou visualização, esse papel concede as seguintes permissões:
|
Leitor de metadados do BigQuery
(roles/bigquery.metadataViewer ) |
Quando concedido em uma tabela ou visualização, esse papel concede as seguintes permissões:
|
Permissões para tabelas e visualizações
As visualizações são tratadas como recursos de tabela no BigQuery. Todas as permissões no nível da tabela se aplicam às visualizações.
A maioria das permissões que começam com bigquery.tables
se aplicam no nível da tabela.
bigquery.tables.create
e bigquery.tables.list
não funcionam. Para criar e listar tabelas ou visualizações, as permissões bigquery.tables.create
e bigquery.tables.list
precisam ser concedidas a uma função em um contêiner principal: o conjunto de dados ou o projeto.
A tabela a seguir lista todas as permissões para tabelas e visualizações e o recurso de nível mais baixo a que elas podem ser concedidas.
Permissão | Recurso | Ação |
---|---|---|
bigquery.tables.create |
Conjunto de dados | Crie novas tabelas no conjunto de dados. |
bigquery.tables.createIndex |
Tabela | Crie um índice de pesquisa na tabela. |
bigquery.tables.deleteIndex |
Tabela | Exclua um índice de pesquisa na tabela. |
bigquery.tables.createSnapshot |
Tabela | Crie um snapshot da tabela. A criação de um snapshot exige várias permissões adicionais no nível da tabela e do conjunto de dados. Para mais detalhes, consulte Permissões e papéis para criar snapshots de tabelas. |
bigquery.tables.deleteSnapshot |
Tabela | Exclui um snapshot da tabela. |
bigquery.tables.delete |
Tabela | Excluir uma tabela. |
bigquery.tables.createTagBinding |
Tabela | Cria vinculações de tags de recursos em um tabela. |
bigquery.tables.deleteTagBinding |
Tabela | Exclui vinculações de tags de recursos em uma tabela. |
bigquery.tables.listTagBindings |
Tabela | Lista as vinculações de tags de recurso em uma tabela. |
bigquery.tables.listEffectiveTags |
Tabela | Lista as tags efetivas (aplicadas e herdadas) da tabela. |
bigquery.tables.export |
Tabela | Exporte os dados da tabela. Para executar um job de exportação, também são necessárias as permissões bigquery.jobs.create . |
bigquery.tables.get |
Tabela | Recebe metadados de uma tabela. |
bigquery.tables.getData |
Tabela | Consulte os dados da tabela. Para executar um job de consulta, também são necessárias permissões bigquery.jobs.create . |
bigquery.tables.getIamPolicy |
Tabela | Recebe os controles de acesso da tabela. |
bigquery.tables.list |
Conjunto de dados | Listar todas as tabelas e metadados de tabelas no conjunto de dados. |
bigquery.tables.replicateData |
Tabela | Replicar os dados da tabela. Essa permissão é necessária para criar visualizações materializadas de réplicas. |
bigquery.tables.restoreSnapshot |
Tabela | Restaure um snapshot da tabela. |
bigquery.tables.setCategory |
Tabela | Defina tags de política no esquema da tabela. |
bigquery.tables.setColumnDataPolicy |
Tabela | Defina políticas de acesso no nível da coluna em uma tabela. |
bigquery.tables.setIamPolicy |
Tabela | Defina controles de acesso em uma tabela. |
bigquery.tables.update |
Tabela | Atualizar tabela. metadata. bigquery.tables.get também é
necessário para atualizar os metadados da tabela no console. |
bigquery.tables.updateData |
Tabela | Atualizar dados de tabela. |
bigquery.tables.updateIndex |
Tabela | Atualize um índice de pesquisa na tabela. |
Ver controles de acesso para uma tabela ou visualização
Para conferir os controles de acesso de uma tabela ou visualização, escolha uma das seguintes opções:
Console
Acessar a página do BigQuery.
No painel Explorer, expanda seu projeto e um conjunto de dados e selecione uma tabela ou visualização.
Clique em
Compartilhar.Os controles de acesso de tabela ou visualização aparecem no painel Compartilhar.
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Para receber uma política de acesso atual e enviá-la para um arquivo local em JSON, use o comando
bq get-iam-policy
no Cloud Shell:bq get-iam-policy \ --table=true \ PROJECT_ID:DATASET.RESOURCE > PATH_TO_FILE
Substitua:
- PROJECT_ID: ID do projeto
- DATASET: o nome do conjunto de dados
- RESOURCE: o nome da tabela ou visualização com a política que você quer ver
- PATH_TO_FILE: o caminho para o arquivo JSON na sua máquina local.
No console do Google Cloud , acesse a página BigQuery.
No editor de consultas, digite a seguinte instrução:
SELECT COLUMN_LIST FROM PROJECT_ID.`region-REGION`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES WHERE object_schema = "DATASET" AND object_name = "TABLE";
Substitua:
- COLUMN_LIST: uma lista separada por vírgulas de colunas da visualização
INFORMATION_SCHEMA.OBJECT_PRIVILEGES
. - PROJECT_ID: ID do projeto;
- REGION: um qualificador de região
- DATASET: o nome de um conjunto de dados que contém a tabela ou a visualização.
- TABLE: o nome da tabela ou visualização
- COLUMN_LIST: uma lista separada por vírgulas de colunas da visualização
Clique em
Executar.
SQL
Consulte a visualização INFORMATION_SCHEMA.OBJECT_PRIVILEGES
.
As consultas para recuperar controles de acesso de uma tabela ou visualização precisam especificar object_schema
e object_name
.
Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.
Exemplo:
SELECT object_name, privilege_type, grantee FROM my_project.`region-us`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES WHERE object_schema = "mydataset" AND object_name = "mytable";
+------------------+-----------------------------+--------------------------+
| object_name | privilege_type | grantee |
+------------------+-----------------------------+--------------------------+
| mytable | roles/bigquery.dataEditor | group:group@example.com|
| mytable | roles/bigquery.dataOwner | user:user@example.com|
+------------------+-----------------------------+--------------------------+
API
Para recuperar a política atual, chame o
método tables.getIamPolicy
.
Go
Antes de testar esta amostra, siga as instruções de configuração do 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.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Chame aIAM().Policy()
função do recurso. Em seguida, chame a função Roles()
para receber a política de acesso de uma tabela ou visualização.
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.
Node.js
Antes de testar esta amostra, siga as instruções de configuração do Node.js 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 Node.js.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Recupere a política do IAM para uma tabela ou visualização usando a funçãoTable#getIamPolicy()
.
Os detalhes da política de acesso estão disponíveis no objeto de política retornado.
Revogar acesso a uma tabela ou visualização
Para revogar o acesso a uma tabela ou visualização, selecione uma das seguintes opções:
Console
Acessar a página do BigQuery.
No painel Explorer, expanda o projeto e um conjunto de dados e selecione uma tabela ou visualização.
No painel de detalhes, clique em Compartilhar.
Na caixa de diálogo Compartilhar, expanda o principal cujo acesso você quer revogar.
Clique em
Excluir.Na caixa de diálogo Remover papel do principal?, clique em Remover.
Para retornar à tabela ou aos detalhes da visualização, clique em Fechar.
SQL
Para remover o acesso de tabelas ou visualizações dos principais, use a
instrução DCL REVOKE
:
No console do Google Cloud , acesse a página BigQuery.
No editor de consultas, digite a seguinte instrução:
REVOKE `ROLE_LIST` ON RESOURCE_TYPE RESOURCE_NAME FROM "USER_LIST"
Substitua:
ROLE_LIST
: um papel ou uma lista de papéis separados por vírgulas que você queira revogarRESOURCE_TYPE
: o tipo de recurso do qual o papel é revogado.Os valores aceitos incluem
TABLE
,VIEW
,MATERIALIZED VIEW
eEXTERNAL TABLE
.RESOURCE_NAME
: o nome do recurso em que você quer revogar a permissão.USER_LIST
: uma lista separada por vírgulas de usuários que terão os papéis revogados.Para ver uma lista de formatos válidos, consulte
user_list
.
Clique em
Executar.
Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.
O exemplo a seguir revoga o papel de proprietário de dados do BigQuery em myTable
:
REVOKE `roles/bigquery.dataOwner`
ON TABLE `myProject`.myDataset.myTable
FROM "group:group@example.com", "serviceAccount:user@myproject.iam.gserviceaccount.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Para revogar o acesso a uma tabela ou visualização, use o comando
bq remove-iam-policy-binding
:bq remove-iam-policy-binding --member=MEMBER_TYPE:MEMBER --role=ROLE --table=true RESOURCE
Substitua:
- MEMBER_TYPE: o tipo de membro, como
user
,group
,serviceAccount
oudomain
- MEMBER: o endereço de e-mail ou o nome de domínio do membro.
- ROLE: o papel que você quer revogar do membro
- RESOURCE: o nome da tabela ou visualização com a política que você quer atualizar
- MEMBER_TYPE: o tipo de membro, como
Para recuperar a política atual, chame o método
tables.getIamPolicy
.Edite a política para remover membros ou vinculações, ou ambos. Quanto ao formato necessário à política, consulte o tópico de referência Políticas.
Chame
tables.setIamPolicy
para gravar a política atualizada.
API
Go
Antes de testar esta amostra, siga as instruções de configuração do 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.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Chame a funçãopolicy.Remove()
para remover o acesso.
Em seguida, chame a
função IAM().SetPolicy()
para salvar as mudanças na política de acesso de uma tabela ou visualização.
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.
Node.js
Antes de testar esta amostra, siga as instruções de configuração do Node.js 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 Node.js.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Recupere a política do IAM atual para uma tabela ou visualização usando o métodoTable#getIamPolicy()
.
Modifique a política para remover o papel ou principal desejado e aplique a política atualizada usando o método
Table#setIamPolicy()
.
Trabalhar com controles de acesso para rotinas
Para enviar feedback ou solicitar suporte para esse recurso, envie um e-mail para bq-govsec-eng@google.com.
É possível conceder acesso a uma rotina atribuindo a um principal do IAM](/iam/docs/principal-identifiers#allow) um papel predefinido ou personalizado que determina o que o principal pode fazer com a rotina. Isso também é conhecido como anexar uma política de permissão a um recurso. Depois de conceder acesso, você pode conferir os controles de acesso da rotina e revogar o acesso a ela.
Conceder acesso a uma rotina
Para um controle de acesso detalhado, conceda um papel predefinido ou personalizado do IAM em uma rotina específica. A rotina também herda controles de acesso especificados no nível do conjunto de dados e acima. Por exemplo, se você conceder a um principal o papel de proprietário de dados do BigQuery em um conjunto de dados, ele também terá permissões de proprietário de dados nas rotinas do conjunto.
Selecione uma das seguintes opções:
Console
Acessar a página do BigQuery.
No painel Explorer, expanda o projeto e o conjunto de dados, depois Rotinas e selecione uma rotina.
Clique em
Compartilhar.Clique em
Adicionar participantes.No campo Novos membros, insira um principal.
Na lista Selecionar papel, escolha uma função predefinida ou personalizada..
Clique em Salvar.
Para voltar às informações da rotina, clique em Concluído.
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Para gravar as informações da rotina atual (incluindo controles de acesso) em um arquivo JSON, use o comando
bq get-iam-policy
:bq get-iam-policy \ PROJECT_ID:DATASET.ROUTINE \ > PATH_TO_FILE
Substitua:
- PROJECT_ID: ID do projeto;
- DATASET: o nome do conjunto de dados que contém a rotina que você quer atualizar
- ROUTINE: o nome do recurso a ser atualizado.
- PATH_TO_FILE: o caminho para o arquivo JSON em sua máquina local.
Faça suas alterações na seção
bindings
do arquivo JSON. Uma vinculação associa um ou mais principais a um únicorole
. Os principais podem ser contas de usuário, contas de serviço, Grupos do Google e domínios. Por exemplo, a seçãobindings
do arquivo JSON de uma rotina teria a seguinte aparência:{ "bindings": [ { "role": "roles/bigquery.dataViewer", "members": [ "user:user@example.com", "group:group@example.com", "domain:example.com", ] }, ], "etag": "BwWWja0YfJA=", "version": 1 }
Para atualizar sua política de acesso, use o comando
bq set-iam-policy
:bq set-iam-policy PROJECT_ID:DATASET.ROUTINE PATH_TO_FILE
Para verificar as alterações no controle de acesso, insira o comando
bq get-iam-policy
novamente sem gravar as informações em um arquivo:bq get-iam-policy --format=prettyjson \\ PROJECT_ID:DATASET.ROUTINE
Para recuperar a política atual, chame o método
routines.getIamPolicy
.Edite a política para adicionar principais, vinculações ou ambos. Quanto ao formato necessário à política, consulte o tópico de referência Políticas.
Chame
routines.setIamPolicy
para gravar a política atualizada.
API
Papéis predefinidos que concedem acesso a rotinas
Para um controle de acesso detalhado, conceda um papel predefinido ou personalizado do IAM em uma rotina específica. A rotina também herda controles de acesso especificados no nível do conjunto de dados e acima. Por exemplo, se você conceder a um principal o papel de proprietário de dados em um conjunto de dados, ele também terá permissões de proprietário de dados nas rotinas do conjunto por herança.
Os seguintes papéis predefinidos do IAM têm permissões em rotinas.
Papel | Descrição |
---|---|
Proprietário de dados do BigQuery
(roles/bigquery.dataOwner ) |
Quando concedido em uma rotina, esse papel concede as seguintes permissões:
Não conceda o papel de proprietário de dados no nível da rotina. O Editor de dados também concede todas as permissões para a rotina e é um papel com menos privilégios. |
Editor de dados do BigQuery
(roles/bigquery.dataEditor ) |
Quando concedido em uma rotina, esse papel concede as seguintes permissões:
|
Leitor de dados do BigQuery
(roles/bigquery.dataViewer ) |
Quando concedido em uma rotina, esse papel concede as seguintes permissões:
|
Leitor de metadados do BigQuery
(roles/bigquery.metadataViewer ) |
Quando concedido em uma rotina, esse papel concede as seguintes permissões:
|
Permissões para rotinas
A maioria das permissões que começam com bigquery.routines
se aplicam no nível da rotina.
bigquery.routines.create
e bigquery.routines.list
não funcionam. Para criar e listar rotinas, as permissões bigquery.routines.create
e bigquery.routines.list
precisam ser concedidas a um papel no contêiner pai, ou seja, o conjunto de dados.
A tabela a seguir lista todas as permissões para rotinas e o recurso de menor nível a que elas podem ser concedidas.
Permissão | Recurso | Descrição |
---|---|---|
bigquery.routines.create |
Conjunto de dados | Crie uma rotina no conjunto de dados. Essa permissão também exige bigquery.jobs.create para executar um job de consulta que contenha uma instrução CREATE FUNCTION . |
bigquery.routines.delete |
Rotina | Excluir uma rotina. |
bigquery.routines.get |
Rotina | Referenciar uma rotina criada por outra pessoa. Essa permissão também
exige bigquery.jobs.create para executar um job de consulta que
referencia a rotina. Além disso, você precisa de permissão para acessar todos os recursos
referenciados pela rotina, como tabelas ou visualizações. |
bigquery.routines.list |
Conjunto de dados | Listar rotinas no conjunto de dados e mostrar metadados para rotinas. |
bigquery.routines.update |
Rotina | Atualiza definições e metadados de rotina. |
bigquery.routines.getIamPolicy |
Rotina | Receba controles de acesso para a rotina. |
bigquery.routines.setIamPolicy |
Rotina | Defina controles de acesso para a rotina. |
Ver os controles de acesso de uma rotina
Para conferir os controles de acesso de uma rotina, escolha uma das seguintes opções:
Console
Acessar a página do BigQuery.
No painel Explorer, expanda o projeto, o conjunto de dados e Rotinas. Em seguida, selecione uma rotina.
Clique em
Compartilhar.Os controles de acesso da rotina aparecem no painel Compartilhar.
bq
O comando bq get-iam-policy
não oferece suporte para visualização de controles de acesso em uma rotina.
SQL
A
visualização INFORMATION_SCHEMA.OBJECT_PRIVILEGES
não mostra controles de acesso para rotinas.
API
Para recuperar a política atual, chame o
método routines.getIamPolicy
.
Revogar o acesso a uma rotina
Para revogar o acesso a uma rotina, selecione uma das seguintes opções:
Console
Acessar a página do BigQuery.
No painel Explorer, expanda o projeto, um conjunto de dados e Rotinas. Em seguida, selecione uma rotina.
No painel de detalhes, clique em Compartilhamento>Permissões.
Na caixa de diálogo Permissões de rotina, expanda o principal cujo acesso você quer revogar.
Clique em
Remover principal.Na caixa de diálogo Remover papel do principal?, clique em Remover.
Clique em Fechar.
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Para gravar as informações da rotina atual (incluindo controles de acesso) em um arquivo JSON, use o comando
bq get-iam-policy
:bq get-iam-policy --routine PROJECT_ID:DATASET.ROUTINE > PATH_TO_FILE
Substitua:
- PROJECT_ID: ID do projeto;
- DATASET: o nome do conjunto de dados que contém a rotina que você quer atualizar
- ROUTINE: o nome do recurso a ser atualizado.
- PATH_TO_FILE: o caminho para o arquivo JSON em sua máquina local.
No arquivo de política, o valor de
version
continua sendo1
. Esse número se refere à versão do esquema da política do IAM, não à versão da política. O valor deetag
é o número da versão da política.Faça suas alterações na seção
access
do arquivo JSON. É possível remover qualquer uma das entradasspecialGroup
:projectOwners
,projectWriters
,projectReaders
eallAuthenticatedUsers
. Também é possível remover qualquer um dos seguintes itens:userByEmail
,groupByEmail
edomain
.Por exemplo, a seção
access
do arquivo JSON de uma rotina teria a seguinte aparência:{ "bindings": [ { "role": "roles/bigquery.dataViewer", "members": [ "user:user@example.com", "group:group@example.com", "domain:google.com", ] }, ], "etag": "BwWWja0YfJA=", "version": 1 }
Para atualizar sua política de acesso, use o comando
bq set-iam-policy
:bq set-iam-policy --routine PROJECT_ID:DATASET.ROUTINE PATH_TO_FILE
Para verificar as mudanças no controle de acesso, use o comando
get-iam-policy
novamente sem gravar as informações em um arquivo:bq get-iam-policy --routine --format=prettyjson PROJECT_ID:DATASET.ROUTINE
Para recuperar a política atual, chame o método
routines.getIamPolicy
.Edite a política para adicionar principais ou vinculações, ou ambos. Quanto ao formato necessário à política, consulte o tópico de referência Políticas.
API
Ver controles de acesso herdados para um recurso
É possível examinar os papéis herdados do IAM para um recurso usando a UI da Web do BigQuery. Você precisa das permissões adequadas para ver a herança no console. Para examinar a herança de um conjunto de dados, tabela, visualização ou rotina:
No console do Google Cloud , acesse a página BigQuery.
No painel Explorer, selecione o conjunto de dados ou expanda-o e selecione uma tabela, visualização ou rotina.
Para um conjunto de dados, clique em Compartilhamento. Para uma tabela, uma visualização ou uma rotina, clique em Compartilhar.
Verifique se a opção Mostrar funções herdadas na tabela está ativada.
Expanda uma função na tabela.
Na coluna Herança, o ícone hexagonal indica se o papel foi herdado de um recurso pai.
Negar acesso a um recurso
As políticas de negação do IAM permitem definir proteções no acesso aos recursos do BigQuery. É possível definir regras de negação para impedir que alguns principais usem determinadas permissões, seja qual for o papel que eles receberam.
Para informações sobre como criar, atualizar e excluir políticas de negação, consulte Negar acesso a recursos.
Casos especiais
Considere os seguintes cenários ao criar políticas de negação do IAM em algumas permissões do BigQuery:
O acesso a recursos autorizados (visualizações, rotinas, conjuntos de dados ou procedimentos armazenados) permite criar, excluir ou manipular uma tabela, além de ler e modificar dados da tabela, mesmo que você não tenha permissão direta para realizar essas operações. Também é possível receber dados ou metadados do modelo e invocar outros procedimentos armazenados na tabela. Isso significa que os recursos autorizados têm as seguintes permissões:
bigquery.tables.get
bigquery.tables.list
bigquery.tables.getData
bigquery.tables.updateData
bigquery.tables.create
bigquery.tables.delete
bigquery.routines.get
bigquery.routines.list
bigquery.datasets.get
bigquery.models.getData
bigquery.models.getMetadata
Para negar o acesso a esses recursos autorizados, adicione um dos seguintes valores ao campo
deniedPrincipal
ao criar a política de negação:Valor Caso de uso principalSet://goog/public:all
Bloqueia todos os principais, incluindo recursos autorizados. principalSet://bigquery.googleapis.com/projects/PROJECT_NUMBER/*
Bloqueia todos os recursos autorizados do BigQuery no projeto especificado. PROJECT_NUMBER
é um identificador exclusivo gerado automaticamente para seu projeto do tipoINT64
.Para isentar determinados principais da política de negação, especifique-os no campo
exceptionPrincipals
da política. Por exemplo,exceptionPrincipals: "principalSet://bigquery.googleapis.com/projects/1234/*"
.O BigQuery armazena em cache os resultados da consulta de um proprietário de job por 24 horas, que pode acessar sem precisar da permissão
bigquery.tables.getData
na tabela que contém os dados. Portanto, adicionar uma política de negação do IAM à permissãobigquery.tables.getData
não bloqueia o acesso aos resultados armazenados em cache para o proprietário do job até que o cache expire. Para bloquear o acesso do proprietário do job aos resultados em cache, crie uma política de negação separada na permissãobigquery.jobs.create
.Para evitar o acesso não intencional a dados ao usar políticas de negação para bloquear operações de leitura de dados, recomendamos que você também revise e revogue todas as assinaturas atuais no conjunto de dados.
Para criar uma política de negação do IAM para visualizar os controles de acesso ao conjunto de dados, negue as seguintes permissões:
bigquery.datasets.get
bigquery.datasets.getIamPolicy
Para criar uma política de negação do IAM para atualizar os controles de acesso do conjunto de dados, negue as seguintes permissões:
bigquery.datasets.update
bigquery.datasets.setIamPolicy
A seguir
Saiba como usar o
método projects.testIamPermissions
para testar o acesso de usuários a um recurso.