DEV Community

Cover image for Classificação e controle de acesso a dados sensíveis em Data Lake no GCP
Ronan
Ronan

Posted on

Classificação e controle de acesso a dados sensíveis em Data Lake no GCP

Introdução

Contexto

Vivemos em tempos onde dados valem ouro e são inúmeras as ferramentas, plataformas e tecnologias para a produção e gerenciamento de grandes quantidades de dados. Porém, também vivemos em tempos onde a responsabilidade sobre a propriedade de um determinado dado vem sendo levada cada vez mais em consideração haja visto avanços em leis de proteção de dados como LGPD e GDPR trazendo mais alguns desafios para quem cuida de repositórios de dados (Data Lake).

É importante ressaltar que não existe uma bala de prata, ou seja, não existe uma única solução para suportar questões de leis de proteção de dados à repositórios de dados, sendo assim, recomenda-se considerar tais leis ao conceber ou adequar uma solução de gerenciamento e armazenamento de dados de larga escala.

Mais especificamente no Brasil, a Lei Geral de Proteção de Dados - LGPD contempla os seguintes princípios: finalidade, adequação, necessidade, livre acesso, qualidade dos dados, transparência, segurança, prevenção, não discriminação, responsabilização e prestação de contas. Dentre estes importantes princípios, neste artigo, praticaremos principalmente:

  • Segurança: utilização de medidas técnicas e administrativas aptas a proteger os dados pessoais de acessos não autorizados e de situações acidentais ou ilícitas de destruição, perda, alteração, comunicação ou difusão;
  • Prevenção: adoção de medidas para prevenir a ocorrência de danos em virtude do tratamento de dados pessoais;

Glossário

Nesse artigo exploraremos uma solução onde teremos produção, processamento, classificação, restrição e verificação de exposição de dados. Para isso, utilizaremos as seguintes ferramentas oferecidas pela Google Cloud Platform - Plataforma de Cloud do Google (GCP):

  • Pub/Sub: Serviço de mensagens gerenciado, permite a comunicação entre produtores e consumidores de forma independente.
  • Dataflow: Serviço gerenciado para processamento de dados (stream e batch).
  • BigQuery: Serviço gerenciado de data warehouse analítico.
  • Data Catalog: Serviço de gerenciamento de metadados que permite acesso, descoberta e compreensão fácil de dados.
  • Data Loss Prevention - Prevenção contra perda de dados (DLP): Serviço que fornece uma plataforma de inspeção, classificação e desidentificação de dados sensíveis.
  • Cloud SDK: Conjunto de ferramentas para gerenciar recursos do GCP, por exemplo comandos: gcloud e bq.

Solução-exemplo

Diagrama

Alt Text

  1. Eventos (JSON) serão publicados em um tópico do Pub/Sub.
  2. Tais eventos serão processados por uma pipeline do Dataflow que irá persistir os dados no BigQuery.
  3. Serão realizadas consultas aos dados no BigQuery.
  4. Realizaremos verificações para levantar possíveis exposições de dados sensíveis utilizando Data Catalog e Data Loss Prevention.

Implementação

Requisitos

A fim de garantir a correta execução dos comandos seguintes, certifique-se de:

Configure o gcloud para utilizar seu projeto:

gcloud config set project your_project_id
Enter fullscreen mode Exit fullscreen mode

Produzindo eventos

Para produção de eventos vamos publicar mensagens em formato JSON em um tópico do PubSub, para isso vamos:

  • Criar o tópico test-input-topic:
gcloud pubsub topics create test-input-topic
Enter fullscreen mode Exit fullscreen mode
  • Criar a inscrição test-input-subscription:
gcloud pubsub subscriptions create test-input-subscription --topic=test-input-topic
Enter fullscreen mode Exit fullscreen mode
  • Enviar um evento em formato JSON:
gcloud pubsub topics publish test-input-topic --message "{\"id\":2, \"nome\": \"Mary\", \"idade\": 2, \"email\": \"mary@email.com\"}"
Enter fullscreen mode Exit fullscreen mode

Classificando dados sensíveis

  • Acesse Data Catalog - Tags de política no console
  • Clique em Criar
  • Em Nome da Taxonomia preencha Dados sensíveis de usuário
  • Em Tags de política/Nome da tag de política preencha Idade
  • Clique em Salvar
  • Copie o ID da tag gerada, ela segue o seguinte padrão:
projects/your_project_id/locations/us/taxonomies/taxonomy_id/policyTags/tag_id
Enter fullscreen mode Exit fullscreen mode
  • Ative o check Aplicar controle de acesso
  • Clique em ATIVAR CONTROLE DE ACESSO

Criando tabelas

  • Criar conjunto de dados (dataset):
bq mk test_dataset
Enter fullscreen mode Exit fullscreen mode
  • Criar tabela:
echo '[
    {"name": "id", "type": "INTEGER"},
    {"name": "nome", "type": "STRING"},
    {"name": "email", "type": "STRING"},
    {
        "name": "idade", 
        "type": "INTEGER",
        "policyTags": {
            "names": ["projects/your_project_id/locations/us/taxonomies/taxonomy_id/policyTags/tag_id"]
        }
    }
]' > schema.json
Enter fullscreen mode Exit fullscreen mode
bq mk -t test_dataset.test_table schema.json
Enter fullscreen mode Exit fullscreen mode

Processando dados

gcloud dataflow jobs run test-pipeline \
--parameters inputSubscription=projects/your_project_id/subscriptions/test-input-subscription,outputTableSpec=your_project_id:test_dataset.test_table \
--gcs-location gs://dataflow-templates-us-central1/latest/PubSub_Subscription_to_BigQuery
Enter fullscreen mode Exit fullscreen mode

Consultando dados

Ao executar o comando:

