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
ebq
.
Solução-exemplo
Diagrama
- Eventos (JSON) serão publicados em um tópico do Pub/Sub.
- Tais eventos serão processados por uma pipeline do Dataflow que irá persistir os dados no BigQuery.
- Serão realizadas consultas aos dados no BigQuery.
- 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:
- Possuir
gcloud
instalado, caso contrário clique aqui. - Possuir um projeto GCP (
your_project_id
) , caso contrário clique aqui. - Que o projeto GCP possua as seguintes APIs habilitadas: API Pub/Sub, API Data Catalog, API BigQuery e API Data Loss Prevention.
- Preferencialmente possuir a permissão
Proprietário
.
Configure o gcloud
para utilizar seu projeto:
gcloud config set project your_project_id
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
- Criar a inscrição test-input-subscription:
gcloud pubsub subscriptions create test-input-subscription --topic=test-input-topic
- Enviar um evento em formato JSON:
gcloud pubsub topics publish test-input-topic --message "{\"id\":2, \"nome\": \"Mary\", \"idade\": 2, \"email\": \"mary@email.com\"}"
Classificando dados sensíveis
- Acesse Data Catalog - Tags de política no console
- Clique em
Criar
- Em
Nome da Taxonomia
preenchaDados sensíveis de usuário
- Em
Tags de política/Nome da tag
de política preenchaIdade
- 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
- Ative o check
Aplicar controle de acesso
- Clique em
ATIVAR CONTROLE DE ACESSO
Criando tabelas
- Criar conjunto de dados (dataset):
bq mk test_dataset
- 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
bq mk -t test_dataset.test_table schema.json
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
Consultando dados
Ao executar o comando:
bq query --nouse_legacy_sql 'SELECT * from `your_project_id.test_dataset.test_table`'
É 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.
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`'
Vamos adicionar a permissão para seu usuário e executar novamente a consulta inicial:
- Acesse Data Catalog - Tags de política no console
- Selecione a tag
Dados sensíveis de usuário
- Clique em
MOSTRAR PAINEL DE INFORMAÇÕES
do lado superior direito, se houver - Clique botão
ADICIONAR MEMBRO
- No campo
Novos Membros
, digite seu email, o mesmo utilizado da conta GCP - Em
Selecionar Papel
selecioneCatálogo de dados
>Leitor de controle refinado
- Clique em
SALVAR
- 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`'
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 comidade
- 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 emCONCLUÍ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
- 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
).
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)