Automatizar la clasificación de los datos subidos a Cloud Storage

En este tutorial se explica cómo aplicar una cuarentena automática a los datos y cómo desplegar sistemas de clasificación con Cloud Storage y otros productos. Google CloudEn este tutorial se da por supuesto que tienes conocimientos sobreGoogle Cloud y programación básica de shell.

En todas las organizaciones, los responsables de protección de datos como tú se enfrentan a una cantidad de datos cada vez mayor, datos que deben protegerse y tratarse de forma adecuada. Poner en cuarentena y clasificar esos datos puede ser complicado y llevar mucho tiempo, sobre todo si se trata de cientos o miles de archivos al día.

¿Y si pudieras coger cada archivo, subirlo a una ubicación de cuarentena y que se clasificara automáticamente y se moviera a la ubicación adecuada en función del resultado de la clasificación? En este tutorial se explica cómo implementar un sistema de este tipo con Cloud Run Functions, Cloud Storage y Protección de Datos Sensibles.

Conceder permisos a cuentas de servicio

El primer paso es conceder permisos a dos cuentas de servicio: la cuenta de servicio de funciones de Cloud Run y el agente de servicio de Cloud Data Loss Prevention.

Conceder permisos a la cuenta de servicio predeterminada de App Engine

  1. En la consola Google Cloud , abre la página IAM y administración y selecciona el proyecto que has creado:

    Ir a IAM

  2. Busca la cuenta de servicio de App Engine. Esta cuenta tiene el formato [PROJECT_ID]@appspot.gserviceaccount.com. Sustituye [PROJECT_ID] por el ID de tu proyecto.

  3. Selecciona el icono de edición situado junto a la cuenta de servicio.

  4. Añade los siguientes roles:

    • Administrador de DLP
    • Agente de servicio de la API DLP
  5. Haz clic en Guardar.

Conceder permisos al agente de servicio de Cloud Data Loss Prevention

El agente de servicio de Cloud Data Loss Prevention se crea la primera vez que es necesario.

  1. En Cloud Shell, crea el agente de servicio de Cloud Data Loss Prevention llamando a InspectContent:

    curl --request POST 
    "https://dlp.googleapis.com/v2/projects/PROJECT_ID/locations/us-central1/content:inspect"
    --header "X-Goog-User-Project: PROJECT_ID"
    --header "Authorization: Bearer $(gcloud auth print-access-token)"
    --header 'Accept: application/json'
    --header 'Content-Type: application/json'
    --data '{"item":{"value":"google@google.com"}}'
    --compressed

    Sustituye PROJECT_ID por el ID de tu proyecto.

  2. En la Google Cloud consola, abre la página IAM y administración y selecciona el proyecto que has creado:

    Ir a IAM

  3. Selecciona la casilla Incluir concesiones de roles proporcionadas por Google

  4. Busca el agente de servicio de Data Loss Prevention de Cloud. Esta cuenta tiene el formato service-[PROJECT_NUMBER]@dlp-api.iam.gserviceaccount.com. Sustituye [PROJECT_NUMBER] por el número de tu proyecto.

  5. Selecciona el icono de edición situado junto a la cuenta de servicio.

  6. Añade el rol Proyecto > Lector y, a continuación, haz clic en Guardar.

Crear el flujo de procesamiento de cuarentena y clasificación

En esta sección, creará la canalización de cuarentena y clasificación que se muestra en el siguiente diagrama.

Flujo de trabajo de cuarentena y clasificación

Los números de esta canalización corresponden a estos pasos:

  1. Subes archivos a Cloud Storage.
  2. Invoca una función de Cloud Functions.
  3. Protección de Datos Sensibles inspecciona y clasifica los datos.
  4. El archivo se mueve al contenedor correspondiente.

Crear segmentos de Cloud Storage

Sigue las directrices de nomenclatura de segmentos para crear tres segmentos con nombres únicos que usarás a lo largo de este tutorial:

  • Contenedor 1: sustituye [YOUR_QUARANTINE_BUCKET] por un nombre único.
  • Contenedor 2: sustituye [YOUR_SENSITIVE_DATA_BUCKET] por un nombre único.
  • Contenedor 3: sustituye [YOUR_NON_SENSITIVE_DATA_BUCKET] por un nombre único.