bq query --nouse_legacy_sql 'SELECT * from `your_project_id.test_dataset.test_table`'
Enter fullscreen mode Exit fullscreen mode

É esperado receber um erro contendo a seguinte mensagem:

BigQuery: User does not have permission to access policy tag "Dados sensíveis de usuário : Idade" on column your_project_id.test_dataset.test_table.idade.
Enter fullscreen mode Exit fullscreen mode

O erro apresentado acontece pois o usuário utilizado, mesmo que proprietário do projeto, não possui permissão de acesso à tag Dados sensíveis de usuário : Idade. Para acessar as informações que não possuem restrição, basta especificar as colunas desejadas, por exemplo:

bq query --nouse_legacy_sql 'SELECT id, nome, email from `your_project_id.test_dataset.test_table`'
Enter fullscreen mode Exit fullscreen mode

Vamos adicionar a permissão para seu usuário e executar novamente a consulta inicial:

  1. Acesse Data Catalog - Tags de política no console
  2. Selecione a tag Dados sensíveis de usuário
  3. Clique em MOSTRAR PAINEL DE INFORMAÇÕES do lado superior direito, se houver
  4. Clique botão ADICIONAR MEMBRO
  5. No campo Novos Membros, digite seu email, o mesmo utilizado da conta GCP
  6. Em Selecionar Papel selecione Catálogo de dados > Leitor de controle refinado
  7. Clique em SALVAR
  8. Do terminal, agora será possível realizar a consulta e ler a coluna idade:
bq query --nouse_legacy_sql 'SELECT * from `your_project_id.test_dataset.test_table`'
Enter fullscreen mode Exit fullscreen mode

Verificando exposição de dados sensíveis

Até aqui, trabalhamos com dados controlados e com um esquema de dados previamente construído para classificar uma coluna como sensível. Porém esse cenário didático e portanto mais simples, pode não refletir a realidade de um Data Lake que muitas vezes conta com: uma massa grande de eventos distintos, com esquemas e conteúdos diferentes, com colunas dinamicamente criadas e muitos outros casos que naturalmente não são suportados pela dinâmica previamente estabelecida.

  • Acesse o painel de DLP - Prevenção contra perda de dados no console.
  • Preencha ID do job com: inspecao-dados-sensiveis
  • Em Tipo de armazenamento selecione BigQuery
  • Preencha:
    • ID do projeto com seu projeto: your_project_id
    • ID do conjunto de dados: test_dataset
    • ID da tabela: test_table
  • Na seção Campos excluídos, preencha o campo com idade
  • Clique em CONTINUAR
  • Por fins de custos, vamos restringir a inspeção somente a emails expostos, clique em GERENCIAR INFOTYPES
  • Selecione somente EMAIL_ADDRESS e clique em CONCLUÍDO
  • Novamente clique em CONTINUAR
  • Selecione Publicar no Catálogo de dados
  • Clique em CONTINUAR
  • Clique em Criar e aguarde a execução da inspeção
  • Acesse Data Catalog no console
  • No campo de busca, pesquise por test_table
  • Selecione o respectivo registro:
test_table 
Dataset: test_dataset
Enter fullscreen mode Exit fullscreen mode
  • Ao verificar o relatório da inspeção realizada, podemos constatar que foi localizado um campo do tipo EMAIL_ADDRESS (InfoType EMAIL_ADDRESS count: 1).

Alt Text

Essa é uma forma de inspecionar os dados em busca de informações sensíveis, lembrando que no exemplo, por fins de custos, utilizamos somente o tipo de identificador EMAIL_ADDRESS, porém existem mais de 140 tipos diferentes de identificadores pré-definidos, além da opção de criar identificadores customizáveis, usando por exemplo, expressões regulares (regex).

Indo além

Uma vez cientes dos recursos oferecidos pela tríade BigQuery, Data Catalog e DLP, abrem-se oportunidades de explorar cenários mais amplos e ricos. Existem, por exemplo, cenários de identificação e aplicação automática de tags no banco de dados: How to Create Data Catalog tags by inspecting all your BigQuery data with Cloud Data Loss Prevention.

Pontos Principais

  • Se possível, trabalhar com mensagens ou eventos que não contenham dados sensíveis de usuários, por exemplo: ao invés de usar email, usar o ID.
  • Caso seja necessário a utilização de dados sensíveis, restringir e controlar o acesso.
  • Considerar casos de pedidos de remoção de dados na solução, por exemplo: centralizar dados sensíveis em tabelas-chaves e utilizar referências para tais registros em outras tabelas. Assim, em caso de pedido de remoção, basta alterar a tabela-chave.
  • Se possível, programar inspeções em busca de dados sensíveis, por exemplo: Programando uma verificação de inspeção do Cloud DLP.
  • Considerar leis de proteção de dados no desenho da solução de backup.

Conclusão

Ao avaliar quais ferramentas e mesma quais funcionalidades farão parte de uma solução, é altamente recomendado o levantamento de custos previamente. Para isso o GCP oferece uma calculadora muito útil. Passamos por diversas ferramentas, porém não usufruímos de todos as funcionalidades disponíveis na plataforma, entre essas, um exemplo que vale ser citado e que pode ser muito útil é a utilização do Data Loss Prevention para desidentificar determinado dado sensível, por exemplo:

  • Converter: Meu endereço de email é mail@test.com
  • Para: Meu endereço de email é [email-address]

Além do permissionamento refinado por tags, utilizado na solução-exemplo, também existe a possibilidade de restrição de acesso mais granular, por conjunto de dados (datasets) e tabelas. Por fim, mas não menos importante, grande parte do provisionamento e das configurações dos recursos utilizados podem ser realizadas através de ferramentas de infraestrutura-como-código como Terraform.

Top comments (0)