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.
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
- Accede a tu Cuenta de Google.
Si todavía no tienes una cuenta, regístrate para obtener una nueva.
-
En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Descubre cómo confirmar que tienes habilitada la facturación en un proyecto.
- Habilita las API necesarias:
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.
-
En Cloud Console, activa 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.
Todos los comandos de este instructivo se ejecutan en Cloud Shell. - 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
- Configura el proyecto de Cloud:
gcloud config set project project-id
Reemplaza los siguientes elementos:
project-id
: El ID del proyecto de Cloud
- Cambia los directorios en la carpeta en la que copiaste los archivos del instructivo:
cd gcp-dlp-proxy-tutorial
- 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.
- 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
- 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
- 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.
- 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
- 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].
- 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
. - 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
- 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)
- 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
En Cloud Console, ve a la página Cloud DLP.
Haz clic en Crear y selecciona Plantilla.
En el campo ID de plantilla, ingresa
inspect-template-1
.Haz clic en Continuar.
Configura los Infotipos como
EMAIL_ADDRESS
,PHONE_NUMBER
yUS_SOCIAL_SECURITY_NUMBER
.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.
Ve al Explorador de API.
En el campo superior, reemplaza
[YOUR-PROJECT]
por el ID del proyecto de Cloud.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" }
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.
En el campo superior, ingresa
projects/project-id
.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:
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.
En Cloud Shell, cambia al directorio con la carpeta en la que copiaste los archivos del instructivo:
cd ~/gcp-dlp-proxy-tutorial
Edita el archivo de configuración del servidor proxy de DLP:
nano config.json
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 Cloudregion
: 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 zonaus-central1-a
, entonces la región esus-central1.
instance_name
: El nombre de la instancia de Cloud SQL, comodlp-test-instance
dbase_name
: El nombre de la base de datos, comodlp-test-db
inspect_template
: El nombre de la plantilla de inspección, comoinspect-template-1
inspect_template
: El nombre de la plantilla de desidentificación, comode-identify-template-1
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 datospassword-database
: La contraseña del usuario de la base de datos que creaste antes
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.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
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
Sal del cliente:
quit
Finaliza el servidor proxy de DLP:
killall java
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
- En Cloud Console, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
¿Qué sigue?
- Lee Ejemplo de arquitectura para usar un proxy de DLP a fin de consultar una base de datos que contenga datos sensibles si deseas obtener ejemplos de cómo puedes usar el proxy de DLP en la arquitectura.
- Prueba otras funciones de Google Cloud. Revisa nuestros instructivos.