consola

  1. En la Google Cloud consola, abre el navegador de Cloud Storage:

    Ir a Cloud Storage

  2. Haz clic en Crear segmento.

  3. En el cuadro de texto Nombre del segmento, introduce el nombre que has seleccionado para [YOUR_QUARANTINE_BUCKET] y, a continuación, haz clic en Crear.

  4. Repite el proceso con los segmentos [YOUR_SENSITIVE_DATA_BUCKET] y [YOUR_NON_SENSITIVE_DATA_BUCKET].

gcloud

  1. Abre Cloud Shell:

    Ir a Cloud Shell

  2. Crea tres segmentos con los siguientes comandos:

    gcloud storage buckets create gs://[YOUR_QUARANTINE_BUCKET]
    gcloud storage buckets create gs://[YOUR_SENSITIVE_DATA_BUCKET]
    gcloud storage buckets create gs://[YOUR_NON_SENSITIVE_DATA_BUCKET]
    

Crear un tema y una suscripción de Pub/Sub

consola

  1. Abre la página Temas de Pub/Sub:

    Ir a temas de Pub/Sub

  2. Haz clic en Crear tema.

  3. En el cuadro de texto, escribe el nombre del tema.

  4. Selecciona la casilla Añadir una suscripción predeterminada.

  5. Haz clic en Crear tema.

gcloud

  1. Abre Cloud Shell:

    Ir a Cloud Shell

  2. Crea un tema y sustituye [PUB/SUB_TOPIC] por el nombre que quieras:

    gcloud pubsub topics create [PUB/SUB_TOPIC]
  3. Crea una suscripción y sustituye [PUB/SUB_SUBSCRIPTION] por el nombre que quieras:

    gcloud pubsub subscriptions create [PUB/SUB_SUBSCRIPTION] --topic [PUB/SUB_TOPIC]

Crear las funciones de Cloud Run

En esta sección se explica cómo desplegar la secuencia de comandos de Python que contiene las dos funciones de Cloud Run siguientes:

  • Función que se invoca cuando se sube un objeto a Cloud Storage.
  • Función que se invoca cuando se recibe un mensaje en la cola de Pub/Sub.

La secuencia de comandos de Python que usas para completar este tutorial se encuentra en un repositorio de GitHub. Para crear la primera función de Cloud, debes habilitar las APIs correctas.

Para habilitar las APIs, haz lo siguiente:

  • Si estás trabajando en la consola, cuando hagas clic en Crear función, verás una guía sobre cómo habilitar las APIs que necesitas para usar Cloud Functions.
  • Si trabajas en gcloud CLI, debes habilitar manualmente las siguientes APIs:
    • API de Artifact Registry
    • API Eventarc
    • API Admin de Cloud Run

Crear la primera función

consola

  1. Abre la página Información general de Cloud Run Functions:

    Ir a Cloud Run Functions

  2. Selecciona el proyecto en el que has habilitado las funciones de Cloud Run.

  3. Haz clic en Crear función.

  4. En el cuadro Nombre de la función, sustituye el nombre predeterminado por create_DLP_job.

  5. En el campo Activador, selecciona Cloud Storage.

  6. En el campo Tipo de evento, selecciona Finalizar o crear.

  7. En el campo Contenedor, haz clic en Examinar, selecciona el contenedor de cuarentena resaltándolo en la lista desplegable y, a continuación, haz clic en Seleccionar.

  8. Haz clic en Guardar.

  9. Haz clic en Siguiente.

  10. En Entorno de ejecución, selecciona Python 3.7.

  11. En Código fuente, marca Editor insertado.

  12. Sustituye el texto del cuadro main.py por el contenido del siguiente archivo https://github.com/GoogleCloudPlatform/dlp-cloud-functions-tutorials/blob/master/gcs-dlp-classification-python/main.py.

    Haz los cambios siguientes:

    • [PROJECT_ID_DLP_JOB & TOPIC]: el ID del proyecto que aloja tu función de Cloud Run y tu tema de Pub/Sub.
    • [YOUR_QUARANTINE_BUCKET] el nombre del segmento al que subirás los archivos que se van a procesar .
    • [YOUR_SENSITIVE_DATA_BUCKET]: el nombre del segmento al que vas a mover los archivos sensibles.
    • [YOUR_NON_SENSITIVE_DATA_BUCKET]: el nombre del segmento al que subirás los archivos que se van a procesar.
    • [PUB/SUB_TOPIC]: el nombre del tema de Pub/Sub que has creado anteriormente.
  13. En el cuadro de texto Punto de entrada, sustituye el texto predeterminado por el siguiente: create_DLP_job.

  14. Sustituye el texto del cuadro de texto requirements.txt por el contenido del siguiente archivo:https://github.com/GoogleCloudPlatform/dlp-cloud-functions-tutorials/blob/master/gcs-dlp-classification-python/requirements.txt.

  15. Haz clic en Desplegar.

    Si aparece una marca de verificación verde junto a la función, significa que la implementación se ha realizado correctamente.

    Despliegue correcto

