O blog da AWS

Detectando e mascarando dados sensíveis usando o AWS Glue e AWS Glue DataBrew

Por Thiago da Hora, Arquiteto de Soluções, AWS Brasil – Setor Público

Introdução

A privacidade de dados é um tema que tem ganhado bastante relevância nas empresas, seja por conta de normas de conformidades e leis, como o caso da Lei Geral de Proteção de Dados (LGPD) disposta pelo Governo Federal, ou pelo impacto negativo que acarreta à empresa ter seu nome associado à um incidente de segurança envolvendo dados de usuários. Embora este tipo de incidente não permita o acesso direto às contas expostas dos usuários, pode ocasionar em fraudes como contratação de serviços, abertura de contas, entre outras atividades.

Por isto é de extrema importância que dados de identificação pessoal, de saúde e quaisquer outros dados classificados como sensíveis tenham o acesso restringido e auditado. Para que ferramentas analíticas e serviços de inteligência artificial tenham acesso ao conjunto de dados de maneira segura, é possível descaracterizar os dados sensíveis através de técnicas de mascaramento e criptografia, porém estas atividades tornaram-se custosas sob as óticas de preço, tempo de configuração e gestão dado o crescimento exponencial dos dados, aumento da diversidade e quantidade de origens.

Para facilitar a tarefa de identificação dos dados sensíveis podemos utilizar o AWS Glue Studio, serviço da AWS que permite a criação, execução e monitoramento de trabalhos de extração, transformação e carga (ETL) de maneira visual, sem escrita de código, sem provisionar servidor (serverless), baseado em computação distribuída e open-source (Apache Spark).

O serviço conta com uma funcionalidade chamada Sensitive Data Detection, que permite a escolha das categorias que você deseja identificar, como Universal (e-mail e cartão de crédito), Redes (endereços MAC e IP), entre outros ou categorias customizadas que você mesmo pode criar através expressões regulares e palavras de contexto.

Embora o AWS Glue Studio Sensitive Data Detection tenha a funcionalidade de substiuição do dado classificado como sensível por uma string, para realizar transformações mais avançadas como hashing e criptografia é preciso fazer uso do AWS Glue DataBrew, serviço de preparação de dados visual, sem a necessidade de escrita de código, ajudando analistas e cientistas de dados com tarefas de limpeza, normalização e preparação de dados para analytics e machine learning.  Destaque para a funcionalidade de tratativa de dados sensíveis (PII data handling), que permite a aplicação de técnicas de mascaramento, descaracterização, criptografia e outras operações.

Neste blogpost, vamos construir um pipeline de dados orientado a eventos, serverless e com a funcionalidade de identificar dados pessoais e sensíveis como CPF, RG, CNPJ, CEP e Telefone através da funcionalidade Sensitive Data Detection do AWS Glue Studio. Também aplicaremos a técnica de mascaramento através de hashing nas colunas identificadas com o AWS Glue DataBrew.

Visão geral/Arquitetura da solução

O diagrama a seguir ilustra a arquitetura simplificada da solução:

Figura 1: Diagrama simplificado da solução

  1. Inicialmente um arquivo é carregado em um bucket do Amazon S3 de entrada, o formato do arquivo suportado no template é CSV com delimitador “;”para evitar problemas com a pontuação decimal e entradas de texto. Porém, pode ser facilmente customizado para lidar com outros padrões de arquivos na entrada.
  2. Com o carregamento do arquivo é disparado um gatilho de evento no Amazon EventBridge que é o serviço de barramento de eventos sem servidor que simplifica a criação de aplicações orientadas a eventos. Este gatilho iniciará a execução do pipeline de dados ou fluxo de trabalho do AWS Step Functions.
  3. O fluxo de trabalho abaixo é executado:

Figura 2: Fluxo de trabalho do AWS Step Functions

  1. A primeira etapa é a execução do job do AWS Glue em procura de dados sensíveis através da tarefa de transformação Detect PII disponível no AWS Glue Studio. É possível utilizar entidades existentes como cartão de crédito, e-mail, endereço IP, ou criar entidades customizadas através de expressões regulares e palavras de contexto. Para mais informações consulte este link.

