Introdução à segurança no nível da linha do BigQuery

Nesta página, explicamos o conceito de segurança no nível da linha, como ele funciona no BigQuery, quando usar a segurança no nível da linha para proteger dados e outros detalhes.

O que é segurança no nível da linha?

A segurança no nível da linha permite filtrar dados e acessar linhas específicas em uma tabela, com base nas condições qualificadas de usuário.

O BigQuery já é compatível com controles de acesso nos níveis de projeto, conjunto de dados e tabela, além da segurança no nível da coluna usando tags de política. A segurança no nível da linha amplia o princípio de privilégio mínimo ao ativar o controle de acesso detalhado a um subconjunto de dados em uma tabela do BigQuery, usando políticas de acesso no nível da linha.

Uma tabela pode ter várias políticas de acesso no nível da linha. As políticas de acesso no nível da linha podem coexistir em uma tabela com segurança no nível da coluna, bem como controles de acesso no nível da tabela, do conjunto de dados e do projeto.

Como funciona a segurança no nível da linha

Em um nível alto, a segurança no nível da linha envolve a criação de políticas de acesso no nível da linha em uma tabela de destino do BigQuery. Essa política atua como um filtro para ocultar ou exibir determinadas linhas de dados, dependendo se um usuário ou grupo está em uma lista de permissões.

Um usuário autorizado, com os papéis do Identity and Access Management (IAM) BigQuery Admin ou BigQuery DataOwner, pode criar políticas de acesso no nível da linha em uma tabela do BigQuery.

Ao criar uma política de acesso no nível da linha, você especifica a tabela pelo nome e quais usuários ou grupos (chamados de grantee-list) terão acesso a determinados dados da linha. A política também inclui os dados que você quer filtrar, chamados de filter_expression. O filter_expression funciona como uma cláusula WHERE em uma consulta típica.

Para instruções sobre como criar e usar uma política de acesso no nível da linha, consulte Como trabalhar com a segurança no nível da linha.

Consulte a referência da DDL para ver a sintaxe completa, o uso e as opções ao criar políticas de acesso no nível da linha.

Casos de uso de exemplo

Como filtrar dados de linha com base na região

Considere o caso em que uma tabela contém linhas pertencentes a diferentes regiões, indicadas pela coluna region na tabela dataset1.table1.

A segurança no nível da linha permite que um administrador ou proprietário de dados implemente políticas, como "Os usuários do group:apac só podem ver parceiros da região APAC (Ásia-Pacífico)".

Caso de uso de segurança no nível da linha para regiões

O comportamento resultante é que os usuários no grupo sales-apac@example.com podem visualizar apenas as linhas em que Region = "APAC". Da mesma forma, os usuários do grupo sales-us@example.com podem visualizar apenas linhas na região US. Os usuários que não estão nos grupos APAC ou US não veem linhas.

A política de acesso no nível da linha chamada us_filter concede acesso a várias entidades, incluindo o vendedor principal dos EUA jon@example.com, que agora pode acessar as linhas pertencentes à região US.

Como filtrar dados de linha com base em dados confidenciais

Agora, considere um caso de uso diferente, em que temos uma tabela de dados salariais.

Caso de uso de segurança no nível da linha para salários

O grantee_list restringe a consulta a membros do domínio da empresa. Além disso, o uso da função SESSION_USER() restringe ainda mais o acesso apenas às linhas que pertencem ao usuário que executa a consulta, com base no próprio endereço de e-mail dele. Neste caso, é jim@example.com.

Quando usar a segurança no nível da linha em comparação com outros métodos

As visualizações autorizadas, políticas de acesso no nível da linha e o armazenamento de dados em tabelas separadas fornecem diferentes níveis de segurança, desempenho e conveniência. Escolher o mecanismo correto para o caso de uso é importante para garantir o nível adequado de segurança para os dados.

Comparação com visualizações autorizadas: vulnerabilidades

A segurança no nível da linha e a aplicação do acesso no nível da linha com uma visualização autorizada podem ter vulnerabilidades se usadas incorretamente.

Ao usar visualizações autorizadas ou políticas de acesso no nível da linha para segurança no nível da linha, recomendamos que você monitore qualquer atividade suspeita usando a geração de registros de auditoria.

  • Consultas cuidadosamente elaboradas podem vazar informações em mensagens de erro. Por exemplo, uma consulta criada para acionar uma divisão por zero em um valor específico pode revelar a presença desse valor, mesmo quando ele seria excluído pela definição de visualização.

  • Outros canais secundários, como a duração da consulta, podem vazar informações sobre as linhas que estão na borda de um fragmento de armazenamento. Esses ataques provavelmente exigiriam algum conhecimento da fragmentação da tabela ou de um grande número de consultas.

Para mais informações sobre como evitar esses ataques de canal lateral, consulte Limitações de segurança e Práticas recomendadas para segurança no nível da linha no BigQuery.

Comparação de visualizações autorizadas, segurança no nível da linha e tabelas separadas

A tabela a seguir compara o desempenho e a segurança de visualizações autorizadas, políticas de acesso no nível da linha e tabelas separadas.

Segurança Recomendado para
Visualizações
autorizadas
Vulnerável a consultas cuidadosamente elaboradas, duração da consulta e outros tipos de ataque de canal lateral. Quando a flexibilidade e o desempenho são mais importantes.

