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

Neste documento, 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 de qualificação do 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, assim 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. Essas políticas funcionam como filtros para ocultar ou exibir determinadas linhas de dados, dependendo de se um usuário ou um grupo está em uma lista de permissões. O acesso de todos os usuários ou grupos que não estiverem incluídos especificamente na lista de permissões será negado.

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 por nome e quais usuários ou grupos (chamados de grantee-list) podem acessar 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

Filtrar dados da linha com base na região

Considere o caso em que uma tabela dataset1.table1 contém linhas pertencentes a regiões diferentes (denotadas pela coluna region).

A segurança no nível da linha permite que um administrador ou proprietário de dados implemente políticas, como "Os usuários no group:apac só podem acessar 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.

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.

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 Práticas recomendadas para segurança no nível da linha.

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.

Método Considerações sobre segurança Recomendação
Visualizações
autorizadas
Recomendado para flexibilidade. Pode ser vulnerável a consultas criadas com cuidado, durações de consulta e outros tipos de ataques de canal lateral. As visualizações autorizadas são uma boa opção quando você precisa compartilhar dados com outras pessoas e a flexibilidade e o desempenho são importantes. Por exemplo, é possível usar visualizações autorizadas para compartilhar dados no seu grupo de trabalho.
Políticas de acesso no nível da linha Recomendado para equilibrar flexibilidade e segurança. pode ser vulnerável a ataques de canal lateral da duração da consulta (em inglês). As políticas de acesso no nível da linha são uma boa opção quando você precisa compartilhar dados com outras pessoas e quer fornecer segurança adicional a visualizações ou frações da tabela. Por exemplo, é possível usar políticas de acesso no nível da linha para compartilhar dados com pessoas que usam o mesmo painel, mesmo que algumas pessoas tenham acesso a mais dados do que outras.
Tabelas separadas Recomendado por questões de segurança. Os usuários não podem inferir dados sem acessar a tabela. Tabelas separadas são uma boa opção quando você precisa compartilhar dados com outras pessoas e manter os dados isolados. Por exemplo, é possível usar tabelas separadas para compartilhar dados com parceiros e fornecedores terceirizados, quando o número total de linhas precisa ser secreto.

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

Para informações sobre como criar, atualizar (recriar), listar, visualizar e excluir políticas de acesso no nível da linha em uma tabela e 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. No entanto, uma política de acesso no nível da linha pode afetar o custo de executar uma consulta das seguintes maneiras:

  • Se uma política de acesso no nível da linha impedir que um usuário acesse uma linha em uma consulta, essa linha não será processada ou faturada.

  • Os filtros de política de acesso no nível da linha não participam da remoção de consultas em tabelas particionadas e em cluster. Isso significa que um filtro de segurança no nível da linha pode fazer com que mais dados sejam processados do que se não fossem usados.

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

Limitações

Para informações sobre limites de segurança no nível da linha, consulte Limites de segurança no nível da linha do BigQuery. As seções a seguir documentam outras limitações de segurança no nível da linha.

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.

Outras limitações

  • Esse recurso pode não estar disponível ao usar reservas criadas com determinadas edições do BigQuery. Para mais informações sobre quais recursos estão ativados em cada edição, consulte Introdução às edições do BigQuery.

  • 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 GoogleSQL. As consultas do SQL legado são rejeitadas com um erro.

  • Não é possível aplicar políticas de acesso no nível da linha em colunas JSON.

  • 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 que não sejam de consulta, incluindo jobs de conta de serviço e que precisam de acesso total aos dados da tabela podem usar a segurança no nível da linha com o filtro TRUE. 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 Google Cloud ou pela ferramenta de linha de comando bq .

  • A amostragem de tabela não é compatível com a segurança no nível da linha.

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