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


En este instructivo, se muestra cómo implementar un sistema automatizado de cuarentena y clasificación de datos con Cloud Storage y otros productos de Google Cloud. En el instructivo, se da por hecho que estás familiarizado con Google Cloud y la programación básica de shell.

En cada organización, las personas a cargo de la protección de datos como tú se enfrentan a una cantidad creciente de datos, que se deben proteger y tratar de manera adecuada. La cuarentena y la clasificación de datos pueden ser complicadas y demandar mucho tiempo, especialmente, si abarcan cientos o miles de archivos por día.

¿Qué sucedería si pudieras subir cada archivo a su ubicación de cuarentena para que se clasifique de manera automática y se mueva a la ubicación correcta en función del resultado de la clasificación? En este instructivo, se muestra cómo implementar ese sistema con funciones de Cloud Run, Cloud Storage y Cloud Data Loss Prevention.

Objetivos

  • Crear depósitos de Cloud Storage para usar como parte de la canalización de cuarentena y clasificación
  • Crear un tema y una suscripción de Pub/Sub para notificarte cuando se complete el procesamiento de archivos
  • Crear una función simple de Cloud Functions que invoque la API de DLP cuando se suban los archivos
  • Subir algunos archivos de muestra al bucket de cuarentena para invocar la función de Cloud Functions. La función utiliza la API de DLP para inspeccionar y clasificar los archivos a fin de moverlos al bucket correcto

Costos

En este instructivo, se usan componentes facturables de Google Cloud, incluidos los siguientes:

  • Cloud Storage
  • Funciones de Cloud Run
  • Cloud Data Loss Prevention

Puedes utilizar la calculadora de precios para realizar una estimación de costos según el uso previsto.

Antes de comenzar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Run functions, Cloud Storage,Cloud Build Cloud Build, and Cloud Data Loss Prevention APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Cloud Run functions, Cloud Storage,Cloud Build Cloud Build, and Cloud Data Loss Prevention APIs.

    Enable the APIs

Otorga permisos a las cuentas de servicio

El primer paso es otorgar permisos a dos cuentas de servicio: la cuenta de servicio de funciones de Cloud Run y la de Cloud DLP.

Otorga permisos a la cuenta de servicio predeterminada de App Engine

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

    Ir a IAM

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

  3. Selecciona el ícono de edición junto a la cuenta de servicio.

  4. Agrega las siguientes funciones:

    • Cloud DLP > Administrador de DLP
    • Agente de servicio de la API de DLP (debes filtrar esta función para ubicarlo)
  5. Haz clic en Guardar.

Otorga permisos a la cuenta de servicio de Sensitive Data Protection

El agente de servicio de Cloud DLP se crea la primera vez que es necesario.

  1. En Cloud Shell, crea el agente de servicio de Cloud DLP mediante una llamada 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

    Reemplaza PROJECT_ID por el ID del proyecto.

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

    Ir a IAM

  3. Selecciona la casilla de verificación Incluir asignaciones de funciones proporcionadas por Google

  4. Busca la cuenta de servicio Agente de servicio de Cloud DLP. Esta cuenta tiene el formato service-[PROJECT_NUMBER]@dlp-api.iam.gserviceaccount.com. Reemplaza [PROJECT_NUMBER] por el nombre del proyecto.

  5. Selecciona el ícono de edición junto a la cuenta de servicio.

  6. Agrega la función Proyecto > Lector y haz clic en Guardar.

Cómo compilar la canalización de cuarentena y clasificación

En esta sección, compilarás 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 en la canalización corresponden a los siguientes pasos:

  1. Sube archivos a Cloud Storage.
  2. Invoca una función de Cloud Functions.
  3. Cloud DLP inspecciona y clasifica los datos.
  4. El archivo se mueve al bucket correspondiente.

Crea depósitos de Cloud Storage

Sigue las instrucciones que se describen en los lineamientos para nombrar depósitos y crea tres depósitos con nombres únicos, que usarás en este instructivo:

  • Depósito 1: Reemplaza [YOUR_QUARANTINE_BUCKET] por un nombre único.
  • Depósito 2: Reemplaza [YOUR_SENSITIVE_DATA_BUCKET] por un nombre único.
  • Depósito 3: Reemplaza [YOUR_NON_SENSITIVE_DATA_BUCKET] por un nombre único.