gcloud

  1. Abre una sesión de Cloud Shell y clona el repositorio de GitHub que contiene el código y algunos archivos de datos de muestra:

    ABRIR EN Cloud Shell

  2. Cambia el directorio por la carpeta en la que se ha clonado el repositorio:

    cd ~dlp-cloud-functions-tutorials/gcs-dlp-classification-python/
  3. Haz las siguientes sustituciones en el archivo main.py:

    • [PROJECT_ID_DLP_JOB & TOPIC]: el ID del proyecto que aloja tu función de Cloud Run y tu tema de Pub/Sub.
    • [YOUR_QUARANTINE_BUCKET]: el nombre del segmento al que subirás los archivos que se van a procesar .
    • [YOUR_SENSITIVE_DATA_BUCKET]: el nombre del segmento al que vas a mover los archivos sensibles.
    • [YOUR_NON_SENSITIVE_DATA_BUCKET]: el nombre del segmento al que subirás los archivos que se van a procesar.
    • [PUB/SUB_TOPIC: el nombre del tema de Pub/Sub que has creado anteriormente.
  4. Despliega la función y sustituye [YOUR_QUARANTINE_BUCKET] por el nombre de tu segmento:

    gcloud functions deploy create_DLP_job --runtime python37 \
        --trigger-resource [YOUR_QUARANTINE_BUCKET] \
        --trigger-event google.storage.object.finalize
    
  5. Valida que la función se haya implementado correctamente:

    gcloud functions describe create_DLP_job

    Si el despliegue se ha realizado correctamente, el estado será similar al siguiente:

    status:  READY
    timeout:  60s
    

Cuando la función de Cloud se haya implementado correctamente, ve a la siguiente sección para crear la segunda función de Cloud.

Crear la segunda función

consola

  1. Abre la página Información general de Cloud Run Functions:

    IR A LA PÁGINA DE INFORMACIÓN GENERAL DE Cloud Run Functions

  2. Selecciona el proyecto en el que has habilitado las funciones de Cloud Run.

  3. Haz clic en Crear función.

  4. En el cuadro Nombre de la función, sustituye el nombre predeterminado por resolve_DLP.

  5. En el campo Activador, selecciona Pub/Sub.

  6. En el campo Seleccionar un tema de Cloud Pub/Sub, busca el tema de Pub/Sub que hayas creado antes.

  7. Haz clic en Guardar.

  8. Haz clic en Siguiente.

  9. En Entorno de ejecución, selecciona Python 3.7.

  10. En Código fuente, selecciona Editor insertado.

  11. En el cuadro de texto Punto de entrada, sustituye el texto predeterminado por resolve_DLP.

  12. Sustituye el texto del cuadro main.py por el contenido del siguiente archivo: https://github.com/GoogleCloudPlatform/dlp-cloud-functions-tutorials/blob/master/gcs-dlp-classification-python/main.py. Haz las siguientes sustituciones

    • [PROJECT_ID_DLP_JOB & TOPIC]: el ID del proyecto que aloja tu función de Cloud Run y tu tema de Pub/Sub.
    • [YOUR_QUARANTINE_BUCKET]: el nombre del segmento al que subirás los archivos que se van a procesar .
    • [YOUR_SENSITIVE_DATA_BUCKET]: el nombre del segmento al que vas a mover los archivos sensibles.
    • [YOUR_NON_SENSITIVE_DATA_BUCKET]: el nombre del segmento al que subirás los archivos que se van a procesar.
    • [PUB/SUB_TOPIC: el nombre del tema de Pub/Sub que has creado anteriormente.
  13. Haz clic en Desplegar.

    Si aparece una marca de verificación verde junto a la función, significa que la implementación se ha realizado correctamente.

    Despliegue correcto

gcloud

  1. Abre (o vuelve a abrir) una sesión de Cloud Shell y clona el repositorio de GitHub que contiene el código y algunos archivos de datos de ejemplo:

    ABRIR EN Cloud Shell

  2. Cambia el directorio a la carpeta que contiene el código Python:

    cd gcs-dlp-classification-python/

  3. Haz las siguientes sustituciones en el archivo main.py:

    • [PROJECT_ID_DLP_JOB & TOPIC]: el ID del proyecto que aloja tu función de Cloud Run y tu tema de Pub/Sub.
    • [YOUR_QUARANTINE_BUCKET]: el nombre del segmento al que subirás los archivos que se van a procesar.
    • [YOUR_SENSITIVE_DATA_BUCKET]: el nombre del segmento al que vas a mover los archivos sensibles.
    • [YOUR_NON_SENSITIVE_DATA_BUCKET]: el nombre del segmento al que subirás los archivos que se van a procesar.
    • [PUB/SUB_TOPIC: el nombre del tema de Pub/Sub que has creado anteriormente.
  4. Despliega la función y sustituye [PUB/SUB_TOPIC] por tu tema de Pub/Sub:

    gcloud functions deploy resolve_DLP --runtime python37 --trigger-topic [PUB/SUB_TOPIC]
  5. Valida que la función se haya implementado correctamente:

    gcloud functions describe resolve_DLP

    Si el despliegue se ha realizado correctamente, el estado será similar al siguiente:

    status:  READY
    timeout:  60s
    

Cuando la función de Cloud se haya implementado correctamente, ve a la siguiente sección.

Subir archivos de muestra al segmento de cuarentena

El repositorio de GitHub asociado a este artículo incluye archivos de datos de ejemplo. La carpeta contiene algunos archivos con datos sensibles y otros con datos no sensibles. Los datos sensibles se clasifican como datos que contienen uno o varios de los siguientes valores de INFO_TYPES:

US_SOCIAL_SECURITY_NUMBER
EMAIL_ADDRESS
PERSON_NAME
LOCATION
PHONE_NUMBER

Los tipos de datos que se usan para clasificar los archivos de muestra se definen en la constante INFO_TYPES del archivo main.py, que inicialmente se establece en 'FIRST_NAME,PHONE_NUMBER,EMAIL_ADDRESS,US_SOCIAL_SECURITY_NUMBER'.

  1. Si aún no has clonado el repositorio, abre Cloud Shell y clona el repositorio de GitHub que contiene el código y algunos archivos de datos de ejemplo:

    ABRIR EN Cloud Shell

  2. Cambia a las carpetas de los archivos de datos de muestra:

    cd ~/dlp-cloud-functions-tutorials/sample_data/
  3. Copia los archivos de datos de muestra en el segmento de cuarentena con el comando cp. Sustituye [YOUR_QUARANTINE_BUCKET] por el nombre de tu segmento de cuarentena:

    gcloud storage cp * gs://[YOUR_QUARANTINE_BUCKET]/

    Protección de Datos Sensibles inspecciona y clasifica cada archivo subido al contenedor de cuarentena y lo mueve al contenedor de destino adecuado en función de su clasificación.

  4. En la consola de Cloud Storage, abre la página Navegador de almacenamiento:

    IR AL NAVEGADOR DE Cloud Storage

  5. Selecciona uno de los segmentos de destino que has creado anteriormente y revisa los archivos subidos. Revisa también los demás segmentos que hayas creado.