En esta página, se describe cómo inspeccionar un recurso de Cloud Storage y crear copias anonimizadas de los datos con la API de Cloud Data Loss Prevention.
Esta operación ayuda a garantizar que los archivos que usas en tus procesos comerciales no contengan datos sensibles, como información de identificación personal (PII). La Protección de datos sensibles puede inspeccionar archivos en un bucket de Cloud Storage para detectar datos sensibles y crear copias desidentificadas de esos archivos en un bucket independiente. Luego, puedes usar las copias anonimizadas en tus procesos comerciales.
Para obtener más información sobre esta función, consulta Desidentificación de datos sensibles en Cloud Storage.
Antes de comenzar
En esta página, se supone lo siguiente:
Ya habilitaste la facturación.
Habilitaste Sensitive Data Protection.
Tienes un bucket de Cloud Storage con datos que deseas anonimizar.
Sabes cómo enviar una solicitud HTTP a la API de DLP. Para obtener más información, consulta Inspecciona texto sensible con la API de DLP.
Obtén información sobre las limitaciones y los puntos a tener en cuenta para esta operación.
La inspección de almacenamiento requiere el siguiente permiso de OAuth:
https://www.googleapis.com/auth/cloud-platform
. Para obtener más información, consulta Autenticación en la API de DLP.
Roles de IAM obligatorios
Si todos los recursos para esta operación están en el mismo proyecto, es suficiente con el rol de agente de servicio de la API de DLP (roles/dlp.serviceAgent
) en el agente de servicio. Con ese rol, puedes hacer lo siguiente:
- Crea el trabajo de inspección
- Lee los archivos del directorio de entrada.
- Escribe los archivos desidentificados en el directorio de salida
- Escribe los detalles de la transformación en una tabla de BigQuery
Los recursos pertinentes incluyen el trabajo de inspección, las plantillas de desidentificación, el bucket de entrada, el bucket de salida y la tabla de detalles de transformación.
Si debes tener los recursos en proyectos separados, asegúrate de que el agente de servicio de tu proyecto también tenga los siguientes roles:
- El rol de visualizador de objetos de Storage (
roles/storage.objectViewer
) en el bucket de entrada o el proyecto que lo contiene - El rol de creador de objetos de Storage (
roles/storage.objectCreator
) en el bucket de salida o en el proyecto que lo contiene - El rol de editor de datos de BigQuery (
roles/bigquery.dataEditor
) en la tabla de detalles de la transformación o en el proyecto que la contiene
Para otorgar un rol al agente de servicio, consulta Otorga un solo rol. También puedes controlar el acceso en los siguientes niveles:
Descripción general de la API
Para crear copias desidentificadas del contenido almacenado en Cloud Storage, debes configurar un trabajo de inspección que busque datos sensibles según los criterios que especifiques. Luego, dentro del trabajo de inspección, proporcionas instrucciones de anonimización en forma de una acción Deidentify
.
Si solo deseas analizar un subconjunto de los archivos de tu bucket, puedes limitar los archivos que analiza el trabajo. Las opciones admitidas para los trabajos con seudoanonimización son el filtrado de archivos por tipo (FileType
) y la expresión regular (FileSet
).
Cuando habilitas la acción Deidentify
, de forma predeterminada, Sensitive Data Protection crea copias desidentificadas (transformadas) de todos los tipos de archivos compatibles incluidos en el análisis. Sin embargo, puedes configurar el trabajo para que transforme solo un subconjunto de los tipos de archivos admitidos.
Opcional: Crea plantillas de desidentificación
Si quieres controlar cómo se transforman los hallazgos, crea las siguientes plantillas. Estas plantillas proporcionan instrucciones para transformar los hallazgos en archivos estructurados, archivos no estructurados e imágenes.
Plantilla de desidentificación: Es un
DeidentifyTemplate
predeterminado que se usará para archivos no estructurados, como archivos de texto de formato libre. Este tipo deDeidentifyTemplate
no puede contener un objetoRecordTransformations
, que solo se admite para el contenido estructurado. Si esta plantilla no está presente, Sensitive Data Protection usa el métodoReplaceWithInfoTypeConfig
para transformar archivos no estructurados.Plantilla de anonimización estructurada: Es un
DeidentifyTemplate
que se usa para archivos estructurados, como los archivos CSV. EsteDeidentifyTemplate
puede contenerRecordTransformations
. Si esta plantilla no está presente, Sensitive Data Protection usa la plantilla de desidentificación predeterminada que creaste. Si tampoco está presente, la Protección de datos sensibles usa el métodoReplaceWithInfoTypeConfig
para transformar archivos estructurados.Plantilla de ocultamiento en imágenes: Es un
DeidentifyTemplate
que se usará para las imágenes. Esta plantilla debe contener un objetoImageTransformations
. Si esta plantilla no está presente, Sensitive Data Protection oculta todos los hallazgos en imágenes con un cuadro negro.
Obtén más información para crear una plantilla de seudonimización.
Crea un trabajo de inspección que tenga una acción de desidentificación
El objeto DlpJob
proporciona instrucciones sobre qué inspeccionar, qué tipos de datos marcar como sensibles y qué hacer con los resultados.
Para desidentificar datos sensibles en un directorio de Cloud Storage, tu DlpJob
debe definir, al menos, lo siguiente:
- Un objeto
StorageConfig
, que especifica el directorio de Cloud Storage que se inspeccionará. - Un objeto
InspectConfig
, que contiene los tipos de datos que se deben buscar y las instrucciones de inspección adicionales para encontrar los datos sensibles. Una acción
Deidentify
que contiene lo siguiente:Es un objeto
TransformationConfig
que especifica las plantillas que creaste para desidentificar datos en archivos estructurados y no estructurados. También puedes incluir la configuración para ocultar datos sensibles de imágenes.Si no incluyes un objeto
TransformationConfig
, la Protección de datos sensibles reemplaza los datos sensibles en el texto por su infotipo. En las imágenes, cubre los datos sensibles con un cuadro negro.Un objeto
TransformationDetailsStorageConfig
, que especifica una tabla de BigQuery en la que la Protección de datos sensibles debe almacenar detalles sobre cada transformación. Para cada transformación, los detalles incluyen una descripción, un código de éxito o error, los detalles del error, la cantidad de bytes transformados, la ubicación del contenido transformado y el nombre del trabajo de inspección en el que Protección de datos sensibles realizó la transformación. En esta tabla, no se almacena el contenido real anonimizado.
Cuando se escriben datos en una tabla de BigQuery, el uso de cuotas y la facturación se aplican al proyecto que contiene la tabla de destino.
Una vez que se desidentifica el contenido copiado, finaliza el trabajo de desidentificación. El trabajo contiene un resumen de la cantidad de veces que se aplicaron las transformaciones especificadas, que puedes recuperar con el método projects.dlpJobs.get
en DlpJob
. El objeto DlpJob
que se devuelve incluye un objeto DeidentifyDataSourceDetails
y un objeto InspectDataSourceDetails
. Esos objetos contienen los resultados de una acción de Deidentify
y del trabajo de inspección, respectivamente.
Si incluiste un objeto TransformationDetailsStorageConfig
en tu DlpJob
, se crea una tabla de BigQuery que contiene metadatos sobre los detalles de la transformación. Para cada transformación que se produce, Sensitive Data Protection escribe una fila de metadatos en la tabla. Para obtener más información sobre el contenido de la tabla, consulta Referencia de detalles de transformación.
Ejemplos de código
En los siguientes ejemplos, se muestra cómo usar la API de DLP para crear copias anonimizadas de archivos de Cloud Storage.
Método HTTP y URL
POST https://dlp.googleapis.com/v2/projects/PROJECT_ID/dlpJobs
C#
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Protección de datos sensibles, consulta las bibliotecas cliente de Protección de datos sensibles.
Para autenticarte en la Protección de datos sensibles, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Go
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Protección de datos sensibles, consulta las bibliotecas cliente de Protección de datos sensibles.
Para autenticarte en la Protección de datos sensibles, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Java
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Protección de datos sensibles, consulta las bibliotecas cliente de Protección de datos sensibles.
Para autenticarte en la Protección de datos sensibles, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Node.js
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Protección de datos sensibles, consulta las bibliotecas cliente de Protección de datos sensibles.
Para autenticarte en la Protección de datos sensibles, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
PHP
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Protección de datos sensibles, consulta las bibliotecas cliente de Protección de datos sensibles.
Para autenticarte en la Protección de datos sensibles, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Python
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Protección de datos sensibles, consulta las bibliotecas cliente de Protección de datos sensibles.
Para autenticarte en la Protección de datos sensibles, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
REST
Entrada de JSON{
"inspect_job": {
"storage_config": {
"cloud_storage_options": {
"file_set": {
"url": "INPUT_DIRECTORY"
}
}
},
"inspect_config": {
"info_types": [
{
"name": "PERSON_NAME"
}
]
},
"actions": {
"deidentify": {
"cloud_storage_output": "OUTPUT_DIRECTORY",
"transformation_config": {
"deidentify_template": "DEIDENTIFY_TEMPLATE_NAME",
"structured_deidentify_template": "STRUCTURED_DEIDENTIFY_TEMPLATE_NAME",
"image_redact_template": "IMAGE_REDACTION_TEMPLATE_NAME"
},
"transformation_details_storage_config": {
"table": {
"project_id": "TRANSFORMATION_DETAILS_PROJECT_ID",
"dataset_id": "TRANSFORMATION_DETAILS_DATASET_ID",
"table_id": "TRANSFORMATION_DETAILS_TABLE_ID"
}
},
"fileTypesToTransform": ["IMAGE","CSV", "TEXT_FILE"]
}
}
}
}
Reemplaza lo siguiente:
PROJECT_ID
: Es el ID del proyecto en el que deseas almacenar el trabajo de inspección.INPUT_DIRECTORY
: Es el directorio de Cloud Storage que deseas inspeccionar, por ejemplo,gs://input-bucket/folder1/folder1a
. Si la URL termina en una barra diagonal, no se analizarán los subdirectorios dentro deINPUT_DIRECTORY
.OUTPUT_DIRECTORY
: Es el directorio de Cloud Storage en el que deseas almacenar los archivos anonimizados. Este directorio no debe estar en el mismo bucket de Cloud Storage queINPUT_DIRECTORY
.DEIDENTIFY_TEMPLATE_NAME
: Es el nombre completo del recurso de la plantilla de seudoanonimización predeterminada (para archivos no estructurados y estructurados) si creaste una. Este valor debe tener el formatoprojects/projectName/(locations/locationId)/deidentifyTemplates/templateName
.STRUCTURED_DEIDENTIFY_TEMPLATE_NAME
: Es el nombre completo del recurso de la plantilla de seudoanonimización para archivos estructurados si creaste una. Este valor debe tener el formatoprojects/projectName/(locations/locationId)/deidentifyTemplates/templateName
.IMAGE_REDACTION_TEMPLATE_NAME
: Es el nombre completo del recurso de la plantilla de redacción de imágenes si creaste una. Este valor debe tener el formatoprojects/projectName/(locations/locationId)/deidentifyTemplates/templateName
.TRANSFORMATION_DETAILS_PROJECT_ID
: Es el ID del proyecto en el que deseas almacenar los detalles de la transformación.TRANSFORMATION_DETAILS_DATASET_ID
: Es el ID del conjunto de datos de BigQuery en el que deseas almacenar los detalles de la transformación. Si no proporcionas un ID de tabla, el sistema creará uno automáticamente.TRANSFORMATION_DETAILS_TABLE_ID
: Es el ID de la tabla de BigQuery en la que deseas almacenar los detalles de la transformación.
Ten en cuenta los siguientes objetos:
inspectJob
: Es el objeto de configuración del trabajo (DlpJob
). Este objeto contiene la configuración para las etapas de inspección y desidentificación.storageConfig
: Es la ubicación del contenido que se inspeccionará (StorageConfig
). En este ejemplo, se especifica un bucket de Cloud StorageCloudStorageOptions
.inspectConfig
: Es la información sobre los datos sensibles que deseas inspeccionar (InspectConfig
). En este ejemplo, se inspecciona el contenido que coincide con el InfotipoPERSON_NAME
integrado.actions
: Son las acciones que se deben realizar después de que se complete la parte de inspección del trabajo (Action
).deidentify
: Especificar esta acción le indica a la Protección de datos sensibles que desidentifique los datos sensibles coincidentes según la configuración especificada dentro de (Deidentify
).cloud_storage_output
: Especifica la URL del directorio de Cloud Storage que deseas inspeccionar.transformation_config
: Especifica cómo Sensitive Data Protection debe seudonimizar los datos sensibles en archivos estructurados, archivos no estructurados e imágenes (TransformationConfig
).Si no incluyes un objeto
TransformationConfig
, la Protección de datos sensibles reemplaza los datos sensibles en el texto por su infotipo. En las imágenes, cubre los datos sensibles con un cuadro negro.transformation_details_storage_config
: Especifica que Protección de datos sensibles debe almacenar metadatos sobre cada transformación que realiza para este trabajo. También especifica la ubicación y el nombre de la tabla en la que Sensitive Data Protection debe almacenar esos metadatos (TransformationDetailsStorageConfig
).fileTypesToTransform
: Limita la operación de desidentificación solo a los tipos de archivos que enumeras. Si no configuras este campo, todos los tipos de archivos admitidos incluidos en la operación de inspección también se incluirán en la operación de seudoanonimización. En este ejemplo, la Protección de datos sensibles solo anonimiza los archivos de imagen, CSV y texto, incluso si configurasteDlpJob
para que inspeccione todos los tipos de archivos admitidos.
Crea un trabajo de inspección a través de la API de REST
Para crear el trabajo de inspección (DlpJob
), envía una solicitud projects.dlpJobs.create
. Para enviar la solicitud con cURL, guarda el ejemplo de REST anterior como un archivo JSON y ejecuta el siguiente comando:
curl -s \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "X-Goog-User-Project: PROJECT_ID" \
https://dlp.googleapis.com/v2/projects/PROJECT_ID/dlpJobs \
-d @PATH_TO_JSON_FILE
Reemplaza lo siguiente:
PROJECT_ID
: Es el ID del proyecto en el que almacenaste elDlpJob
.PATH_TO_JSON_FILE
: Es la ruta de acceso al archivo JSON que contiene el cuerpo de la solicitud.
La Protección de datos sensibles devuelve el identificador del objeto DlpJob
recién creado, su estado y una instantánea de la configuración de inspección que estableciste.
{ "name": "projects/PROJECT_ID/dlpJobs/JOB_ID", "type": "INSPECT_JOB", "state": "PENDING", ... }
Recupera los resultados del trabajo de inspección
Para recuperar los resultados de DlpJob
, envía una solicitud projects.dlpJobs.get
:
curl -s \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "X-Goog-User-Project: PROJECT_ID" \
https://dlp.googleapis.com/v2/projects/PROJECT_ID/dlpJobs/JOB_ID
Reemplaza lo siguiente:
PROJECT_ID
: Es el ID del proyecto en el que almacenaste elDlpJob
.JOB_ID
: Es el ID del trabajo que se devolvió cuando creaste elDlpJob
.
Si la operación se completa, recibirás una respuesta similar a la siguiente:
{ "name": "projects/PROJECT_ID/dlpJobs/JOB_ID", "type": "INSPECT_JOB", "state": "DONE", "inspectDetails": { "requestedOptions": { "snapshotInspectTemplate": {}, "jobConfig": { "storageConfig": { "cloudStorageOptions": { "fileSet": { "url": "INPUT_DIRECTORY" } } }, "inspectConfig": { "infoTypes": [ { "name": "PERSON_NAME" } ], "limits": {} }, "actions": [ { "deidentify": { "transformationDetailsStorageConfig": { "table": { "projectId": "TRANSFORMATION_DETAILS_PROJECT_ID", "datasetId": "TRANSFORMATION_DETAILS_DATASET_ID", "tableId": "TRANSFORMATION_DETAILS_TABLE_ID" } }, "transformationConfig": { "deidentifyTemplate": "DEIDENTIFY_TEMPLATE_NAME", "structuredDeidentifyTemplate": "STRUCTURED_DEIDENTIFY_TEMPLATE_NAME", "imageRedactTemplate": "IMAGE_REDACTION_TEMPLATE_NAME" }, "fileTypesToTransform": [ "IMAGE", "CSV", "TEXT_FILE" ], "cloudStorageOutput": "OUTPUT_DIRECTORY" } } ] } }, "result": { "processedBytes": "25242", "totalEstimatedBytes": "25242", "infoTypeStats": [ { "infoType": { "name": "PERSON_NAME" }, "count": "114" } ] } }, "createTime": "2022-06-09T23:00:53.380Z", "startTime": "2022-06-09T23:01:27.986383Z", "endTime": "2022-06-09T23:02:00.443536Z", "actionDetails": [ { "deidentifyDetails": { "requestedOptions": { "snapshotDeidentifyTemplate": { "name": "DEIDENTIFY_TEMPLATE_NAME", "createTime": "2022-06-09T17:46:34.208923Z", "updateTime": "2022-06-09T17:46:34.208923Z", "deidentifyConfig": { "infoTypeTransformations": { "transformations": [ { "primitiveTransformation": { "characterMaskConfig": { "maskingCharacter": "*", "numberToMask": 25 } } } ] } }, "locationId": "global" }, "snapshotStructuredDeidentifyTemplate": { "name": "STRUCTURED_DEIDENTIFY_TEMPLATE_NAME", "createTime": "2022-06-09T20:51:12.411456Z", "updateTime": "2022-06-09T21:07:53.633149Z", "deidentifyConfig": { "recordTransformations": { "fieldTransformations": [ { "fields": [ { "name": "Name" } ], "primitiveTransformation": { "replaceConfig": { "newValue": { "stringValue": "[redacted]" } } } } ] } }, "locationId": "global" }, "snapshotImageRedactTemplate": { "name": "IMAGE_REDACTION_TEMPLATE_NAME", "createTime": "2022-06-09T20:52:25.453564Z", "updateTime": "2022-06-09T20:52:25.453564Z", "deidentifyConfig": {}, "locationId": "global" } }, "deidentifyStats": { "transformedBytes": "3972", "transformationCount": "110" } } } ], "locationId": "global" }
¿Qué sigue?
- Obtén más información sobre el proceso de desidentificación de datos en el almacenamiento.
- Obtén más información para desidentificar datos almacenados con la consola de Google Cloud .
- Realiza el codelab Crea una copia desidentificada de los datos en Cloud Storage.
- Obtén más información sobre las transformaciones de desidentificación.
- Obtén más información para inspeccionar el almacenamiento en busca de datos sensibles.