Exemplo: compartilhar dados no mesmo grupo de trabalho.
Políticas de acesso no nível da linha Vulnerável a consultas cuidadosamente elaboradas e ataques de canal lateral de duração de consulta. Quando for conveniente que todos os usuários consultem a mesma tabela. Por exemplo, quando todos compartilham o mesmo painel, mas alguns usuários têm acesso a mais dados.

Para oferecer mais segurança às visualizações.

Exemplo: como compartilhar frações de tabela na organização.
Tabelas separadas Isolamento total. Quando o isolamento é fundamental. Por exemplo, quando o número total de linhas precisa ser secreto.

Exemplo: o compartilhamento de dados fora da organização, como com fornecedores e parceiros terceirizados.

Como criar e gerenciar políticas de acesso no nível da linha

Para informações sobre como criar, atualizar (criar novamente), listar, visualizar e excluir políticas de acesso no nível da linha em uma tabela, bem como detalhes sobre como consultar tabelas com políticas de acesso no nível da linha, consulte Como trabalhar com a segurança de acesso no nível da linha.

Cotas

Para mais informações sobre cotas e limites para segurança no nível da linha, consulte Cotas e limites do BigQuery.

Preços

A segurança no nível da linha está incluída no BigQuery sem custos.

Os custos de faturamento para acessar a política de acesso no nível da linha de uma tabela são semelhantes aos de uma consulta. No entanto, as políticas de acesso no nível da linha podem afetar indiretamente o número de bytes processados das maneiras a seguir.

  • Quando uma consulta é executada em uma tabela com uma política de acesso no nível da linha, os bytes faturados são calculados da mesma maneira que se você tivesse composto uma consulta idêntica com uma cláusula WHERE, em vez do expressão de filtro.
  • Os filtros da política de acesso no nível da linha não participam da remoção de tabelas particionadas e em cluster.

Para mais informações sobre os preços de consulta do BigQuery, consulte Preços do BigQuery.

Limitações

A segurança no nível da linha está sujeita às limitações a seguir.

Limitações de desempenho

Para mais informações sobre como a segurança no nível da linha interage com alguns recursos e serviços do BigQuery, consulte Como usar a segurança no nível da linha com outros recursos do BigQuery.

Limitações de segurança

Exemplo

Digamos que você tenha uma tabela com informações de receita. Você protege esses dados confidenciais com uma política de acesso no nível da linha para filtrar linhas com base na unidade de negócios. Mesmo com a existência de um predicado de filtro de segurança para impedir que um usuário com acesso a essa tabela consulte diretamente as linhas protegidas, é possível que esse usuário extraia as informações de receita de outras unidades de negócios usando consultas repetidas e cuidadosamente elaboradas e observando as mensagens de erro de consulta resultantes.

  • Especificamente, um usuário mal-intencionado com acesso à tabela subjacente pode derivar os valores de linhas protegidas quando a consulta retorna uma exceção de divisão por zero.
  • Uma exceção de divisão por zero resulta de uma consulta, como a seguinte: SELECT * FROM dataset.table WHERE 1/(100000-revenue) = 1. O resultado pode permitir que o usuário mal-intencionado saiba que a receita de US$ 100.000 existe na tabela.
  • Esse tipo de ataque geralmente requer um grande número de tentativas repetidas em relação a uma tabela com segurança no nível da linha. Recomendamos que os administradores monitorem nos registros de auditoria do Cloud atividades suspeitas em tabelas com segurança no nível da linha.

Para mais informações sobre como limitar ataques de canal lateral, consulte Práticas recomendadas para segurança no nível da linha no BigQuery.

Outras limitações

  • As políticas de acesso de linha não são compatíveis com o SQL legado. As consultas de tabelas com políticas de acesso no nível da linha precisam usar o SQL padrão. As consultas do SQL legado são rejeitadas com um erro.

  • Alguns recursos do BigQuery não são compatíveis com a segurança no nível da linha. Para mais informações, consulte Como usar a segurança no nível da linha.

  • Operações sem consulta, incluindo jobs de conta de serviço, que precisam de acesso total aos dados da tabela, podem usar a segurança no nível da linha com o "filtro verdadeiro". Exemplos incluem cópia de tabela, fluxos de trabalho do Dataproc e muito mais. Para mais informações, consulte Como usar a segurança no nível da linha.

  • A criação, substituição ou exclusão de políticas de acesso no nível da linha precisa ser executada com instruções DDL. É possível listar e visualizar políticas de acesso no nível da linha no Console do Cloud ou pela ferramenta de linha de comando bq.

Monitoramento e geração de registros de auditoria

Quando os dados em uma tabela com uma ou mais políticas de acesso no nível da linha são lidos, as políticas de acesso no nível da linha autorizadas para o acesso de leitura aparecem nas informações de autorização do IAM dessa solicitação de leitura.

A criação e a exclusão de políticas de acesso no nível da linha são registradas por auditoria e podem ser acessadas pelo Cloud Logging. Os registros de auditoria incluem o nome da política de acesso no nível da linha. No entanto, as definições filter_expression e grantee_list de uma política de acesso no nível da linha são omitidas dos registros, porque podem conter informações confidenciais ou do usuário. A listagem e a visualização de políticas de acesso no nível da linha não são registradas em auditoria.

Para mais informações sobre a geração de registros no BigQuery, consulte Introdução ao monitoramento do BigQuery.

Para mais informações sobre a geração de registros no Google Cloud, consulte Cloud Logging.

A seguir