Usa un proxy de DLP para interactuar con Cloud SQL

En este instructivo, se muestra cómo puedes usar un proxy que pasa los resultados de una consulta a través de Prevención de pérdida de datos de Cloud (Cloud DLP) para que los resultados que se muestran se identifiquen con un token o se desidentifiquen. Este proxy es una demostración para este instructivo y no se pensó con fines de producción.

El instructivo está dirigido a administradores de bases de datos, profesionales de seguridad y arquitectos de la nube interesados en usar Cloud DLP para asignar un token a los datos almacenados en Cloud SQL o desidentificarlos. En este instructivo, se supone que estás familiarizado con Cloud Shell y Cloud SQL.

En cada organización, hay una cantidad de datos almacenados cada vez mayor, muchos de los cuales pueden considerarse datos sensibles. No todos los que acceden a estos datos almacenados necesitan ver los datos sensibles cuando ejecutan consultas en la base de datos.

En este instructivo, se muestra una forma en la que puedes permitir que los usuarios accedan a una base de datos de Cloud SQL que contenga datos sensibles, pero evitar que estos datos sensibles se vean cuando se observan los resultados de la consulta.

En el siguiente diagrama, se muestra la arquitectura de implementación para este instructivo.

Arquitectura de implementación en la que los usuarios pueden acceder a la base de datos de Cloud SQL.

En este instructivo, configuras un proxy de DLP que actúa como una interfaz entre Cloud SQL y un cliente de SQL simple.

Objetivos

  • Crear una base de datos y propagar una tabla con datos sensibles de muestra
  • Crear plantillas de Cloud DLP
  • Descargar el servidor proxy de DLP y los archivos JAR del cliente
  • Configurar el proxy de DLP para conectarte a la base de datos de la instancia de Cloud SQL y usar las plantillas de Cloud DLP
  • Probar las funciones del proxy

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

    Habilita las API

Crea una base de datos de Cloud SQL para MySQL