Console

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

    Ir a Cloud Storage

  2. Haz clic en Crear bucket.

  3. En el cuadro de texto Nombre del depósito, ingresa el nombre que seleccionaste para [YOUR_QUARANTINE_BUCKET] y, luego, haz clic en Crear.

  4. Repite estos pasos para los depósitos [YOUR_SENSITIVE_DATA_BUCKET] y [YOUR_NON_SENSITIVE_DATA_BUCKET].

gcloud

  1. Abre Cloud Shell:

    Ir a Cloud Shell

  2. Crea los tres depósitos 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]
    

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

Console

  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, ingresa un nombre del tema.

  4. Selecciona la casilla de verificación Agregar una suscripción predeterminada.

  5. Haz clic en Crear tema.

gcloud

  1. Abre Cloud Shell:

    Ir a Cloud Shell

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

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

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

Crea las funciones de Cloud Run

En esta sección, se detallan los pasos para implementar la secuencia de comandos de Python que contiene las siguientes dos funciones de Cloud Run:

  • Una función invocada cuando se sube un objeto a Cloud Storage
  • Una función invocada cuando se recibe un mensaje en la cola de Pub/Sub

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

Para habilitar las API, sigue estos pasos:

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

Crea la primera función

Console

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

    Ve a las funciones de Cloud Run

  2. Selecciona el proyecto para el que habilitaste las funciones de Cloud Run.

  3. Haz clic en Crear función.

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

  5. En el campo Activador, selecciona Cloud Storage.

  6. En el campo Tipo de evento, selecciona Finalizar/Crear.

  7. En el campo Depósito, haz clic en Explorar, selecciona el depósito de cuarentena marcando el depósito en la lista desplegable y, luego, haz clic en Seleccionar.

  8. Haga clic en Guardar.

  9. Haz clic en Siguiente.

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

  11. En Código fuente, marca Edición directa.

  12. Reemplaza el texto en el 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.

    Reemplaza lo siguiente:

    • [PROJECT_ID_DLP_JOB & TOPIC]: Es el ID del proyecto que aloja tu función de Cloud Run y tema de Pub/Sub.
    • [YOUR_QUARANTINE_BUCKET] es el nombre del bucket al que subirás los archivos que se procesarán.
    • [YOUR_SENSITIVE_DATA_BUCKET]: es el nombre del bucket al que moverás los archivos sensibles
    • [YOUR_NON_SENSITIVE_DATA_BUCKET]: es el nombre del bucket al que subirás los archivos que se procesarán.
    • [PUB/SUB_TOPIC]: es el nombre del tema de Pub/Sub que creaste antes.
  13. En el cuadro de texto Punto de entrada, reemplaza el texto predeterminado por lo siguiente: create_DLP_job.

  14. Reemplace el texto en el 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. Haga clic en Implementar.

    La marca de verificación verde ubicada junto a la función indica que la implementación se realizó correctamente.

    implementación exitosa

