Valida datos desidentificados en BigQuery y vuelve a identificar los datos de PII

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:

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.

Arquitectura de la canalización de reidentificación.

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

  1. Completa la parte 2 de la serie.
  2. Completa la parte 3 de la serie.

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.

  1. 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
    
  2. En Cloud Console ve a la página Editor de consultas de BigQuery.

    Ir a Editor de consultas

  3. En el Editor de consultas, ejecute la siguiente consulta para comparar el esquema con la fila del encabezado del archivo CSV:

    select table_name, column_name
    from `deid_dataset.INFORMATION_SCHEMA.COLUMNS`
    WHERE table_name="CCRecords_1564602825"
    

    Este es el resultado:

    Resultado de la consulta en una tabla con nombres de columnas etiquetados

    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.

  4. 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.

    El resultado muestra la cantidad de filas.

  5. 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).

    Resultado que muestra las agrupaciones de cargos.

  6. 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:

    Resultado que muestra grupos de edad.

    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, considera un caso en el que hay un joven director ejecutivo conocido en una empresa incipiente que se puede reconocer fácilmente. 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.

  7. 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:

    Resultado del enmascaramiento del NSS

  8. Valida que en la transformación criptográfica se haya usado encriptación determinista para las entradas card_holders_name, card_number y card_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:

    Resultado que muestra la encriptación de los detalles de la tarjeta

  9. Valida que la transformación infoType se haya aplicado a la columna Additional 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]:

    Resultado que muestra los valores del marcador de posición

  10. Consulta las copias desidentificadas del conjunto de datos para el ID 76901:

    select * from `deid_dataset.CCRecords_1564602825` where id='76901'
    

    El resultado muestra 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]"
    
  11. 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. Para volver a identificar los datos, utiliza una canalización de Dataflow de reidentificación automatizada para volver a identificar el conjunto de datos a 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.

  1. En Cloud Shell, crea un tema de Pub/Sub en el que se publicarán los valores reidentificados:

    export TOPIC_ID="reid-topic"
    gcloud pubsub topics create ${TOPIC_ID}
    
  2. Cree una suscripción a Pub/Sub para el tema:

    export SUBSCRIPTION_ID="reid-subscription"
    gcloud pubsub subscriptions create ${SUBSCRIPTION_ID} --topic=${TOPIC_ID}
    
  3. Exporta la consulta de SQL de BigQuery:

    export QUERY='select id,card_number,card_holders_name
    from `deid_dataset.CCRecords_*`
    where cast(credit_limit as int64)>100000 and cast (age as int64)>50
    group by id,card_number,card_holders_name'
    

    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.

  4. Clona el siguiente repositorio de GitHub y ve a la carpeta raíz del proyecto:

    cd ..
    git clone https://github.com/GoogleCloudPlatform/dlp-rdb-bq-import.git
    cd dlp-rdb-bq-import
    
  5. Activa la canalización de la siguiente manera:

    gcloud builds submit . \
      --config=dlp-reid-build.yaml \
      --substitutions=^~^_GCS_TEMP_LOCATION=${DATAFLOW_TEMP_BUCKET}~_INSPECT_TEMPLATE_NAME=${INSPECT_TEMPLATE_NAME}~_DEID_TEMPLATE_NAME=${REID_TEMPLATE_NAME}~_TOPIC_ID=${TOPIC_ID}~_SUBSCRIPTION_ID=${SUBSCRIPTION_ID}~_API_KEY=$(gcloud auth print-access-token)~_QUERY="'${QUERY}'"
    
  6. Para supervisar la canalización en Cloud Console, ve a la página Dataflow.

    Ir a Dataflow

    Luego de unos minutos la canalización se completará de forma correcta cuando veas lo que se detalla a continuación:

    Se completó de forma correcta la canalización con un estado de trabajo exitoso.

    El gráfico de canalización muestra el éxito en cada transformación:

    Gráfico de la canalización que muestra los pasos correctos.

  7. Para validar la cantidad de registros que se volvieron a identificar, haz clic en la transformación DLP-ReIdentification.out0. El campo Elements added (Elementos agregados) es 1,286.

    Validación de transformación de reidentificación de DLP.

  8. Para validar la cantidad de registros que se vuelven a identificar, haz clic en la transformación Publish Events To PubSub (Publicar eventos en PubSub). El campo Elements added (Elementos agregados) es 1,286.

    Publicación de eventos en la validación de Pub/Sub.

  9. 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

  1. En Cloud Console, ve a la página Administrar recursos.

    Ir a la página Administrar recursos

  2. En la lista de proyectos, selecciona el proyecto que deseas borrar y haz clic en Borrar .
  3. En el cuadro de diálogo, escribe el ID del proyecto y haz clic en Cerrar para borrar el proyecto.

Próximos pasos