Por padrão, o template do AWS CloudFormation traz expressões regulares para identificar dados de CPF, RG, CNPJ, CEP e Telefone (com a opção de customização para identificar outros padrões de dados). Se não houver match, o Glue Job gravará arquivos de saída sem conteúdo (em branco) em um bucket intermediário. Se houver match, por exemplo identificou CPF em alguma coluna, o Glue Job gravará arquivos de saída com o nome da coluna e o padrão de dado sensível associado.

  1. A próxima etapa é executar uma função AWS Lambda para validar se o AWS Glue job detectou dados sensíveis e carregá-los como parâmetro no fluxo de trabalho.
  2. Avaliar se o conjunto de dados contém dados sensíveis (lógica condicional no fluxo de trabalho).
  3. Caso não tenham sido detectados dados sensíveis no arquivo de entrada, o mesmo será copiado para o bucket de saída.
  4. Caso tenham sido detectados dados sensíveis, serão criados durante tempo de execução do pipeline os seguintes componentes Dataset, Recipe, Project e Job do AWS Glue DataBrew, para se familiarizar com os conceitos e termos do serviço consulte a documentação.
  5. A última etapa é a execução do Job do AWS Glue DataBrew para encriptar as colunas detectadas (passadas como parâmetro pela função Lambda) usando o algoritmo de hashing com a secret key do AWS Secrets Manager criada duranta a implantação do template. O algoritmo de hashing é irreversível, porém é possível customizar o template e realizar a encriptação de forma reversível, consulte a documentação.

Após isso o arquivo com os dados mascarados será gravado no bucket de destino encerrando o fluxo de trabalho.

Implantando  a solução

Criando o pipeline de dados

  1. Acesse o repositório público e baixe o template ou copie-o para um bucket do Amazon S3.

git clone git@github.com:aws-samples/detect-and-handling-custom-pii-with-aws-glue-studio-and-aws-glue-databrew.git

IMPORTANTE: A recomendação é que você baixe o template, revise os recursos que serão criados, o nível de permissão necessária e faça testes antes de implantá-lo em produção.

  1. Crie uma nova stack do AWS CloudFormation usando o template cfn-demo-detect-and-handling-custom-pii.yaml . Para fazer a implantação através da aws-cli, consulte este link.

Figura 3: Criação da stack do AWS CloudFormation

Nota: Confira a conta (AWS Account ID) e a região antes de fazer a implantação da stack.

  1. Preencha os parâmetros do template do AWS CloudFormation (CFn);
    1. 5 parâmetros de dados sensíveis customizados: 1CustomSensitiveDataName, 2CustomSensitiveDataName, 3CustomSensitiveDataName, 4CustomSensitiveDataName, 5CustomSensitiveDataName. Preenchidos por padrão com os valores demo_CEP, demo_CNPJ, demo_CPF, demo_Telefone, demo_RG. Suportam letras, números e o caracter _
    2. 5 parâmetros com as respectivas expressões regulares (regex) para detectar os dados sensíveis customizados: 1CustomSensitiveDataValue, 2CustomSensitiveDataValue, 3CustomSensitiveDataValue, 4CustomSensitiveDataValue, 5CustomSensitiveDataValue. Preenchidos por padrão para detectar informações de identificação pessoal do Brasil (CPF, RG, CNPJ, CEP e Telefone). Suportam expressões regulares.
    3. GlueSamplePortion parâmetro com a porcentagem da amostra do conjunto de dados a ser avaliada, por padrão vem preenchido com o valor 0.1 que indica que apenas 10% do conjunto de dados será avaliado durante a execução do job. Suporta valores entre 0.1 e 1.0.
    4. GlueDetectionThreshold parâmetro com o threshold para classificar o campo do conjunto de dados como sensível. Por padrão vem preenchido com 0.5 que indica que se 50% ou mais da amostra de dados avaliada for classificada como dados sensíveis o campo inteiro será classificado como dado sensível. Suporta entradas entre 0.1 e 1.0.
    5. SecretString parâmetro que será codificado em base64 no AWS Secrets Manager para mascaramento dos dados através de hashing. Suporta string.

Figura 4: Parâmetros do template do AWS CloudFormation

Executando o pipeline de dados

  1. Depois de implantar a stack, acesse a seção Outputs e copie os valores de saída AmazonS3BucketForDataInput, AWSStepFunctionsStateMachine e AmazonS3BucketForDataOuput.

