En este instructivo se muestra cómo validar el conjunto de datos de muestra que desidentificaste en el instructivo Ejecuta una canalización automatizada de Dataflow para desidentificar un conjunto de datos de PII. Después de la validación vuelve a identificar los datos mediante las plantillas de Cloud DLP que se usaron antes para desidentificar la información de identificación personal (PII).
Este documento forma parte de una serie:
- Desidentificación y reidentificación de PII en datos de gran volumen con Cloud DLP
- Crea plantillas de transformación de desidentificación de Cloud DLP para conjuntos de datos de PII
- Ejecuta una canalización automatizada de Dataflow para desidentificar un conjunto de datos de PII
- Valida datos desidentificados en BigQuery y vuelve a identificar los datos de PII (este documento)
En este instructivo se supone que estás familiarizado con la secuencia de comandos de shell, SQL, BigQuery y Dataflow.
Arquitectura de referencia
En este instructivo se muestra la canalización de reidentificación y validación de datos que se ilustra en el siguiente diagrama.
La canalización de reidentificación y validación de datos valida las copias de los datos desidentificados y usa una canalización de Dataflow para volver a identificar datos a gran escala.
Objetivos
- Validar un conjunto de datos desidentificado en BigQuery mediante SQL estándar
- Volver a identificar datos mediante una canalización de Dataflow
Costos
En este instructivo, se usan los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud sean aptos para obtener una prueba gratuita.
Cuando finalices este instructivo, podrás borrar los recursos creados para evitar que se te siga facturando. Para obtener más información, consulta cómo hacer una limpieza.
Antes de comenzar
Valida el conjunto de datos desidentificados en BigQuery
Debes validar que los datos de BigQuery contengan datos desidentificados para garantizar que sea seguro compartir sin exponer la PII. Debido a que la canalización automatizada creó una tabla de BigQuery basada en los archivos CSV de muestra del instructivo anterior, puedes validar los datos mediante la comparación de tablas y esquemas en BigQuery.
En Cloud Shell muestra la fila de encabezado del archivo CSV que usaste para crear el esquema siguiente:
head -1 solution-test/CCRecords_1564602825.csv
Este es el resultado:
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
En Cloud Console ve a la página Editor de consultas de BigQuery.
En el Editor de consultas, ejecuta la siguiente consulta para comparar el esquema con la fila de encabezado del archivo CSV:
select table_name, column_name from `deid_dataset.INFORMATION_SCHEMA.COLUMNS` WHERE table_name="CCRecords_1564602825"
Este es el resultado:
No hay espacios en los nombres de las columnas porque la canalización garantiza que los nombres de columnas y tablas solo contengan caracteres válidos según el estándar de nombres de BigQuery.
Valida que la cantidad de filas de la tabla sea 100,000:
select count(*) as number_of_rows from `deid_dataset.CCRecords_*` LIMIT 1
En el resultado, la columna
number_of_rows
es 100,000 en lugar de 100,001. El archivo CSV tiene un registro de encabezado, que no se incluye en el recuento de filas de la tabla.Valida que la transformación de agrupamiento se aplique correctamente a la columna
JobTitle
:select JobTitle, count(*) as number_of_records_found from `deid_dataset.CCRecords_1564602825` group by JobTitle
En el resultado, los valores
JobTitle
se agrupan en tres depósitos generalizados: Executive (Ejecutivo), Engineer (Ingeniero) y Manager (Administrador).Valida que los valores de la columna
Age
se agrupen en seis depósitos diferentes de 20 a 60:select Age, count(*) as number_of_records_found from `deid_dataset.CCRecords_1564602825` group by Age order by Age desc
Este es el resultado:
Las edades y los cargos se agrupan en estas categorías para ayudar aún más con el proceso de desidentificación de PII. Por ejemplo, imagina un caso en el que hay un director general joven y conocido de una empresa startup que se puede reconocer con facilidad. Alguien puede identificar a esta persona en el conjunto de datos mediante estos cuasi-identificadores (cargo y edad) del conjunto de datos original. Una transformación de agrupamiento significa que es más difícil identificar a esta persona en las copias desidentificadas del conjunto de datos.
Valida la transformación de enmascaramiento del NSS:
select SSN from `deid_dataset.CCRecords_*` where regexp_contains(SSN, "@*")
En el resultado se enmascaran los primeros cinco dígitos de todas las entradas del NSS:
Valida que en la transformación criptográfica se haya usado encriptación determinista para las entradas
card_holders_name
,card_number
ycard_pin
:select card_holders_name, card_number, card_pin from `deid_dataset.CCRecords_*` limit 1
En el resultado las tres entradas se reemplazan por una string encriptada codificada en base64:
Valida que la transformación
infoType
se haya aplicado a la columnaAdditional 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+)')
En el resultado, los valores sensibles se reemplazan por valores de marcador de posición, como
[IBAN_CODE]
,[EMAIL_ADDRESS]
,[PHONE_NUMBER,]
y[ONLINE_USER_ID]
:Consulta las copias desidentificadas del conjunto de datos para el ID
76901
:select * from `deid_dataset.CCRecords_1564602825` where id='76901'
En el resultado se muestran los siguientes 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]"
En Cloud Shell compara el resultado del paso anterior con el conjunto de datos original en el archivo CSV para el ID
76901
:awk -F "," '$1 == 76901' solution-test/CCRecords_1564602825.csv
Este es el resultado:
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
Vuelve a identificar el conjunto de datos de BigQuery
Por último, puedes volver a identificar los datos a los valores originales mediante las plantillas de DLP que se usaron para la desidentificación. Usa una canalización de Dataflow de reidentificación automatizada para volver a identificar grandes conjuntos de datos a gran escala. Este proceso de reidentificación es útil cuando se debe rotar la clave de encriptación de token (TEK). Puedes volver a identificar el conjunto de datos antes de la rotación de claves y volver a asignar un token mediante la TEK nueva.
En Cloud Shell, crea un tema de Pub/Sub en el que se publicarán los valores que se volvieron a identificar:
export TOPIC_ID="reid-topic" gcloud pubsub topics create ${TOPIC_ID}
Crea una suscripción a Pub/Sub para el tema.
export SUBSCRIPTION_ID="reid-subscription" gcloud pubsub subscriptions create ${SUBSCRIPTION_ID} --topic=${TOPIC_ID}
Exporta la consulta de SQL de 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'
A fin de seguir este instructivo, vuelve a identificar el número y el nombre del titular de la tarjeta de cualquier persona de 50 años o mayor que tenga un límite de crédito superior a $100,000.
Sube la consulta al bucket de almacenamiento de datos:
cat << EOF | gsutil cp - gs://${DATA_STORAGE_BUCKET}/reid_query.sql ${QUERY} EOF
Activa la canalización:
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 supervisar la canalización en Cloud Console, ve a la página Dataflow.
Luego de unos minutos la canalización se completará de forma correcta cuando veas lo que se detalla a continuación:
Para validar los datos que se volvieron a identificar, en Cloud Shell, recupera un registro aleatorio del suscriptor de Pub/Sub:
gcloud pubsub subscriptions pull ${SUBSCRIPTION_ID} \ --auto-ack --limit 1000 --project ${PROJECT_ID} >> re-id-data.txt
En el resultado se muestra que los datos se vuelven a identificar de forma correcta en el formato original:
cat re-id-data.txt
Este resultado es similar a lo siguiente:
{"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"}
Limpieza
La manera más fácil de eliminar la facturación es borrar el proyecto de Cloud que creaste para el instructivo. Como alternativa, puedes borrar los recursos individuales.
Borra el proyecto
- En Cloud Console, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
¿Qué sigue?
- Controla los datos: cómo la asignación de token permite que los datos se puedan usar sin sacrificar la privacidad.
- Controla tus datos: utiliza Cloud DLP para encontrar y proteger la PII
- Automatiza la clasificación de los datos subidos a Cloud Storage
- Protege conjuntos de datos sensibles en Google Cloud
- Desidentificación y reidentificación de PII en datos de gran volumen con Cloud DLP
- Revisa el código de muestra en el repositorio Migra datos sensibles en BigQuery mediante Dataflow y Cloud DLP en GitHub.
- Obtén más información sobre otras soluciones de reconocimiento de patrones.
- Prueba otras funciones de Google Cloud. Consulta nuestros instructivos.