Neste tutorial, mostramos como validar o conjunto de dados de amostra que você desidentificou no tutorial sobre Como executar um pipeline do Dataflow automatizado para desidentificar um conjunto de dados de PII. Após a validação, reidentifique os dados usando os modelos de DLP do Cloud que foram usados anteriormente para desidentificar as informações de identificação pessoal (PII).
Este documento faz parte de uma série:
- Desidentificação e reidentificação de PII em grandes volumes de dados usando o Cloud DLP
- Como criar modelos de transformação de desidentificação do Cloud DLP para o conjunto de dados de PII
- Como executar um pipeline automatizado do Dataflow para desidentificar um conjunto de dados de PII
- Como validar dados desidentificados no BigQuery e reidentificar dados de PII (este documento)
Neste tutorial, pressupomos que você esteja familiarizado com shell scripts, SQL, BigQuery e Dataflow.
Arquitetura de referência
Neste tutorial, demonstramos o pipeline de validação e reidentificação de dados ilustrado no diagrama a seguir.
O pipeline de validação e reidentificação de dados valida cópias dos dados desidentificados e usa um pipeline do Dataflow para reidentificar dados em escala.
Objetivos
- Validar um conjunto de dados desidentificado no BigQuery usando o SQL padrão.
- Reidentificar dados usando um pipeline do Dataflow.
Custos
Neste tutorial, usamos os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem ser qualificados para uma avaliação gratuita.
Ao concluir este tutorial, exclua os recursos criados para evitar o faturamento contínuo. Para mais informações, consulte Como fazer a limpeza.
Antes de começar
- Conclua a segunda parte da série.
- Conclua a terceira parte da série.
Como validar o conjunto de dados desidentificado no BigQuery
Você valida que os dados no BigQuery contêm dados desidentificados para garantir que seja seguro compartilhá-los sem expor informações PII. Como o pipeline automatizado criou uma tabela do BigQuery com base nos arquivos CSV de amostra no tutorial anterior, é possível validar os dados comparando as tabelas e os esquemas no BigQuery.
No Cloud Shell, exiba a linha do cabeçalho do arquivo CSV que você usou para criar o esquema:
head -1 solution-test/CCRecords_1564602825.csv
A saída é esta:
ID,Card Type Code,Card Type Full Name,Issuing Bank,Card Number,Card Holder's Name,Issue Date,Expiry Date,Billing Date,Card PIN,Credit Limit,Age,SSN,JobTitle,Additional Details
No Console do Cloud, acesse a página do Editor de consultas do BigQuery.
No Editor de consultas, execute a seguinte consulta para comparar o esquema com a linha de cabeçalho do arquivo CSV:
select table_name, column_name from `deid_dataset.INFORMATION_SCHEMA.COLUMNS` WHERE table_name="CCRecords_1564602825"
A saída é esta:
Não há espaços nos nomes das colunas porque o pipeline garante que os nomes de colunas e tabelas contenham apenas caracteres válidos de acordo com o Padrão de nomenclatura do BigQuery.
Valide se o número de linhas na tabela é 100.000:
select count(*) as number_of_rows from `deid_dataset.CCRecords_*` LIMIT 1
Na saída, a coluna
number_of_rows
é 100000 em vez de 100001. O arquivo CSV tem um registro de cabeçalho, que não está incluído na contagem de linhas da tabela.Confirme se a transformação de agrupamento por classes foi aplicada com sucesso à coluna
JobTitle
:select JobTitle, count(*) as number_of_records_found from `deid_dataset.CCRecords_1564602825` group by JobTitle
Na saída, os valores
JobTitle
são agrupados em três buckets generalizados: Executivo, Engenheiro e Gerente.Confirme se os valores na coluna
Age
estão agrupados em seis buckets diferentes de 60 a 20:select Age, count(*) as number_of_records_found from `deid_dataset.CCRecords_1564602825` group by Age order by Age desc
A saída é esta:
As idades e os cargos são agrupados nessas categorias para ajudar ainda mais no processo de desidentificação de PII. Por exemplo, considere um caso em que há um jovem CEO bem conhecido em uma empresa iniciante que pode ser facilmente reconhecido. Alguém pode identificar essa pessoa no conjunto de dados usando esses quase identificadores (cargo e idade) do conjunto de dados original. Uma transformação de bucket significa que é mais difícil identificar essa pessoa nas cópias desidentificadas do conjunto de dados.
Valide a transformação de mascaramento para o SSN:
select SSN from `deid_dataset.CCRecords_*` where regexp_contains(SSN, "@*")
Na saída, os primeiros cinco dígitos de todas as entradas de SSN são mascarados:
Valide se a transformação criptográfica usou a criptografia determinística para as entradas
card_holders_name
ecard_number
ecard_pin
:select card_holders_name, card_number, card_pin from `deid_dataset.CCRecords_*` limit 1
Na saída, todas as três entradas são substituídas por uma string criptografada codificada em base64:
Valide se a transformação
infoType
foi aplicada à colunaAdditional Details
:select additional_details from `deid_dataset.CCRecords_*` where regexp_contains(additional_details, r'(IBAN_CODE+)') or regexp_contains(additional_details, r'(EMAIL_ADDRESS+)')or regexp_contains(additional_details, r'(PHONE_NUMBER+)')or regexp_contains(additional_details, r'(ONLINE_USER_ID+)')
Na saída, os valores confidenciais são substituídos por valores de marcador, como
[IBAN_CODE]
,[EMAIL_ADDRESS]
,[PHONE_NUMBER,]
e[ONLINE_USER_ID]
:Consulte as cópias desidentificadas do conjunto de dados para o ID
76901
:select * from `deid_dataset.CCRecords_1564602825` where id='76901'
A saída mostra os seguintes valores:
"ID": "76901" "Card_Type_Code": "AX" "Card_Type_Full_Name": "American Express" "Issuing_Bank": "American Express" "Card_Number": "encrypted value" "Card_Holders_Name": "encrypted value" "Issue_Date": "03/2013" "Expiry_Date": "03/2015" "Billing_Date": "14" "Card_PIN": "encrypted value" "Credit_Limit": "57000" "Age": "40" "SSN": "***-**-9395" "JobTitle": "Manager" "Additional_Details": "[IBAN_CODE][PHONE_NUMBER] [EMAIL_ADDRESS] 102-326-2388 hugedomains.com Maggio[ONLINE_USER_ID]"
No Cloud Shell, compare a saída da etapa anterior com o conjunto de dados original no arquivo CSV para o código
76901
:awk -F "," '$1 == 76901' solution-test/CCRecords_1564602825.csv
A saída é:
76901,AX,American Express,American Express,376467075604410,Francis U Riggs,03/2013,03/2015,14,7425,57000,43,623-12-9395,Product Manager,ES20 6871 8240 0493 0298 3587 dsumpton1nc4@reddit.com 102-326-2388 hugedomains.com Maggio:5282194096147081
Como reidentificar o conjunto de dados do BigQuery
Por fim, é possível reidentificar os dados de volta aos valores originais usando os modelos de DLP que foram usados para desidentificação. Para reidentificar os dados, use uma reidentificação automática pipeline do Dataflow para reidentificar o conjunto de dados em escala. Esse processo de reidentificação é útil quando a chave de criptografia de token (TEK, na sigla em inglês) precisa ser girada. É possível reidentificar o conjunto de dados antes da rotação de chaves e, em seguida, tokenizar novamente usando a nova TEK.
No Cloud Shell, crie um tópico do Pub/Sub em que os valores reidentificados serão publicados:
export TOPIC_ID="reid-topic" gcloud pubsub topics create ${TOPIC_ID}
Crie uma assinatura do Pub/Sub para o tópico:
export SUBSCRIPTION_ID="reid-subscription" gcloud pubsub subscriptions create ${SUBSCRIPTION_ID} --topic=${TOPIC_ID}
Exporte a consulta SQL do BigQuery:
export QUERY='select id,card_number,card_holders_name from `deid_dataset.CCRecords_1564602825` where safe_cast(credit_limit as int64)>100000 and safe_cast(age as int64)>50 group by id,card_number,card_holders_name limit 10'
Neste tutorial, você reidentifica o número do cartão e o nome do titular do cartão para qualquer pessoa com 50 anos ou mais e com limite de crédito acima de US$ 100.000.
Faça upload da consulta no bucket de armazenamento de dados:
cat << EOF | gsutil cp - gs://${DATA_STORAGE_BUCKET}/reid_query.sql ${QUERY} EOF
Acione o pipeline:
gcloud beta dataflow flex-template run "dlp-reid-demo" --project=${PROJECT_ID} \ --region=${REGION} \ --template-file-gcs-location=gs://dataflow-dlp-solution-sample-data/dynamic_template_dlp_v2.json -- parameters=^~^streaming=true~enableStreamingEngine=true~tempLocation=gs://${DATAFLOW_TEMP_BUCKET}/temp~numWorkers=1~maxNumWorkers=2 ~runner=DataflowRunner~tableRef=${PROJECT_ID}:deid_dataset.CCRecords_1564602825~dataset=deid_dataset~autoscalingAlgorithm=THROUGHPUT_BASED~workerMachineType=n1-highmem-8 ~topic=projects/${PROJECT_ID}/topics/${TOPIC_ID}~deidentifyTemplateName=${REID_TEMPLATE_NAME} ~DLPMethod=REID~keyRange=1024~queryPath=gs://${DATA_STORAGE_BUCKET}/reid_query.sql
Para monitorar o pipeline, no Console do Cloud, acesse a página Dataflow.
Depois de alguns minutos, o pipeline é concluído com êxito quando você vê:
Para validar os dados reidentificados, no Cloud Shell busque um registro aleatório do assinante do Pub/Sub:
gcloud pubsub subscriptions pull ${SUBSCRIPTION_ID} \ --auto-ack --limit 1000 --project ${PROJECT_ID} >> re-id-data.txt
A saída mostra que os dados foram reidentificados com êxito para o formato original:
cat re-id-data.txt
Esta saída é semelhante a:
{"id":"17880","Card Number":"6558977436350773","Card Holder's Name":"Elden E Courtright"} {"id":"57055","Card Number":"3529749048585358","Card Holder's Name":"Francisco Duffy"} {"id":"31487","Card Number":"6227182611813833","Card Holder's Name":"Leslie C Wade"} {"id":"38521","Card Number":"36533383873740","Card Holder's Name":"Laura Z Thomas"} {"id":"81585","Card Number":"3569920557158538","Card Holder's Name":"Kelly Reed"} {"id":"96408","Card Number":"340687318048371","Card Holder's Name":"Ignacio V Pisano"}
Como fazer a limpeza
A maneira mais fácil de eliminar o faturamento é excluir o projeto do Cloud que você criou para o tutorial. A outra opção é excluir os recursos individuais.
Exclua o projeto
- No Console do Cloud, acesse a página Gerenciar recursos:
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
- Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.
A seguir
- Assuma o controle de seus dados: como a tokenização torna os dados utilizáveis sem sacrificar a privacidade.
- Controle seus dados: use o Cloud DLP para encontrar e proteger PII
- Como automatizar a classificação de dados com upload feito para o Cloud Storage
- Como proteger conjuntos de dados confidenciais no Google Cloud
- Desidentificação e reidentificação de PII em grandes volumes de dados usando o Cloud DLP
- Analise o código de amostra no repositório Migrate Data Confidence BigQuery to Dataflow And Cloud DLP (em inglês) no GitHub.
- Saiba mais sobre outras soluções de reconhecimento de padrão (em inglês).
- Teste outros recursos do Google Cloud. Veja nossos tutoriais.