gcloud

  1. Abre la 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 los directorios a la carpeta a la que se clonó el repositorio.

    cd ~dlp-cloud-functions-tutorials/gcs-dlp-classification-python/
  3. Realiza los siguientes reemplazos en el archivo main.py.

    • [PROJECT_ID_DLP_JOB & TOPIC]: Es el ID del proyecto que aloja tu función de Cloud Run y tema de Pub/Sub.
    • [YOUR_QUARANTINE_BUCKET]: es el nombre del bucket al que subirás los archivos que se procesarán.
    • [YOUR_SENSITIVE_DATA_BUCKET]: es el nombre del bucket al que moverás los archivos sensibles
    • [YOUR_NON_SENSITIVE_DATA_BUCKET]: es el nombre del bucket al que subirás los archivos que se procesarán.
    • [PUB/SUB_TOPIC: es el nombre del tema de Pub/Sub que creaste antes.
  4. Para implementar la función, reemplaza [YOUR_QUARANTINE_BUCKET] por el nombre del depósito:

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

    gcloud functions describe create_DLP_job

    Un estado similar al siguiente indica que la implementación se realizó de forma correcta:

    status:  READY
    timeout:  60s
    

Cuando la función de Cloud Functions se haya implementado correctamente, pasa a la siguiente sección a fin de crear la segunda función.

Cómo crear la segunda función

Console

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

    IR A LA PÁGINA DESCRIPCIÓN GENERAL DE funciones de Cloud Run

  2. Selecciona el proyecto para el que habilitaste las funciones de Cloud Run.

  3. Haz clic en Crear función.

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

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

  6. En el campo Selecciona un tema de Cloud Pub/Sub, busca el tema de Pub/Sub que creaste 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 directo.

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

  12. Reemplaza el texto en el cuadro main.py por el contenido del siguiente archivo: https://github.com/GoogleCloudPlatform/dlp-cloud-functions-tutorials/blob/master/gcs-dlp- clasificación-python/main.py. Realiza los siguientes reemplazos

    • [PROJECT_ID_DLP_JOB & TOPIC]: Es el ID del proyecto que aloja tu función de Cloud Run y tema de Pub/Sub.
    • [YOUR_QUARANTINE_BUCKET]: es el nombre del bucket al que subirás los archivos que se procesarán.
    • [YOUR_SENSITIVE_DATA_BUCKET]: es el nombre del bucket al que moverás los archivos sensibles
    • [YOUR_NON_SENSITIVE_DATA_BUCKET]: es el nombre del bucket al que subirás los archivos que se procesarán.
    • [PUB/SUB_TOPIC: es el nombre del tema de Pub/Sub que creaste antes.
  13. Haga clic en Implementar.

    La marca de verificación verde ubicada junto a la función indica que la implementación se realizó correctamente.

    implementación exitosa

gcloud

  1. Abre (o vuelve a abrir) la 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 los directorios por la carpeta con el código de Python:

    cd gcs-dlp-classification-python/

  3. Realiza los siguientes reemplazos en el archivo main.py:

    • [PROJECT_ID_DLP_JOB & TOPIC]: Es el ID del proyecto que aloja tu función de Cloud Run y tema de Pub/Sub.
    • [YOUR_QUARANTINE_BUCKET]: es el nombre del bucket al que subirás los archivos que se procesarán.
    • [YOUR_SENSITIVE_DATA_BUCKET]: es el nombre del bucket al que moverás los archivos sensibles
    • [YOUR_NON_SENSITIVE_DATA_BUCKET]: es el nombre del bucket al que subirás los archivos que se procesarán.
    • [PUB/SUB_TOPIC: es el nombre del tema de Pub/Sub que creaste antes.
  4. Implementa la función y reemplaza [PUB/SUB_TOPIC] por tu tema de Pub/Sub:

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

    gcloud functions describe resolve_DLP

    Un estado similar al siguiente indica que la implementación se realizó de forma correcta:

    status:  READY
    timeout:  60s
    

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

Cómo subir archivos de muestra al bucket de cuarentena

El repositorio de GitHub asociado con este artículo incluye archivos de datos de muestra. La carpeta contiene algunos archivos con datos sensibles y otros archivos sin datos sensibles. Los datos sensibles se clasifican como tal si tienen uno o más valores 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 en el archivo main.py, que se establece inicialmente en 'FIRST_NAME,PHONE_NUMBER,EMAIL_ADDRESS,US_SOCIAL_SECURITY_NUMBER'.

  1. Si todavía no clonaste el repositorio, abre 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 las carpetas para los archivos de datos de muestra:

    cd ~/dlp-cloud-functions-tutorials/sample_data/
  3. Copia los archivos de datos de muestra en el depósito de cuarentena mediante el comando cp y reemplaza [YOUR_QUARANTINE_BUCKET] por el nombre de tu depósito de cuarentena:

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

    Cloud DLP inspecciona y clasifica cada archivo subido al bucket de cuarentena y los mueve al bucket de destino en función de la clasificación.

  4. En Cloud Storage Console, abre la página del navegador de Storage:

    IR AL NAVEGADOR DE Cloud Storage

  5. Selecciona uno de los depósitos de destino que creaste anteriormente y revisa los archivos subidos. También revisa los demás depósitos que creaste.

Limpia

Una vez que completes el instructivo, puedes limpiar los recursos que creaste para que dejen de usar la cuota y generar cargos. En las siguientes secciones, se describe cómo borrar o desactivar estos recursos.

Borra el proyecto

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

¿Qué sigue?