En esta página se describe cómo inspeccionar un recurso de Cloud Storage y crear copias desidentificadas de los datos mediante la API Cloud Data Loss Prevention.
Esta operación ayuda a asegurarse de que los archivos que utiliza en sus procesos empresariales no contengan datos sensibles, como información personal identificable (IPI). Protección de Datos Sensibles puede inspeccionar archivos de un segmento de Cloud Storage para detectar datos sensibles y crear copias desidentificadas de esos archivos en otro segmento. Después, puede usar las copias anonimizadas en sus procesos empresariales.
Para obtener más información sobre esta función, consulta el artículo Desidentificación de datos sensibles en Cloud Storage.
Antes de empezar
En esta página se da por hecho lo siguiente:
Has habilitado la facturación.
Has habilitado Protección de Datos Sensibles.
Tienes un segmento de Cloud Storage con datos que quieres desidentificar.
Sabes cómo enviar una solicitud HTTP a la API DLP. Para obtener más información, consulta el artículo Inspeccionar texto sensible con la API DLP.
Consulta las limitaciones y los aspectos que debes tener en cuenta para esta operación.
Para inspeccionar el almacenamiento, se necesita el siguiente permiso de OAuth:
https://www.googleapis.com/auth/cloud-platform
. Para obtener más información, consulta el artículo sobre cómo autenticarse en la API DLP.
Roles de gestión de identidades y accesos necesarios
Si todos los recursos de esta operación están en el mismo proyecto, es suficiente con el rol de agente de servicio de la API DLP (roles/dlp.serviceAgent
) en el agente de servicio. Con ese rol, puedes hacer lo siguiente:
- Crea la tarea de inspección
- Leer los archivos del directorio de entrada
- Escribir los archivos anonimizados en el directorio de salida
- Escribir los detalles de la transformación en una tabla de BigQuery
Entre los recursos pertinentes se incluyen el trabajo de inspección, las plantillas de desidentificación, el contenedor de entrada, el contenedor de salida y la tabla de detalles de transformación.
Si necesitas que los recursos estén en proyectos independientes, asegúrate de que el agente de servicio de tu proyecto también tenga los siguientes roles:
- El rol Lector de objetos de almacenamiento (
roles/storage.objectViewer
) en el segmento de entrada o en el proyecto que lo contiene. - El rol Creador de objetos de Storage
(
roles/storage.objectCreator
) en el segmento de salida o en el proyecto que lo contiene. - El rol 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 asignar un rol al agente de servicio, consulta Asignar un rol concreto. También puedes controlar el acceso a los siguientes niveles:
Información general sobre la API
Para crear copias desidentificadas del contenido almacenado en Cloud Storage, configura una tarea de inspección que busque datos sensibles según los criterios que especifiques. A continuación, en el trabajo de inspección, proporciona instrucciones de anonimización en forma de acción Deidentify
.
Si solo quieres analizar un subconjunto de los archivos de tu segmento, puedes limitar los archivos que analiza el trabajo. Las opciones admitidas para los trabajos con anonimización son el filtrado de archivos por tipo (FileType
) y la expresión regular (FileSet
).
Cuando habilitas la acción Deidentify
, Protección de Datos Sensibles crea de forma predeterminada copias desidentificadas (transformadas) de todos los tipos de archivo admitidos incluidos en el análisis. Sin embargo, puedes configurar el trabajo para que transforme solo un subconjunto de los tipos de archivo admitidos.
Opcional: Crear 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 las detecciones en archivos estructurados, archivos sin estructurar e imágenes.
Plantilla de desidentificación: una
DeidentifyTemplate
predeterminada que se utiliza en archivos no estructurados, como archivos de texto de formato libre. Este tipo deDeidentifyTemplate
no puede contener un objetoRecordTransformations
, que solo se admite en contenido estructurado. Si esta plantilla no está presente, la protección de datos sensibles utiliza el métodoReplaceWithInfoTypeConfig
para transformar archivos no estructurados.Plantilla de anonimización estructurada: un
DeidentifyTemplate
que se usa para archivos estructurados, como los archivos CSV. EsteDeidentifyTemplate
puede contenerRecordTransformations
. Si no está presente, Protección de Datos Sensibles usa la plantilla de desidentificación predeterminada que hayas creado. Si tampoco está presente, Protección de Datos Sensibles usa el métodoReplaceWithInfoTypeConfig
para transformar archivos estructurados.Plantilla de ocultación de imágenes: un
DeidentifyTemplate
que se usa para las imágenes. Esta plantilla debe contener un objetoImageTransformations
. Si no está presente, Protección de Datos Sensibles oculta todos los resultados de las imágenes con un recuadro negro.
Más información sobre cómo crear una plantilla de anonimización
Crear una tarea 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 va a inspeccionar. - Un objeto
InspectConfig
que contiene los tipos de datos que se deben buscar e instrucciones de inspección adicionales sobre cómo encontrar los datos sensibles. Una acción
Deidentify
que contenga lo siguiente:Un objeto
TransformationConfig
que especifica las plantillas que has creado para desidentificar datos en archivos estructurados y no estructurados. También puede incluir la configuración para ocultar datos sensibles de imágenes.Si no incluyes un objeto
TransformationConfig
, Protección de Datos Sensibles reemplaza los datos sensibles del texto por su infoType. En las imágenes, cubre los datos sensibles con un cuadro negro.Un objeto
TransformationDetailsStorageConfig
que especifica una tabla de BigQuery en la que Protección de Datos Sensibles debe almacenar los detalles de cada transformación. En cada transformación, se incluyen detalles como una descripción, un código de éxito o de error, los detalles del error, el número 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 ha realizado la transformación. En esta tabla no se almacena el contenido anonimizado.
Cuando se escriben datos en una tabla de BigQuery, la facturación y el uso de cuota se aplican al proyecto que contiene la tabla de destino.
Una vez que se haya desidentificado el contenido copiado, finalizará el trabajo de desidentificación. El trabajo contiene un resumen de cuántas veces se han aplicado las transformaciones especificadas, que puedes obtener mediante el método projects.dlpJobs.get
en DlpJob
. El objeto DlpJob
devuelto 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 has incluido un objeto TransformationDetailsStorageConfig
en tu DlpJob
, se creará una tabla de BigQuery que contendrá metadatos sobre los detalles de la transformación. Por cada transformación que se produce, Protección de Datos Sensibles escribe una fila de metadatos en la tabla. Para obtener más información sobre el contenido de la tabla, consulta la referencia de los detalles de la transformación.
Ejemplos de código
En los siguientes ejemplos se muestra cómo usar la API 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 saber cómo instalar y usar la biblioteca de cliente de Protección de Datos Sensibles, consulta el artículo sobre las bibliotecas de cliente de Protección de Datos Sensibles.
Para autenticarte en Protección de Datos Sensibles, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Go
Para saber cómo instalar y usar la biblioteca de cliente de Protección de Datos Sensibles, consulta el artículo sobre las bibliotecas de cliente de Protección de Datos Sensibles.
Para autenticarte en Protección de Datos Sensibles, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Java
Para saber cómo instalar y usar la biblioteca de cliente de Protección de Datos Sensibles, consulta el artículo sobre las bibliotecas de cliente de Protección de Datos Sensibles.
Para autenticarte en Protección de Datos Sensibles, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Node.js
Para saber cómo instalar y usar la biblioteca de cliente de Protección de Datos Sensibles, consulta el artículo sobre las bibliotecas de cliente de Protección de Datos Sensibles.
Para autenticarte en Protección de Datos Sensibles, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
PHP
Para saber cómo instalar y usar la biblioteca de cliente de Protección de Datos Sensibles, consulta el artículo sobre las bibliotecas de cliente de Protección de Datos Sensibles.
Para autenticarte en Protección de Datos Sensibles, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Python
Para saber cómo instalar y usar la biblioteca de cliente de Protección de Datos Sensibles, consulta el artículo sobre las bibliotecas de cliente de Protección de Datos Sensibles.
Para autenticarte en Protección de Datos Sensibles, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
REST
Entrada 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"]
}
}
}
}
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto en el que quieres almacenar el trabajo de inspección.INPUT_DIRECTORY
: el directorio de Cloud Storage que quieres inspeccionar. Por ejemplo,gs://input-bucket/folder1/folder1a
. Si la URL termina en una barra inclinada, no se analizarán los subdirectorios deINPUT_DIRECTORY
.OUTPUT_DIRECTORY
: el directorio de Cloud Storage en el que quieres almacenar los archivos desidentificados. Este directorio no debe estar en el mismo segmento de Cloud Storage queINPUT_DIRECTORY
.DEIDENTIFY_TEMPLATE_NAME
: el nombre completo del recurso de la plantilla de anonimización predeterminada (para archivos estructurados y no estructurados) si has creado una. Este valor debe tener el formatoprojects/projectName/(locations/locationId)/deidentifyTemplates/templateName
.STRUCTURED_DEIDENTIFY_TEMPLATE_NAME
: el nombre completo del recurso de la plantilla de anonimización de archivos estructurados, si has creado una. Este valor debe tener el formatoprojects/projectName/(locations/locationId)/deidentifyTemplates/templateName
.IMAGE_REDACTION_TEMPLATE_NAME
: nombre completo del recurso de la plantilla de ocultación de imágenes, si has creado una. Este valor debe tener el formatoprojects/projectName/(locations/locationId)/deidentifyTemplates/templateName
.TRANSFORMATION_DETAILS_PROJECT_ID
: el ID del proyecto en el que quieras almacenar los detalles de la transformación.TRANSFORMATION_DETAILS_DATASET_ID
: el ID del conjunto de datos de BigQuery en el que quiere 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 quiere almacenar los detalles de la transformación.
Ten en cuenta los siguientes objetos:
inspectJob
: objeto de configuración del trabajo (DlpJob
). Este objeto contiene la configuración de las fases de inspección y anonimización.storageConfig
: ubicación del contenido que se va a inspeccionar (StorageConfig
). En este ejemplo, se especifica un segmento de Cloud StorageCloudStorageOptions
.inspectConfig
: información sobre los datos sensibles que quieres inspeccionar (InspectConfig
). En este ejemplo, se inspecciona el contenido que coincide con el infoTypePERSON_NAME
integrado.actions
: las acciones que se deben llevar a cabo después de la parte de inspección del trabajo (Action
).deidentify
: al especificar esta acción, se indica a Protección de Datos Sensibles que anonimice 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 quieres inspeccionar.transformation_config
: especifica cómo debe desidentificar Protección de Datos Sensibles los datos sensibles en archivos estructurados, archivos no estructurados e imágenes (TransformationConfig
).Si no incluyes un objeto
TransformationConfig
, Protección de Datos Sensibles reemplaza los datos sensibles del texto por su infoType. 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 realice en este trabajo. También especifica la ubicación y el nombre de la tabla en la que Protección de Datos Sensibles debe almacenar esos metadatos (TransformationDetailsStorageConfig
).fileTypesToTransform
: limita la operación de desidentificación a los tipos de archivo que indiques. Si no define este campo, todos los tipos de archivo admitidos incluidos en la operación de inspección también se incluirán en la operación de desidentificación. En este ejemplo, Protección de Datos Sensibles desidentifica solo los archivos de imagen, CSV y texto, aunque hayas configuradoDlpJob
para que inspeccione todos los tipos de archivo admitidos.
Crear una tarea de inspección mediante la API REST
Para crear la tarea de inspección (DlpJob
), envía una solicitud projects.dlpJobs.create
. Para enviar la solicitud con cURL, guarda el ejemplo de REST anterior como 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
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto en el que has almacenado elDlpJob
.PATH_TO_JSON_FILE
: la ruta al archivo JSON que contiene el cuerpo de la solicitud.
Protección de Datos Sensibles devuelve el identificador del DlpJob
recién creado, su estado y una captura de la configuración de inspección que hayas definido.
{ "name": "projects/PROJECT_ID/dlpJobs/JOB_ID", "type": "INSPECT_JOB", "state": "PENDING", ... }
Obtener los resultados de la tarea de inspección
Para obtener los resultados de la 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
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto en el que has almacenado elDlpJob
.JOB_ID
: el ID del trabajo que se devolvió cuando creaste elDlpJob
.
Si la operación se completa, obtendrá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" }
Siguientes pasos
- Más información sobre el proceso de anonimización de datos almacenados
- Consulta cómo desidentificar datos almacenados mediante la Google Cloud consola.
- Sigue los pasos del codelab Crear una copia desidentificada de los datos en Cloud Storage.
- Más información sobre las transformaciones de desidentificación
- Consulta cómo buscar datos sensibles en el almacenamiento.