Automatiza la clasificación de 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 mediante Cloud Functions, 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 depósito 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 depósito correcto

Costos

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

  • Cloud Storage
  • Cloud Functions
  • Cloud Data Loss Prevention

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

Antes de comenzar

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En la página de selección de proyectos de Cloud Console, selecciona o crea un proyecto de Cloud.

    Ir a la página Selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud. Obtén información sobre cómo confirmar que tienes habilitada la facturación para tu proyecto.

  4. Habilita las API de Cloud Functions, Cloud Storage, and Cloud Data Loss Prevention.

    Habilita las API

Otorga permisos a las cuentas de servicio

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

Otorga permisos a la cuenta de servicio predeterminada de App Engine

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

    IR A LA PÁGINA IAM Y ADMINISTRACIÓN

  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:

    • Proyecto > Propietario
    • Cloud DLP > Administrador de DLP
    • Administración de servicio > Agente de servicio de la API de DLP
  5. Haz clic en Guardar.

Otorga permisos a la cuenta de servicio de DLP

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

    IR A LA PÁGINA IAM Y ADMINISTRACIÓN

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

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

  4. 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 depósito 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 Cloud Console, abre el navegador de Cloud Storage:

    IR AL NAVEGADOR DE Cloud Storage

  2. Haz clic en Crear depósito.

  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:

    gsutil mb gs://[YOUR_QUARANTINE_BUCKET]
    gsutil mb gs://[YOUR_SENSITIVE_DATA_BUCKET]
    gsutil mb 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 un tema.

  3. En el cuadro de texto que tiene una entrada con el formato PROJECTS/[YOUR_PROJECT_NAME]/TOPICS/, agrega el nombre del tema de la siguiente manera:

    PROJECTS/[YOUR_PROJECT_NAME]/TOPICS/[PUB/SUB_TOPIC]
  4. Haz clic en Crear.

  5. Selecciona el tema nuevo que creaste, haz clic en los tres puntos (…) que siguen al nombre y selecciona Suscripción nueva.

  6. En el cuadro de texto que tiene una entrada con el formato PROJECTS/[YOUR_PROJECT_NAME]/TOPICS/[PUB/SUB_TOPIC], agrega el nombre de la suscripción de la siguiente manera:

    PROJECTS/[YOUR_PROJECT_NAME]/TOPICS/[PUB/SUB_TOPIC]/[PUB/SUB_SUBSCRIPTION]
  7. Haz clic en Crear.

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 una función de Cloud Functions

En esta sección, se detallan los pasos para implementar la secuencia de comandos de Python que contiene dos funciones de Cloud Functions.

  • 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

Crea la primera función

