Controle o acesso aos recursos com a IAM
Este documento descreve como ver, conceder e revogar controlos de acesso para conjuntos de dados do BigQuery e para os recursos nos conjuntos de dados: tabelas, vistas e rotinas. Embora os modelos também sejam recursos ao nível do conjunto de dados, não pode conceder acesso a modelos individuais através de funções de IAM.
Pode conceder acesso a Google Cloud recursos através de políticas de autorização, também conhecidas como políticas de gestão de identidade e de acesso (IAM), que são anexadas a recursos. Só pode anexar uma política de autorização a cada recurso. A política de autorização controla o acesso ao próprio recurso, bem como a todos os descendentes desse recurso que herdam a política de autorização.
Para mais informações sobre as políticas de autorização, consulte a secção Estrutura das políticas na documentação da IAM.
Este documento pressupõe familiaridade com a gestão de identidade e de acesso (IAM) no Google Cloud.
Limitações
- As listas de controlo de acesso (ACLs) de rotina não estão incluídas nas rotinas replicadas.
- As rotinas em conjuntos de dados externos ou associados não suportam controlos de acesso.
- As tabelas em conjuntos de dados externos ou associados não suportam controlos de acesso.
- Não é possível definir controlos de acesso de rotina com o Terraform.
- Não é possível definir controlos de acesso de rotina com o SDK Cloud da Google.
- Não é possível definir controlos de acesso de rotina através da linguagem de controlo de dados (DCL) do BigQuery.
- O catálogo de dados não suporta controlos de acesso de rotina. Se um utilizador tiver concedido condicionalmente acesso ao nível da rotina, não vê as respetivas rotinas no painel lateral do BigQuery. Como solução alternativa, conceda acesso ao nível do conjunto de dados.
- A vista
INFORMATION_SCHEMA.OBJECT_PRIVILEGESnão mostra os controlos de acesso para rotinas.
Antes de começar
Conceda funções de gestão de identidade e acesso (IAM) que dão aos utilizadores as autorizações necessárias para realizar cada tarefa neste documento.
Funções necessárias
Para obter as autorizações de que precisa para modificar as políticas de IAM para recursos, peça ao seu administrador que lhe conceda a função de IAM proprietário de dados do BigQuery (roles/bigquery.dataOwner) no projeto.
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Esta função predefinida contém as autorizações necessárias para modificar as políticas de IAM para recursos. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:
Autorizações necessárias
São necessárias as seguintes autorizações para modificar as políticas de IAM para recursos:
-
Para obter a política de acesso de um conjunto de dados:
bigquery.datasets.get -
Para definir a política de acesso de um conjunto de dados:
bigquery.datasets.update -
Para obter a política de acesso de um conjunto de dados (Google Cloud apenas na consola):
bigquery.datasets.getIamPolicy -
Para definir a política de acesso de um conjunto de dados (apenas na consola):
bigquery.datasets.setIamPolicy -
Para obter a política de uma tabela ou de uma vista:
bigquery.tables.getIamPolicy -
Para definir uma política de tabela ou vista:
bigquery.tables.setIamPolicy -
Para obter 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 tarefas SQL do BigQuery (opcional):
bigquery.jobs.create
Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.
Trabalhe com controlos de acesso ao conjunto de dados
Pode conceder acesso a um conjunto de dados atribuindo a um principal do IAM uma função predefinida ou personalizada que determina o que o principal pode fazer com o conjunto de dados. Isto também é conhecido como anexar uma política de autorização a um recurso. Depois de conceder acesso, pode ver os controlos de acesso do conjunto de dados e revogar o acesso ao conjunto de dados.
Conceda acesso a um conjunto de dados
Não pode conceder acesso a um conjunto de dados quando o cria através da IU Web do BigQuery ou da ferramenta de linha de comandos bq. Primeiro, tem de criar o conjunto de dados e, em seguida, conceder-lhe acesso.
A API permite-lhe conceder acesso durante a criação do conjunto de dados chamando o
métododatasets.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 vistas, rotinas e modelos. Quando atribui uma função ao nível do projeto, a função e as respetivas autorizações são herdadas pelo conjunto de dados e pelos recursos do conjunto de dados. Da mesma forma, quando concede uma função ao nível do conjunto de dados, a função e as respetivas autorizações são herdadas pelos recursos no conjunto de dados.
Pode conceder acesso a um conjunto de dados concedendo uma autorização de função de IAM para aceder ao conjunto de dados ou concedendo acesso condicionalmente através de uma condição de IAM. Para mais informações sobre a concessão de acesso condicional, consulte o artigo Controle o acesso com as condições da IAM.
Para conceder a uma função do IAM acesso a um conjunto de dados sem usar condições, selecione uma das seguintes opções:
Consola
Aceda à página do BigQuery.
No painel esquerdo, clique em Explorador:

Se não vir o painel do lado esquerdo, clique em Expandir painel do lado esquerdo para o abrir.
No painel Explorador, expanda o seu projeto, clique em Conjuntos de dados e, de seguida, selecione um conjunto de dados.
Clique em Partilha > Autorizações.
Clique em Adicionar responsável.
No campo Novos diretores, introduza um diretor.
Na lista Selecionar uma função, selecione uma função predefinida ou uma função personalizada.
Clique em Guardar.
Para regressar às informações do conjunto de dados, clique em Fechar.
SQL
Para conceder aos principais acesso a conjuntos de dados, use a
GRANT declaração DCL:
Na Google Cloud consola, aceda à página BigQuery.
No editor de consultas, introduza a seguinte declaração:
GRANT `ROLE_LIST` ON SCHEMA RESOURCE_NAME TO "USER_LIST"
Substitua o seguinte:
ROLE_LIST: uma função ou uma lista de funções separadas por vírgulas que quer concederRESOURCE_NAME: o nome do conjunto de dados ao qual está a conceder acessoUSER_LIST: uma lista de utilizadores separada por vírgulas aos quais a função é concedidaPara ver uma lista de formatos válidos, consulte
user_list.
Clique em Executar.
Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.
O exemplo seguinte concede a função de visualizador 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 escrever as informações do conjunto de dados existente (incluindo os controlos de acesso) num ficheiro JSON, use o comando
bq show:bq show \ --format=prettyjson \ PROJECT_ID:DATASET > PATH_TO_FILE
Substitua o seguinte:
- PROJECT_ID: o ID do seu projeto
- DATASET: o nome do seu conjunto de dados
- PATH_TO_FILE: o caminho para o ficheiro JSON no seu computador local
Faça alterações à secção
accessdo ficheiro JSON. Pode adicionar a qualquer uma das entradasspecialGroup:projectOwners,projectWriters,projectReaderseallAuthenticatedUsers. Também pode adicionar qualquer um dos seguintes elementos:userByEmail,groupByEmailedomain.Por exemplo, a secção
accessde um ficheiro JSON de um conjunto de dados teria o seguinte aspeto:{ "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 updatee inclua o ficheiro JSON com a flag--source. Se o conjunto de dados estiver num projeto que não seja o seu projeto predefinido, 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:DATASETPara validar as alterações ao controlo de acesso, use novamente o comando
bq showsem escrever as informações num ficheiro:bq show --format=prettyjson PROJECT_ID:DATASET
- Inicie o Cloud Shell.
-
Defina o Google Cloud projeto predefinido onde quer aplicar as suas configurações do Terraform.
Só tem de executar este comando uma vez por projeto e pode executá-lo em qualquer diretório.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
As variáveis de ambiente são substituídas se definir valores explícitos no ficheiro de configuração do Terraform.
-
No Cloud Shell, crie um diretório e um novo ficheiro nesse diretório. O nome do ficheiro tem de ter a extensão
.tf, por exemplo,main.tf. Neste tutorial, o ficheiro é denominadomain.tf.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Se estiver a seguir um tutorial, pode copiar o código de exemplo em cada secção ou passo.
Copie o exemplo de código para o
main.tfcriado recentemente.Opcionalmente, copie o código do GitHub. Isto é recomendado quando o fragmento do Terraform faz parte de uma solução completa.
- Reveja e modifique os parâmetros de exemplo para aplicar ao seu ambiente.
- Guarde as alterações.
-
Inicialize o Terraform. Só tem de fazer isto uma vez por diretório.
terraform init
Opcionalmente, para usar a versão mais recente do fornecedor Google, inclua a opção
-upgrade:terraform init -upgrade
-
Reveja a configuração e verifique se os recursos que o Terraform vai criar ou
atualizar correspondem às suas expetativas:
terraform plan
Faça correções à configuração conforme necessário.
-
Aplique a configuração do Terraform executando o seguinte comando e introduzindo
yesno comando:terraform apply
Aguarde até que o Terraform apresente a mensagem "Apply complete!" (Aplicação concluída!).
- Abra o seu Google Cloud projeto para ver os resultados. Na Google Cloud consola, navegue para os seus recursos na IU para se certificar de que o Terraform os criou ou atualizou.
Terraform
Use os recursos
google_bigquery_dataset_iam para atualizar o acesso a um conjunto de dados.
Defina a política de acesso para um conjunto de dados
O exemplo seguinte mostra como usar o recurso google_bigquery_dataset_iam_policy para definir a política de IAM para o conjunto de dados mydataset. Esta ação 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 }
Defina a associação de funções para um conjunto de dados
O exemplo seguinte mostra como usar o recurso google_bigquery_dataset_iam_binding para definir a associação a uma determinada função para o conjunto de dados mydataset. Esta ação substitui qualquer registo de membro existente nessa função.
Outras funções na política IAM para o conjunto de dados
são preservadas:
# 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" ] }
Defina a associação de funções para um único principal
O exemplo seguinte mostra como usar o recurso google_bigquery_dataset_iam_member para atualizar a política de IAM do conjunto de dados mydataset para conceder uma função a um principal. A atualização desta política de IAM não afeta o acesso de outros responsáveis que tenham recebido essa função para o 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 num Google Cloud projeto, conclua os passos nas secções seguintes.
Prepare o Cloud Shell
Prepare o diretório
Cada ficheiro de configuração do Terraform tem de ter o seu próprio diretório (também denominado módulo raiz).
Aplique as alterações
API
Para aplicar controlos de acesso quando o conjunto de dados é criado, chame o método datasets.insert com um recurso de conjunto de dados definido.
Para atualizar os controlos de acesso, chame o método datasets.patch e use a propriedade access no recurso Dataset.
Uma vez que o método datasets.update substitui o recurso do conjunto de dados completo, o método datasets.patch é o preferencial para atualizar os controlos de acesso.
Ir
Antes de experimentar este exemplo, siga as Goinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Go BigQuery documentação de referência.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Defina a nova lista de acesso anexando a nova entrada à lista existente com o tipoDatasetMetadataToUpdate
. Em seguida, chame a função dataset.Update() para atualizar a propriedade.
Java
Antes de experimentar este exemplo, siga as Javainstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Java BigQuery documentação de referência.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Node.js
Antes de experimentar este exemplo, siga as Node.jsinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Node.js BigQuery documentação de referência.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Defina a nova lista de acesso anexando a nova entrada à lista existente através do método Dataset#metadata. Em seguida, chame a função Dataset#setMetadata() para atualizar a propriedade.Python
Antes de experimentar este exemplo, siga as Pythoninstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Python BigQuery documentação de referência.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Defina a propriedadedataset.access_entries com os controlos de acesso para um conjunto de dados. Em seguida, chame a função client.update_dataset() para atualizar a propriedade.
Funções predefinidas que concedem acesso a conjuntos de dados
Pode conceder às seguintes funções predefinidas de IAM acesso a um conjunto de dados.
| Função | Descrição |
|---|---|
Proprietário dos dados do BigQuery
(roles/bigquery.dataOwner) |
Quando concedida num conjunto de dados, esta função concede as seguintes autorizações:
|
Editor de dados do BigQuery
(roles/bigquery.dataEditor) |
Quando concedida num conjunto de dados, esta função concede as seguintes autorizações:
|
Visualizador de dados do BigQuery
(roles/bigquery.dataViewer) |
Quando concedida num conjunto de dados, esta função concede as seguintes autorizações:
|
Visualizador de metadados do BigQuery
(roles/bigquery.metadataViewer) |
Quando concedida num conjunto de dados, esta função concede as seguintes autorizações:
|
Autorizações do conjunto de dados
A maioria das autorizações que começam com bigquery.datasets aplica-se ao nível do conjunto de dados.
O bigquery.datasets.create não. Para criar conjuntos de dados, tem de conceder autorização bigquery.datasets.create a uma função no contentor principal, ou seja, o projeto.
A tabela seguinte apresenta todas as autorizações para conjuntos de dados e o recurso de nível mais baixo ao qual a autorização pode ser aplicada.
| Autorização | Recurso | Ação |
|---|---|---|
bigquery.datasets.create |
Projeto | Criar novos conjuntos de dados no projeto. |
bigquery.datasets.get |
Conjunto de dados | Obtenha metadados e controlos de acesso para o conjunto de dados. A visualização de autorizações na
consola também requer a autorização
bigquery.datasets.getIamPolicy. |
bigquery.datasets.getIamPolicy |
Conjunto de dados | Necessário pela consola para conceder ao utilizador autorização para obter os controlos de acesso de um conjunto de dados. Falha ao abrir. A consola também requer a autorização bigquery.datasets.get para ver o conjunto de dados. |
bigquery.datasets.update |
Conjunto de dados | Atualize os metadados e os controlos de acesso para o conjunto de dados. A atualização dos controlos de acesso na consola também requer a autorização bigquery.datasets.setIamPolicy.
|
bigquery.datasets.setIamPolicy |
Conjunto de dados | Obrigatório pela consola para conceder ao utilizador autorização para definir os controlos de acesso de um conjunto de dados. Falha ao abrir. A consola também requer a autorização bigquery.datasets.update para atualizar o conjunto de dados. |
bigquery.datasets.delete |
Conjunto de dados | Eliminar um conjunto de dados. |
bigquery.datasets.createTagBinding |
Conjunto de dados | Associe etiquetas ao conjunto de dados. |
bigquery.datasets.deleteTagBinding |
Conjunto de dados | Desassocie etiquetas do conjunto de dados. |
bigquery.datasets.listTagBindings |
Conjunto de dados | Liste as etiquetas do conjunto de dados. |
bigquery.datasets.listEffectiveTags |
Conjunto de dados | Apresentar uma lista de etiquetas eficazes (aplicadas e herdadas) para o conjunto de dados. |
bigquery.datasets.link |
Conjunto de dados | Crie um conjunto de dados associado. |
bigquery.datasets.listSharedDatasetUsage |
Projeto | Apresenta estatísticas de utilização de conjuntos de dados partilhados para conjuntos de dados aos quais tem acesso no projeto. Esta autorização é necessária para consultar a vista
INFORMATION_SCHEMA.SHARED_DATASET_USAGE. |
Veja os controlos de acesso de um conjunto de dados
Pode ver os controlos de acesso definidos explicitamente para um conjunto de dados escolhendo uma das seguintes opções. Para ver funções herdadas, para um conjunto de dados, use a IU Web do BigQuery.
Consola
Aceda à página do BigQuery.
No painel esquerdo, clique em Explorador:

