Resolver problemas com permissões do IAM no BigQuery

Neste documento, mostramos como resolver problemas com permissões do Identity and Access Management (IAM) no BigQuery. Problemas de permissão do IAM geralmente resultam em erros Access Denied, como estes:

  • Access Denied: Project PROJECT_ID: User does not have bigquery.jobs.create permission in project PROJECT_ID.
  • Access Denied: Project PROJECT_ID: User does not have bigquery.datasets.get permission on dataset DATASET.
  • User does not have permission to query table PROJECT_ID:DATASET.TABLE.
  • Access Denied: Table PROJECT_ID:DATASET.TABLE: User does not have permission to query table PROJECT_ID:DATASET.TABLE, or perhaps it does not exist.
  • Access Denied: User PRINCIPAL does not have permission to perform bigquery.tables.getData on resource 'projects/PROJECT_ID/datasets/DATASET/tables/TABLE'.

Antes de começar

Reúna informações sobre o problema

A primeira etapa para resolver um problema de acesso a recursos é determinar a permissão ausente, o principal do IAM que teve o acesso negado e o recurso que o principal estava tentando acessar.

Receber informações do histórico de erros ou jobs

Para informações sobre o principal, o recurso e as permissões, examine a saída da ferramenta de linha de comando bq, a resposta da API ou o BigQuery no console Google Cloud .

Por exemplo, se você tentar executar uma consulta com permissões insuficientes, um erro como o seguinte vai aparecer na guia Informações do job da seção Resultados da consulta do console Google Cloud .

Um erro de acesso negado na guia "Informações do job" da seção "Resultados da consulta".

Examine o erro para determinar o principal, o recurso e as permissões.

Em alguns casos, é possível solicitar as permissões ausentes diretamente na mensagem de erro. Para mais informações, consulte Resolver problemas de mensagens de erro de permissão na documentação do IAM.

Receber informações dos registros de auditoria do Cloud

Se a mensagem de erro for genérica, estiver faltando informações ou se a ação falhar em um processo em segundo plano, use o Explorador de registros dos Registros de auditoria do Cloud para receber informações sobre o erro.

  1. No console do Google Cloud , acesse a página Análise de registros.

    Acessar o Explorador de registros

    Ou, no menu de navegação, escolha Monitoring > Análise de registros.

  2. No Explorador de registros, escolha Registros do projeto como o escopo dos registros.

  3. Na janela de consulta, insira o seguinte comando para receber erros relacionados a permissões dos registros de acesso a dados do BigQuery:

    resource.type="bigquery_resource" AND
    logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access" AND
    protoPayload.status.message:"Access Denied" OR
    protoPayload.status.message:"Permission denied" OR
    protoPayload.status.code=7

    Substitua PROJECT_ID pela ID do seu projeto.

  4. Nos resultados da consulta, expanda a entrada de registro que corresponde à operação com falha.

  5. Na seção protoPayload, expanda a matriz authorizationInfo e cada nó dela.authorizationInfo

    A matriz authorizationInfo mostra todas as verificações de permissão realizadas durante a chamada de API.

  6. Para saber a causa do erro, procure a entrada granted: false. A entrada granted: false mostra as seguintes informações:

    • permission: a string de permissão do IAM que foi verificada. Por exemplo, bigquery.tables.getData.
    • resource: o nome totalmente qualificado do recurso que o principal tentou acessar. Por exemplo, projects/myproject/datasets/mydataset/tables/mytable.
    • principalEmail (se disponível): referenciado em protoPayload.authenticationInfo, esse é o principal que tentou a ação.

    A seção "authorizationInfo" do protoPayload que mostra a permissão, o recurso e o principalEmail.

Usar o Policy Analyzer para políticas de permissão

Com a Análise de políticas para políticas de permissão, você descobre quais principais do IAM têm qual acesso a quais recursos do BigQuery com base nas políticas de permissão do IAM.

Depois de reunir informações sobre o erro de permissões, use a Análise de políticas para entender por que o principal não tem o acesso necessário. Essa ferramenta analisa todas as políticas relevantes, as associações em grupos do Google e a herança de recursos principais, como um projeto, uma pasta e sua organização.