En esta sección, crearás una instancia de Cloud SQL, una base de datos de Cloud SQL para MySQL y agregarás algunos datos sensibles de muestra.

  1. En Cloud Console, activa Cloud Shell.

    Activar Cloud Shell

    En la parte inferior de Cloud Console, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell que tiene el SDK de Cloud preinstalado, incluida la herramienta de línea de comandos de gcloud, y valores ya establecidos para el proyecto actual. La inicialización de la sesión puede tomar unos minutos.

  2. Todos los comandos de este instructivo se ejecutan en Cloud Shell.
  3. Copia los archivos necesarios para completar el instructivo del depósito público de Google Cloud Storage en una carpeta llamada gcp-dlp-tutorial:
    mkdir gcp-dlp-proxy-tutorial
    gsutil cp  gs://solutions-public-assets/dlp-cloudsql-proxy/*.* gcp-dlp-proxy-tutorial
    
  4. Configura el proyecto de Cloud:
    gcloud config set project project-id
    

    Reemplaza los siguientes elementos:

    • project-id: El ID del proyecto de Cloud
  5. Cambia los directorios en la carpeta en la que copiaste los archivos del instructivo:
    cd  gcp-dlp-proxy-tutorial
    
  6. Para ver una lista de zonas, ejecuta el siguiente comando:
    gcloud compute zones list
    

    Consulta Geografía y regiones para obtener más información sobre las zonas.

  7. Elige una zona para crear la instancia de Cloud SQL y exporta la zona como una variable de entorno:
    export ZONE=zone
    

    Reemplaza los siguientes elementos:

    • zone: Una zona de tu elección en la que creas la instancia de Cloud SQL
  8. Crea una instancia de Cloud SQL para MySQL llamada dlp-test-instance:
    gcloud sql instances create dlp-test-instance  --zone  $ZONE
    

    La instancia se crea cuando el resultado es similar al que se encuentra a continuación:

    Creating Cloud SQL instance...done.
    Created [https://www.googleapis.com/sql/v1beta4/projects/[PROJECT_ID]/instances/dlp-test-instance].
    NAME               DATABASE_VERSION  LOCATION  TIER              PRIMARY_ADDRESS  PRIVATE_ADDRESS  STATUS
    dlp-test-instance  MYSQL_5_7         [ZONE]    db-n1-standard-1  35.195.26.16     -                RUNNABLE
    
  9. Configura la contraseña para el usuario root@% de MySQL.
    gcloud sql users set-password root \
      --host=% --instance=dlp-test-instance \
      --password=password
    

    Reemplaza los siguientes elementos:

    • password: Una contraseña segura

    El resultado muestra la siguiente información:

    Updating Cloud SQL user...done.
    
  10. Crea una base de datos en la instancia llamada dlp-test-db:
    gcloud sql databases create  dlp-test-db --instance dlp-test-instance
    

    El resultado es similar a este:

    Creating Cloud SQL database...done.
    Created database [dlp-test-db].
    instance: dlp-test-instance
    name: dlp-test-db
    project: project-id
    
  11. Crea un usuario de base de datos llamado dlptester:
    gcloud sql users create dlptester \
      --host=% --instance=dlp-test-instance --password=password-database
    

    Reemplaza los siguientes elementos:

    • password-database: Sustituye una contraseña segura. Anótala porque la necesitarás más adelante en este instructivo.

    El resultado muestra la siguiente información:

    Creating Cloud SQL user...done.
    Created user [dlptester].
    
  12. Conéctate a la instancia de Cloud SQL para MySQL:
    gcloud sql connect dlp-test-instance  --user=dlptester
    

    Cuando se te solicite, ingresa password-database.

  13. En el mensaje de MySQL, crea una tabla llamada TEST_DATA y propágala con algunas filas de datos sensibles de muestra:
    source create_test_data.sql
    
  14. En el mensaje de MySQL, ejecuta una consulta para mostrar que los datos de prueba se cargaron en la tabla:
    select * from TEST_DATA LIMIT 10;
    

    Los resultados de la consulta son similares a los siguientes:

    MySQL [dlp-test-db]> select * from TEST_DATA LIMIT 10;
    +------+---------------------+--------------+-------------+--------+
    | id   | email               | phone        | ssn         | metric |
    +------+---------------------+--------------+-------------+--------+
    |    1 | mallory@example.org | 858-222-0222 | 222-22-2222 |      5 |
    |    2 | james@example.org   | 858-333-0333 | 333-33-3333 |      8 |
    |    3 | mallory@example.org | 858-222-0222 | 222-22-2222 |      8 |
    |    4 | maria@example.org   | 858-444-0444 | 444-44-4444 |      1 |
    |    1 | mallory@example.org | 858-222-0222 | 222-22-2222 |      5 |
    |    2 | james@example.org   | 858-333-0333 | 333-33-3333 |      8 |
    |    3 | mallory@example.org | 858-222-0222 | 222-22-2222 |      8 |
    |    4 | maria@example.org   | 858-444-0444 | 444-44-4444 |      1 |
    +------+---------------------+--------------+-------------+--------+
    8 rows in set (0.00 sec)
    
  15. Sal del cliente MySQL:
    exit
    

Crea plantillas de Cloud DLP

En esta sección, crearás dos plantillas de Cloud DLP. Una plantilla de inspección para inspeccionar los datos en las tablas TEST_DATA en busca de datos sensibles según lo definido por los infotipos. La segunda es una plantilla de desidentificación para agregar tokens a los datos sensibles definidos por los infotipos.

Crea una plantilla de inspección

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

    IR A CLOUD DLP

  2. Haz clic en Crear y selecciona Plantilla.

  3. En el campo ID de plantilla, ingresa inspect-template-1.

  4. Haz clic en Continuar.

  5. Configura los Infotipos como EMAIL_ADDRESS, PHONE_NUMBER y US_SOCIAL_SECURITY_NUMBER.

  6. Haz clic en Crear.

Crea una plantilla de desidentificación

En esta sección, creas una plantilla de desidentificación llamada de-identify-template-1. Esta se configuró para reemplazar la información sensible con un valor subrogado que se generó mediante el uso de hash criptográfico. Para obtener más información, consulta la sección cryptoHashConfig de la documentación de Cloud DLP.

  1. Ve al Explorador de API.

  2. En el campo superior, reemplaza [YOUR-PROJECT] por el ID del proyecto de Cloud.

  3. Selecciona Ejecutar y, cuando se te solicite, vuelve a seleccionar Ejecutar.

    Obtendrás una respuesta 200 y un resultado similar al siguiente:

    {
      "name": "projects/YOUR-PROJECT-ID/deidentifyTemplates/de-identify-template-1",
      "createTime": "2019-10-15T12:46:51.944253Z",
      "updateTime": "2019-10-15T12:46:51.944253Z",
      "deidentifyConfig": {
        "infoTypeTransformations": {
          "transformations": [
            {
              "infoTypes": [
                {
                  "name": "PHONE_NUMBER"
                },
                {
                  "name": "US_SOCIAL_SECURITY_NUMBER"
                },
                {
                  "name": "EMAIL_ADDRESS"
                }
              ],
              "primitiveTransformation": {
                "cryptoDeterministicConfig": {
                  "cryptoKey": {
                    "transient": {
                      "name": "abc"
                    }
                  },
                  "surrogateInfoType": {
                    "name": "S1"
                  }
    
  4. A fin de validar que la plantilla de desidentificación se guardó de forma correcta, vuelve al Explorador de API y realiza una llamada para enumerar las plantillas.

  5. En el campo superior, ingresa projects/project-id.

  6. Selecciona Ejecutar y, cuando se te solicite, vuelve a seleccionar Ejecutar.

    El resultado es similar al siguiente y, además, incluye la plantilla que creaste:

    Resultado del Explorador de API.

Configura y usa el proxy de DLP

En esta sección, configurarás el proxy de DLP, te conectarás a él mediante el cliente y probarás que Cloud DLP procese los resultados de la consulta.

  1. En Cloud Shell, cambia al directorio con la carpeta en la que copiaste los archivos del instructivo:

    cd  ~/gcp-dlp-proxy-tutorial
    
  2. Edita el archivo de configuración del servidor proxy de DLP:

    nano config.json
    
  3. Edita las siguientes líneas y reemplaza los marcadores de posición por los valores que reflejan la configuración

    "db_instance": "project_id:region:instance_name",
    "db_dbname": "dbase_name",
    "projectID": "project_id",
    "audit_template": "inspect_template",
     "deidentify_template": "deidentify_template",
    

    Reemplaza los siguientes elementos:

    • project_id: El ID del proyecto de Cloud
    • region: El nombre de la región correspondiente a la zona en la que se creó la instancia de Cloud SQL. Por ejemplo, si la instancia se creó en la zona us-central1-a, entonces la región es us-central1.
    • instance_name: El nombre de la instancia de Cloud SQL, como dlp-test-instance
    • dbase_name: El nombre de la base de datos, como dlp-test-db
    • inspect_template: El nombre de la plantilla de inspección, como inspect-template-1
    • inspect_template: El nombre de la plantilla de desidentificación, como de-identify-template-1
  4. Para iniciar el proxy de DLP, ejecuta el proxy en segundo plano y dirige el resultado de la terminal al archivo log.txt:

    java -jar dlp-cloudsql-proxy-server.jar database_userpassword-databaselog.txt 2>&1 &
    

    Reemplaza los siguientes elementos:

    • database_user: El nombre de usuario para el usuario de la base de datos
    • password-database: La contraseña del usuario de la base de datos que creaste antes
  5. Para verificar que el proxy de DLP se esté ejecutando, verifica que el proceso esté en ejecución:

    ps -ax | grep dlp-cloudsql-proxy-server.jar
    

    El proceso que ejecuta el proxy de DLP se muestra en el resultado:

    1233 pts/1    Sl     0:08 java -jar dlP-cloudsql-proxy-Server.jar dlptester XXXXXXXX
    1266 pts/1    S+     0:00 grep --color=auto dlp-cloud sql-proxy-Server
    

    Si no ves el proceso en ejecución, revisa el archivo log.txt para ver si hay mensajes de error.

  6. Inicia el cliente simple proporcionado para conectarte al proxy de DLP en el puerto 5000:

    java -jar dlp-sql-proxy-client-0.1.0.jar 5000
    
  7. Desde el cliente, ejecuta una consulta simple. Este comando puede tardar unos minutos porque Cloud DLP debe procesar los datos antes de devolvértelos.

    select * from TEST_DATA LIMIT 10;
    

    El resultado contiene el número de teléfono, la dirección de correo electrónico y los valores de SSN en los resultados de la consulta que se reemplazaron por valores subrogados con un hash de manera criptográfica. Compara esto con los resultados que se mostraron cuando no se usó el proxy antes.

    Connected to SQL Proxy
    Enter query here (enter "quit" to disconnect):
    select * from TEST_DATA LIMIT 10;
    id: 1
    phone: S1(40):AYnPXA6QcxlpOITeaZZM3+U/s7KtXyTqv5KAbB8=
    metric: 5
    email: S1(48):AS8hnzz6g1fGCabK2cbhPn5X7Qvc7FKmLTXnKF1iKF2nRjGQ
    ssn: S1(40):AQ1jSCdIsctniCkCHNEbsc+kliJArHmM6bOJRg==
    
    id: 2
    phone: S1(40):AfiaKlOYHAzgWGtrkpvaCWUY1e2yvMaK7IQvM/M=
    metric: 8
    email: S1(48):ASF7UBFuZ/xUzXJjD1Ap745xcGmKpTjw+IwIBB/F/OX53w==
    ssn: S1(40):AWYXh7U8PhNUZu+fXLuLFS0KCMmcM5uKH17rig==
    
    id: 3
    phone: S1(40):AYnPXA6QcxlpOITeaZZM3+U/s7KtXyTqv5KAbB8=
    metric: 8
    email: S1(48):AS8hnzz6g1fGCabK2cbhPn5X7Qvc7FKmLTXnKF1iKF2nRjGQ
    ssn: S1(40):AQ1jSCdIsctniCkCHNEbsc+kliJArHmM6bOJRg==
    
    id: 4
    phone: S1(40):AXFnPkf620wIBXxW0uuBXSVERzRzvhdgbCdaYIw=
    metric: 1
    email: S1(48):AZgs1pfjEPLL6sDAcIZWuCZhC/saw/rQrujxAFy/O60uIA==
    ssn: S1(40):AatdICHDpwCc19ELEjCS8zAmeSVvx/1KB5/S2Q==
    
    End of query results
    
  8. Sal del cliente:

    quit
    
  9. Finaliza el servidor proxy de DLP:

    killall java
    
  10. Escribe el archivo log.txt en la terminal para mostrar el resultado del proxy de DLP:

    cat  log.txt
    

    El resultado de la fase de auditoría se muestra al final del archivo y coincide con los tres infotipos que configuraste antes:

    RunCommand
    DLP Result
    DLP Findings:
            Quote:                          Info type: PHONE_NUMBER Likelihood: VERY_LIKELY
            Quote:                          Info type: EMAIL_ADDRESS        Likelihood: LIKELY
            Quote:                          Info type: US_SOCIAL_SECURITY_NUMBER    Likelihood: VERY_LIKELY
            Quote:                          Info type: PHONE_NUMBER Likelihood: VERY_LIKELY
            Quote:                          Info type: EMAIL_ADDRESS        Likelihood: LIKELY
            Quote:                          Info type: US_SOCIAL_SECURITY_NUMBER    Likelihood: VERY_LIKELY
            Quote:                          Info type: PHONE_NUMBER Likelihood: VERY_LIKELY
            Quote:                          Info type: EMAIL_ADDRESS        Likelihood: LIKELY
            Quote:                          Info type: US_SOCIAL_SECURITY_NUMBER    Likelihood: VERY_LIKELY
            Quote:                          Info type: PHONE_NUMBER Likelihood: VERY_LIKELY
            Quote:                          Info type: EMAIL_ADDRESS        Likelihood: LIKELY
            Quote:                          Info type: US_SOCIAL_SECURITY_NUMBER    Likelihood: VERY_LIKELY
    
    Got DLP Result
    Sensitive information found
    write log: 1503994
    Logged Main.Query: 1503994
    

Realiza una 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