En esta página, se describe cómo inspeccionar un recurso de Cloud Storage y crear copias de datos desidentificados con la API de Cloud Data Loss Prevention.
Esta operación ayuda a garantizar que los archivos que usas en tus procesos de la empresa no contengan datos sensibles, como información de identificación personal (PII). La Protección de datos sensibles puede inspeccionar los archivos en un bucket de Cloud Storage en busca de datos sensibles y crear copias desidentificadas de esos archivos en un bucket independiente. Luego, puedes usar las copias desidentificadas 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 la Protección de datos sensibles.
Tienes un bucket de Cloud Storage con datos que quieres anonimizar.
Ya 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 de esta operación están en el mismo proyecto, el rol de agente de servicio de la API de DLP (roles/dlp.serviceAgent
) en el agente de servicio es suficiente. 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 relevantes 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 la 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 almacenamiento (
roles/storage.objectViewer
) en el bucket de entrada o el proyecto que lo contiene - El rol de creador de objetos de almacenamiento (
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 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,
configura 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 desidentificación en forma de una acción Deidentify
.
Si deseas analizar solo un subconjunto de los archivos de tu bucket, puedes limitar los archivos que analiza el trabajo. Las opciones admitidas para los trabajos con desidentificación son el filtrado de archivos por tipo (FileType
) y la expresión regular (FileSet
).
Cuando habilitas la acción Deidentify
, Sensitive Data Protection crea, de forma predeterminada, 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 resultados, crea las siguientes plantillas. Estas plantillas proporcionan instrucciones sobre cómo transformar los resultados en archivos estructurados, no estructurados y imágenes.
Plantilla de desidentificación: Es un
DeidentifyTemplate
predeterminado que se usa para archivos no estructurados, como archivos de texto de formato libre. Este tipo deDeidentifyTemplate
no puede contener un objetoRecordTransformations
, que solo es compatible con el contenido estructurado. Si no está presente esta plantilla, la Protección de datos sensibles usa el métodoReplaceWithInfoTypeConfig
para transformar archivos no estructurados.Plantilla de desidentificación de datos estructurados: Es un
DeidentifyTemplate
que se usará para archivos estructurados, como archivos CSV. EsteDeidentifyTemplate
puede contenerRecordTransformations
. Si no está presente, la Protección de datos sensibles 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 los archivos estructurados.Plantilla de ocultamiento de imágenes: Es un
DeidentifyTemplate
que se usará para las imágenes. Esta plantilla debe contener un objetoImageTransformations
. Si no está presente esta plantilla, Sensitive Data Protection oculta todos los hallazgos en las imágenes con un cuadro negro.
Obtén más información para crear una plantilla de anonimizació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 hallazgos.
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: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 las 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 error o de éxito, cualquier detalle del error, la cantidad de bytes transformados, la ubicación del contenido transformado y el nombre del trabajo de inspección en el que la Protección de datos sensibles realizó la transformación. Esta tabla no almacena el contenido desidentificado real.
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 la tarea de desidentificación. La tarea contiene un resumen de cuántas veces se aplicaron las transformaciones especificadas, que puedes recuperar con el método projects.dlpJobs.get
en DlpJob
. El DlpJob
que se muestra incluye un objeto DeidentifyDataSourceDetails
y un objeto InspectDataSourceDetails
. Esos objetos contienen los resultados de una acción Deidentify
y el trabajo de inspección, respectivamente.
Si incluiste un objeto TransformationDetailsStorageConfig
en tu DlpJob
, se creará una tabla de BigQuery
que contendrá 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 la 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 desidentificadas 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 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 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 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 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 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 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 quieres inspeccionar, por ejemplo,gs://input-bucket/folder1/folder1a
. Si la URL termina en una barra diagonal, no se analizan los subdirectorios dentro deINPUT_DIRECTORY
.OUTPUT_DIRECTORY
: Es el directorio de Cloud Storage en el que deseas almacenar los archivos desidentificados. 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 anonimización predeterminada (para archivos estructurados y no 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 anonimizació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 ocultación de imágenes para las 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
: 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
: 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 de 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
: 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 en el interior (Deidentify
).cloud_storage_output
: Especifica la URL del directorio de Cloud Storage que deseas inspeccionar.transformation_config
: Especifica cómo la Protección de datos sensibles debe desidentificar los datos sensibles en archivos estructurados, 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 la Protección de datos sensibles debe almacenar metadatos sobre cada transformación que realiza para esta tarea. Además, especifica la ubicación y el nombre de la tabla en la que la Protección de datos sensibles debe almacenar esos metadatos (TransformationDetailsStorageConfig
).fileTypesToTransform
: Limita la operación de desidentificación solo a los tipos de archivos que especifiques. Si no configuras este campo, todos los tipos de archivos compatibles que se incluyen en la operación de inspección también se incluyen en la operación de desidentificación. En este ejemplo, la Protección de datos sensibles solo desidentifica los archivos de imagen, CSV y texto, incluso si configurasteDlpJob
para inspeccionar 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
: 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 muestra el identificador del DlpJob
recién creado, su estado y una instantánea de la configuración de inspección que
configuraste.
{ "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
: El ID del proyecto en el que almacenaste elDlpJob
.JOB_ID
: Es el ID del trabajo que se mostró cuando creaste elDlpJob
.
Si la operación se completó, 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 información para desidentificar datos en el almacenamiento con la consola de Google Cloud.
- Completa el codelab Cómo crear 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.