Para usar a Análise de políticas em políticas de permissão, crie uma consulta de análise, especifique um escopo para a análise e execute a consulta.

  1. No console Google Cloud , acesse a página Policy Analyzer.

    Acessar a Análise de políticas

    Ou, no menu de navegação, escolha IAM e administrador > Analisador de políticas.

  2. Clique em Criar consulta personalizada.

  3. Na página Configurar sua consulta, insira as informações coletadas anteriormente:

    1. Na seção Selecionar o escopo, no campo Selecionar escopo da consulta, verifique se o projeto atual aparece ou clique em Procurar para escolher outro recurso.

    2. Na seção Definir os parâmetros de consulta, em Parâmetro 1, escolha Principal e, no campo Principal, insira o e-mail do usuário, grupo ou conta de serviço.

    3. Clique em Adicionar parâmetro.

    4. Para Parâmetro 2, escolha Permissão. No campo Permissão, clique em Selecionar, escolha a permissão do BigQuery e clique em Adicionar. Por exemplo, selecione bigquery.tables.getData.

    5. Clique em Adicionar parâmetro.

    6. Em Parâmetro 3, escolha Recurso e, no campo Recurso, insira o nome totalmente qualificado do recurso. O nome do recurso precisa incluir o prefixo do serviço, como nos exemplos a seguir:

      • Projeto do BigQuery: //cloudresourcemanager.googleapis.com/projects/PROJECT_ID
      • Conjunto de dados do BigQuery: //bigquery.googleapis.com/projects/PROJECT_ID/datasets/DATASET
      • Tabela do BigQuery: //bigquery.googleapis.com/projects/PROJECT/datasets/DATASET/tables/TABLE
  4. No painel Consulta personalizada, clique em Analisar > Executar consulta.

  5. Analise os resultados da consulta. O resultado pode ser um dos seguintes:

    • Uma lista vazia. Nenhum resultado confirma que o principal não tem a permissão necessária. Você precisa conceder ao principal uma função que forneça as permissões corretas.
    • Um ou mais resultados. Se o analisador encontrar uma política de permissão, algum tipo de acesso vai existir. Clique em Ver vinculação em cada resultado para conferir os papéis que dão acesso ao recurso de que o principal é membro. A vinculação de política mostra se o acesso é concedido por associação ou herança de grupo ou se é negado por uma condição do IAM ou uma política de negação do IAM.

Encontrar o papel do IAM correto que concede as permissões necessárias

Depois de confirmar que o principal não tem acesso suficiente, a próxima etapa é encontrar o papel predefinido ou personalizado do IAM adequado que concede as permissões necessárias. O papel escolhido precisa seguir o princípio de privilégio mínimo.

Se a organização usa papéis personalizados, é possível encontrar o papel correto listando todos os papéis personalizados criados no projeto ou na organização. Por exemplo, no console Google Cloud , na página Papéis, é possível filtrar a lista por Tipo:Personalizado para ver apenas papéis personalizados.

Para encontrar o papel predefinido correto do IAM, siga estas etapas.

  1. Abra a seção de permissões do BigQuery na página de papéis e permissões do IAM do BigQuery.

  2. Na barra de pesquisa Inserir uma permissão, digite a permissão que você recuperou da mensagem de erro, do histórico de jobs ou dos registros de auditoria. Por exemplo, bigquery.tables.getData.

    Os resultados da pesquisa mostram todos os papéis predefinidos do BigQuery que concedem a permissão.

  3. Aplique o princípio de privilégio mínimo: na lista de papéis, escolha o menos permissivo que concede as permissões necessárias. Por exemplo, se você pesquisou bigquery.tables.getData para conceder a capacidade de consultar dados de tabelas, o Leitor de dados do BigQuery é o papel menos permissivo que concede essa permissão.

  4. Conceda ao principal o papel adequado. Para informações sobre como conceder um papel do IAM a um recurso do BigQuery, consulte Controlar o acesso aos recursos com o IAM.

A seguir