Console

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

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

  2. Selecciona el proyecto para el que quieres habilitar Cloud Functions.

  3. Haz clic en Crear función.

  4. En el cuadro Nombre, reemplaza el nombre predeterminado por create_DLP_job.

  5. En el campo Activador, selecciona Cloud Storage.

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

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

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

  9. Pega el siguiente código en el cuadro main.py y reemplaza el texto existente por lo siguiente:

    """ Copyright 2018, Google, Inc.
    
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at
    
      http://www.apache.org/licenses/LICENSE-2.0
    
    Unless  required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
    
    Authors: Yuhan Guo, Zhaoyuan Sun, Fengyi Huang, Weimu Song.
    Date:    October 2018
    
    """
    
    from google.cloud import dlp
    from google.cloud import storage
    from google.cloud import pubsub
    import os
    
    # ----------------------------
    #  User-configurable Constants
    
    PROJECT_ID = '[PROJECT_ID_HOSTING_STAGING_BUCKET]'
    """The bucket the to-be-scanned files are uploaded to."""
    STAGING_BUCKET = '[YOUR_QUARANTINE_BUCKET]'
    """The bucket to move "sensitive" files to."""
    SENSITIVE_BUCKET = '[YOUR_SENSITIVE_DATA_BUCKET]'
    """The bucket to move "non sensitive" files to."""
    NONSENSITIVE_BUCKET = '[YOUR_NON_SENSITIVE_DATA_BUCKET]'
    """ Pub/Sub topic to notify once the  DLP job completes."""
    PUB_SUB_TOPIC = '[PUB/SUB_TOPIC]'
    """The minimum_likelihood (Enum) required before returning a match"""
    """For more info visit: https://cloud.google.com/dlp/docs/likelihood"""
    MIN_LIKELIHOOD = 'POSSIBLE'
    """The maximum number of findings to report (0 = server maximum)"""
    MAX_FINDINGS = 0
    """The infoTypes of information to match"""
    """For more info visit: https://cloud.google.com/dlp/docs/concepts-infotypes"""
    INFO_TYPES = [
        'FIRST_NAME', 'PHONE_NUMBER', 'EMAIL_ADDRESS', 'US_SOCIAL_SECURITY_NUMBER'
    ]
    
    # End of User-configurable Constants
    # ----------------------------------
    
    # Initialize the Google Cloud client libraries
    dlp = dlp.DlpServiceClient()
    storage_client = storage.Client()
    publisher = pubsub.PublisherClient()
    subscriber = pubsub.SubscriberClient()
    
    def create_DLP_job(data, done):
      """This function is triggered by new files uploaded to the designated Cloud Storage quarantine/staging bucket.
    
           It creates a dlp job for the uploaded file.
        Arg:
           data: The Cloud Storage Event
        Returns:
            None. Debug information is printed to the log.
        """
      # Get the targeted file in the quarantine bucket
      file_name = data['name']
      print('Function triggered for file [{}]'.format(file_name))
    
      # Prepare info_types by converting the list of strings (INFO_TYPES) into a list of dictionaries
      info_types = [{'name': info_type} for info_type in INFO_TYPES]
    
      # Convert the project id into a full resource id.
      parent = dlp.project_path(PROJECT_ID)
    
      # Construct the configuration dictionary.
      inspect_job = {
          'inspect_config': {
              'info_types': info_types,
              'min_likelihood': MIN_LIKELIHOOD,
              'limits': {
                  'max_findings_per_request': MAX_FINDINGS
              },
          },
          'storage_config': {
              'cloud_storage_options': {
                  'file_set': {
                      'url':
                          'gs://{bucket_name}/{file_name}'.format(
                              bucket_name=STAGING_BUCKET, file_name=file_name)
                  }
              }
          },
          'actions': [{
              'pub_sub': {
                  'topic':
                      'projects/{project_id}/topics/{topic_id}'.format(
                          project_id=PROJECT_ID, topic_id=PUB_SUB_TOPIC)
              }
          }]
      }
    
      # Create the DLP job and let the DLP api processes it.
      try:
        dlp.create_dlp_job(parent, inspect_job)
        print('Job created by create_DLP_job')
      except Exception as e:
        print(e)
    
    def resolve_DLP(data, context):
      """This function listens to the pub/sub notification from function above.
    
        As soon as it gets pub/sub notification, it picks up results from the
        DLP job and moves the file to sensitive bucket or nonsensitive bucket
        accordingly.
        Args:
            data: The Cloud Pub/Sub event
    
        Returns:
            None. Debug information is printed to the log.
        """
      # Get the targeted DLP job name that is created by the create_DLP_job function
      job_name = data['attributes']['DlpJobName']
      print('Received pub/sub notification from DLP job: {}'.format(job_name))
    
      # Get the DLP job details by the job_name
      job = dlp.get_dlp_job(job_name)
      print('Job Name:{name}\nStatus:{status}'.format(
          name=job.name, status=job.state))
    
      # Fetching Filename in Cloud Storage from the original dlpJob config.
      # See defintion of "JSON Output' in Limiting Cloud Storage Scans':
      # https://cloud.google.com/dlp/docs/inspecting-storage
    
      file_path = (
          job.inspect_details.requested_options.job_config.storage_config
          .cloud_storage_options.file_set.url)
      file_name = os.path.basename(file_path)
    
      info_type_stats = job.inspect_details.result.info_type_stats
      source_bucket = storage_client.get_bucket(STAGING_BUCKET)
      source_blob = source_bucket.blob(file_name)
      if (len(info_type_stats) > 0):
        # Found at least one sensitive data
        for stat in info_type_stats:
          print('Found {stat_cnt} instances of {stat_type_name}.'.format(
              stat_cnt=stat.count, stat_type_name=stat.info_type.name))
        print('Moving item to sensitive bucket')
        destination_bucket = storage_client.get_bucket(SENSITIVE_BUCKET)
        source_bucket.copy_blob(source_blob, destination_bucket,
                                file_name)  # copy the item to the sensitive bucket
        source_blob.delete()  # delete item from the quarantine bucket
    
      else:
        # No sensitive data found
        print('Moving item to non-sensitive bucket')
        destination_bucket = storage_client.get_bucket(NONSENSITIVE_BUCKET)
        source_bucket.copy_blob(
            source_blob, destination_bucket,
            file_name)  # copy the item to the non-sensitive bucket
        source_blob.delete()  # delete item from the quarantine bucket
      print('{} Finished'.format(file_name))
    
  10. Ajusta las siguientes líneas en el código que pegaste en el cuadro main.py y reemplaza las variables por el ID del proyecto, los depósitos correspondientes y los nombres de suscripción y tema de Pub/Sub que creaste antes.

    [YOUR_QUARANTINE_BUCKET]
    [YOUR_SENSITIVE_DATA_BUCKET]
    [YOUR_NON_SENSITIVE_DATA_BUCKET]
    [PROJECT_ID_HOSTING_STAGING_BUCKET]
    [PUB/SUB_TOPIC]
    
  11. En el cuadro de texto Función a ejecutar, reemplaza hello_gcs por create_DLP_job.

  12. Pega el siguiente código en el cuadro de texto requirements.txt y reemplaza el texto existente por lo siguiente:

    google-cloud-dlp
    google-cloud-pubsub
    google-cloud-storage
    
    
  13. Haz clic en Guardar.

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

    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 gcs-dlp-classification-python/
  3. Para ajustar las siguientes líneas del código en el cuadro main.py, reemplaza las variables del depósito por los depósitos correspondientes que creaste antes. También reemplaza el tema de Pub/Sub y las variables de suscripción con los nombres que elijas.

    [YOUR_QUARANTINE_BUCKET]
    [YOUR_SENSITIVE_DATA_BUCKET]
    [YOUR_NON_SENSITIVE_DATA_BUCKET]
    [PROJECT_ID_HOSTING_STAGING_BUCKET]
    [PUB/SUB_TOPIC]
    
  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 Functions:

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

  2. Selecciona el proyecto para el que quieres habilitar Cloud Functions.

  3. Haz clic en Crear función.

  4. En el cuadro Nombre, reemplaza el nombre predeterminado por resolve_DLP.

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

  6. En el campo Tema, ingresa [PUB/SUB_TOPIC].

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

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

  9. Pega el siguiente código en el cuadro main.py y reemplaza el texto existente por lo siguiente:

    """ Copyright 2018, Google, Inc.
    
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at
    
      http://www.apache.org/licenses/LICENSE-2.0
    
    Unless  required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
    
    Authors: Yuhan Guo, Zhaoyuan Sun, Fengyi Huang, Weimu Song.
    Date:    October 2018
    
    """
    
    from google.cloud import dlp
    from google.cloud import storage
    from google.cloud import pubsub
    import os
    
    # ----------------------------
    #  User-configurable Constants
    
    PROJECT_ID = '[PROJECT_ID_HOSTING_STAGING_BUCKET]'
    """The bucket the to-be-scanned files are uploaded to."""
    STAGING_BUCKET = '[YOUR_QUARANTINE_BUCKET]'
    """The bucket to move "sensitive" files to."""
    SENSITIVE_BUCKET = '[YOUR_SENSITIVE_DATA_BUCKET]'
    """The bucket to move "non sensitive" files to."""
    NONSENSITIVE_BUCKET = '[YOUR_NON_SENSITIVE_DATA_BUCKET]'
    """ Pub/Sub topic to notify once the  DLP job completes."""
    PUB_SUB_TOPIC = '[PUB/SUB_TOPIC]'
    """The minimum_likelihood (Enum) required before returning a match"""
    """For more info visit: https://cloud.google.com/dlp/docs/likelihood"""
    MIN_LIKELIHOOD = 'POSSIBLE'
    """The maximum number of findings to report (0 = server maximum)"""
    MAX_FINDINGS = 0
    """The infoTypes of information to match"""
    """For more info visit: https://cloud.google.com/dlp/docs/concepts-infotypes"""
    INFO_TYPES = [
        'FIRST_NAME', 'PHONE_NUMBER', 'EMAIL_ADDRESS', 'US_SOCIAL_SECURITY_NUMBER'
    ]
    
    # End of User-configurable Constants
    # ----------------------------------
    
    # Initialize the Google Cloud client libraries
    dlp = dlp.DlpServiceClient()
    storage_client = storage.Client()
    publisher = pubsub.PublisherClient()
    subscriber = pubsub.SubscriberClient()
    
    def create_DLP_job(data, done):
      """This function is triggered by new files uploaded to the designated Cloud Storage quarantine/staging bucket.
    
           It creates a dlp job for the uploaded file.
        Arg:
           data: The Cloud Storage Event
        Returns:
            None. Debug information is printed to the log.
        """
      # Get the targeted file in the quarantine bucket
      file_name = data['name']
      print('Function triggered for file [{}]'.format(file_name))
    
      # Prepare info_types by converting the list of strings (INFO_TYPES) into a list of dictionaries
      info_types = [{'name': info_type} for info_type in INFO_TYPES]
    
      # Convert the project id into a full resource id.
      parent = dlp.project_path(PROJECT_ID)
    
      # Construct the configuration dictionary.
      inspect_job = {
          'inspect_config': {
              'info_types': info_types,
              'min_likelihood': MIN_LIKELIHOOD,
              'limits': {
                  'max_findings_per_request': MAX_FINDINGS
              },
          },
          'storage_config': {
              'cloud_storage_options': {
                  'file_set': {
                      'url':
                          'gs://{bucket_name}/{file_name}'.format(
                              bucket_name=STAGING_BUCKET, file_name=file_name)
                  }
              }
          },
          'actions': [{
              'pub_sub': {
                  'topic':
                      'projects/{project_id}/topics/{topic_id}'.format(
                          project_id=PROJECT_ID, topic_id=PUB_SUB_TOPIC)
              }
          }]
      }
    
      # Create the DLP job and let the DLP api processes it.
      try:
        dlp.create_dlp_job(parent, inspect_job)
        print('Job created by create_DLP_job')
      except Exception as e:
        print(e)
    
    def resolve_DLP(data, context):
      """This function listens to the pub/sub notification from function above.
    
        As soon as it gets pub/sub notification, it picks up results from the
        DLP job and moves the file to sensitive bucket or nonsensitive bucket
        accordingly.
        Args:
            data: The Cloud Pub/Sub event
    
        Returns:
            None. Debug information is printed to the log.
        """
      # Get the targeted DLP job name that is created by the create_DLP_job function
      job_name = data['attributes']['DlpJobName']
      print('Received pub/sub notification from DLP job: {}'.format(job_name))
    
      # Get the DLP job details by the job_name
      job = dlp.get_dlp_job(job_name)
      print('Job Name:{name}\nStatus:{status}'.format(
          name=job.name, status=job.state))
    
      # Fetching Filename in Cloud Storage from the original dlpJob config.
      # See defintion of "JSON Output' in Limiting Cloud Storage Scans':
      # https://cloud.google.com/dlp/docs/inspecting-storage
    
      file_path = (
          job.inspect_details.requested_options.job_config.storage_config
          .cloud_storage_options.file_set.url)
      file_name = os.path.basename(file_path)
    
      info_type_stats = job.inspect_details.result.info_type_stats
      source_bucket = storage_client.get_bucket(STAGING_BUCKET)
      source_blob = source_bucket.blob(file_name)
      if (len(info_type_stats) > 0):
        # Found at least one sensitive data
        for stat in info_type_stats:
          print('Found {stat_cnt} instances of {stat_type_name}.'.format(
              stat_cnt=stat.count, stat_type_name=stat.info_type.name))
        print('Moving item to sensitive bucket')
        destination_bucket = storage_client.get_bucket(SENSITIVE_BUCKET)
        source_bucket.copy_blob(source_blob, destination_bucket,
                                file_name)  # copy the item to the sensitive bucket
        source_blob.delete()  # delete item from the quarantine bucket
    
      else:
        # No sensitive data found
        print('Moving item to non-sensitive bucket')
        destination_bucket = storage_client.get_bucket(NONSENSITIVE_BUCKET)
        source_bucket.copy_blob(
            source_blob, destination_bucket,
            file_name)  # copy the item to the non-sensitive bucket
        source_blob.delete()  # delete item from the quarantine bucket
      print('{} Finished'.format(file_name))
    
  10. Ajusta las siguientes líneas en el código que pegaste en el cuadro main.py y reemplaza las variables por el ID del proyecto, los depósitos correspondientes y los nombres de suscripción y tema de Pub/Sub que creaste antes.

    [YOUR_QUARANTINE_BUCKET]
    [YOUR_SENSITIVE_DATA_BUCKET]
    [YOUR_NON_SENSITIVE_DATA_BUCKET]
    [PROJECT_ID_HOSTING_STAGING_BUCKET]
    [PUB/SUB_TOPIC]
    
  11. En el cuadro de texto Función a ejecutar, reemplaza helloPubSub por resolve_DLP.

  12. Pega lo siguiente en el cuadro de texto requirements.txt y reemplaza el texto existente por lo siguiente:

    google-cloud-dlp
    google-cloud-pubsub
    google-cloud-storage
    
    
  13. Haz clic en Guardar.

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

    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. Para ajustar las siguientes líneas del código en el cuadro main.py, reemplaza las variables del depósito por los depósitos correspondientes que creaste antes. También reemplaza el tema de Pub/Sub y las variables de suscripción con los nombres que elijas.

    [YOUR_QUARANTINE_BUCKET]
    [YOUR_SENSITIVE_DATA_BUCKET]
    [YOUR_NON_SENSITIVE_DATA_BUCKET]
    [PROJECT_ID_HOSTING_STAGING_BUCKET]
    [PUB/SUB_TOPIC]
    
  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 depósito 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 [‘PHONE_NUMBER', ‘EMAIL_ADDRESS'].

  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 gsutil y reemplaza [YOUR_QUARANTINE_BUCKET] por el nombre de tu depósito de cuarentena:

    gsutil -m  cp * gs://[YOUR_QUARANTINE_BUCKET]/

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

  4. En la consola de Cloud Storage, abre la página 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.

Realiza una limpieza

Una vez que termines este instructivo, podrás limpiar los recursos que creaste en Google Cloud para que no consuman la cuota y no se te cobre por ellos en el futuro. En las siguientes secciones, se describe cómo borrar o desactivar estos recursos.

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