No painel Explorador, expanda o seu projeto, clique em Conjuntos de dados e, de seguida, selecione um conjunto de dados.
Clique em Partilhar > Autorizações.
Os controlos de acesso do conjunto de dados aparecem no painel Autorizaçõ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 obter uma política existente e enviá-la para um ficheiro local em JSON, use o comando
bq showno Cloud Shell:bq show \ --format=prettyjson \ PROJECT_ID:DATASET > PATH_TO_FILE
Substitua o seguinte:
- PROJECT_ID: o ID do seu projeto
- DATASET: o nome do seu conjunto de dados
- PATH_TO_FILE: o caminho para o ficheiro JSON no seu computador local
Na Google Cloud consola, aceda à página BigQuery.
No editor de consultas, introduza a seguinte declaração:
SELECT COLUMN_LIST FROM PROJECT_ID.`region-REGION`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES WHERE object_name = "DATASET";
Substitua o seguinte:
- COLUMN_LIST: uma lista de colunas separadas por vírgulas da vista
INFORMATION_SCHEMA.OBJECT_PRIVILEGES - PROJECT_ID: o ID do seu projeto
- REGION: um qualificador de região
- DATASET: o nome de um conjunto de dados no seu projeto
- COLUMN_LIST: uma lista de colunas separadas por vírgulas da vista
Clique em Executar.
SQL
Consulte a INFORMATION_SCHEMA.OBJECT_PRIVILEGES vista.
As consultas para obter controlos de acesso para um conjunto de dados têm de especificar o
object_name.
Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.
Exemplo:
Esta consulta obtém controlos de acesso para mydataset.
SELECT object_name, privilege_type, grantee FROM my_project.`region-us`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES WHERE object_name = "mydataset";
O resultado deve ter o seguinte aspeto:
+------------------+-----------------------------+-------------------------+
| object_name | privilege_type | grantee |
+------------------+-----------------------------+-------------------------+
| mydataset | roles/bigquery.dataOwner | projectOwner:myproject |
| mydataset | roles/bigquery.dataViwer | user:user@example.com |
+------------------+-----------------------------+-------------------------+
API
Para ver os controlos de acesso de um conjunto de dados, chame o método
datasets.get
com um recurso
dataset definido.
Os controlos de acesso aparecem na propriedade access do recurso dataset.
Ir
Antes de experimentar este exemplo, siga as Goinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Go BigQuery documentação de referência.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Chama a funçãoclient.Dataset().Metadata(). A política de acesso está disponível na propriedade Access.