Figura 5: Dados de saída (Outputs) da stack

  1. Caso queira um conjunto de dados fictícios de exemplo para testar o pipeline, baixe o arquivo sample-synthetic-PII-ptbr.csv gerado através do site 4devs ou utilize qualquer outro gerador de sua preferência.

Nota: O arquivo de entrada precisa ser um CSV com delimitador ponto e vírgula (;) (foi escolhido ponto e vírgula como delimitador de coluna para o arquivo de entrada para esta solução para evitar conflitos com números decimais, agrupamento de dígitos e diferente das vírgulas não aparecem muito em textos).

IMPORTANTE: Embora os dados contidos no arquivo arquivo sample-synthetic-PII-ptbr.csv respeitem a formatação real, tratam-se de dados fictícios gerados randomicamente, porém respeitando as regras de criação. O mau uso dos dados contidos no arquivo é de responsabilidade do usuário.

  1. Faça o upload do arquivo com dados sensíveis no bucket de entrada criado anteriormente (AmazonS3BucketForDataInput).

É possível realizar uma consulta aos dados carregados no bucket através do AWS S3 Select. O uso do AWS S3 Select está fora do escopo desse blogpost.

Figura 6: Execução do S3 Select no arquivo de entrada com dados sensíveis.

  1. Aguarde até que o fluxo da AWS Step Functions (AWSStepFunctionsStateMachine) termine.

Figura 7: Execução do fluxo de trabalho do AWS Step Functions

  1. Após concluído, baixe o arquivo gerado no bucket de saída AmazonS3BucketForDataOuput (criado anteriormente) ou realize uma consulta através do AWS S3 Select conforme abaixo. É possível observar que os campos cpf, rg, cep, telefone_fixo e celular foram mascarados.

Figura 8: Execução do S3 Select no arquivo de saída com dados mascarados.

Limpando o ambiente

  1. Remova a stack do AWS CloudFormation criada anteriormente através da console, selecione a stack e escolha a opção Delete.
  2. Os componentes do AWS DataBrew (Dataset, Recipe, Project e Job) criados durante a execução do fluxo de trabalho devem ser removidos manualmente.

Conclusão

Conforme demonstrado no blogpost, é possível utilizar o AWS Glue para identificar dados sensíveis do Brasil, como CPF, RG, CNPJ, ou definir seus próprios padrões através de expressões regulares na funcionalidade de Sensitive Data Detection. Posteriormente é possível mascarar os dados através do AWS Glue DataBrew usando algoritmo de hashing ou aplicar outros algoritmos para descaracterizar o dado como embaralhamento e substituição, ou até mesmo algoritmos de criptografia reversível para recuperar o valores posteriormente. Desta forma é possível proteger seus dados sensíveis para atender à requisitos de conformidade como a LGPD e elevar a privacidade de dados em Data Lakes.

A solução implementada trata-se de uma arquitetura serverless e orientada a eventos que pode ser facilmente customizada para atender diferentes desafios de dados, como automatizar a descoberta e classificação de dados sensíveis no Data Lake, integrar com a governança de dados através de automação com a aplicação de Tags no AWS Lake Formation, padronizar as atividade de detecção e mascaramento de dados sensíveis em arquiteturas de dados distribuídas (Data mesh), entre outros.

Links relacionados

https://aws.amazon.com/blogs/big-data/build-a-data-pipeline-to-automatically-discover-and-mask-pii-data-with-aws-glue-databrew/

https://aws.amazon.com/blogs/big-data/build-event-driven-data-quality-pipelines-with-aws-glue-databrew/

https://aws.amazon.com/blogs/big-data/introducing-pii-data-identification-and-handling-using-aws-glue-databrew/

https://aws.amazon.com/pt/blogs/aws-brasil/mascaramento-de-dados-e-acesso-refinado-usando-o-amazon-macie-e-aws-lake-formation/

https://aws.amazon.com/pt/blogs/aws-brasil/como-anonimizar-seus-dados-usando-o-aws-glue/


Sobre o Autor

Thiago da Hora, Arquiteto de Soluções da AWS, com foco em parceiros de software (ISV) do setor público. Trabalhou anteriormente em consultorias de TI como especialista em nuvem, banco de dados,  migração, modernização de aplicações e desenvolvimento de software. Tem um interesse especial em Analytics, Databases e Serverless.