En esta página, se describe cómo inspeccionar un recurso de Cloud Storage y crear copias desidentificadas de los datos con la API de Cloud Data Loss Prevention.
Esta operación ayuda a garantizar que los archivos que uses 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 en busca de datos sensibles y crear copias desidentificadas de esos archivos en un bucket separado. Luego, puedes usar las copias desidentificadas en los procesos empresariales.
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 desidentificar.
Debes saber enviar una solicitud HTTP a la API de DLP. Para obtener más información, consulta Inspecciona texto sensible mediante la API de DLP.
Obtén información sobre las limitaciones y los puntos de consideración 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, la función 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
- Cómo leer los archivos en el directorio de entrada
- Escribe los archivos desidentificados en el directorio de salida
- Escribe los detalles de la transformación en una tabla de BigQuery
Entre los recursos relevantes, se 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 las siguientes funciones:
- La función de visualizador de objetos de Storage (
roles/storage.objectViewer
) en el bucket de entrada o el proyecto que lo contiene. - La función de Creador de objetos de almacenamiento (
roles/storage.objectCreator
) en el bucket de salida o en el proyecto que lo contiene. - La función 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 una función a tu agente de servicio, que es una cuenta de servicio administrada por Google, consulta Otorga una sola función. 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, en el 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 expresión regular (FileSet
).
Cuando habilitas la acción Deidentify
, de forma predeterminada, la Protección de datos sensibles crea copias desidentificadas (transformadas) de todos los tipos de archivos compatibles que se incluyen en el análisis. Sin embargo, puedes configurar el trabajo para transformar solo un subconjunto de los tipos de archivos compatibles.
Crea plantillas de desidentificación (opcional)
Si deseas controlar cómo se transforman los resultados, crea las siguientes plantillas. En estas plantillas, se proporcionan instrucciones para transformar los resultados en imágenes, archivos estructurados y archivos no estructurados.
Plantilla de desidentificación: Es un objeto
DeidentifyTemplate
predeterminado que se usará para archivos no estructurados, como archivos de texto de formato libre. Este tipo deDeidentifyTemplate
no puede incluir un objetoRecordTransformations
, que solo se admite para contenido estructurado. Si no hay esta plantilla, la protección de datos sensibles usa el métodoReplaceWithInfoTypeConfig
para transformar archivos no estructurados.Plantilla de desidentificación estructurada: Es un
DeidentifyTemplate
que se usará para archivos estructurados, como archivos CSV. EsteDeidentifyTemplate
puede contenerRecordTransformations
. Si esta plantilla 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 objeto
DeidentifyTemplate
que se usará para las imágenes. Esta plantilla debe contener un objetoImageTransformations
. Si esta plantilla no está presente, la protección de datos sensibles oculta todos los resultados de las imágenes con una caja negra.
Obtén más información sobre cómo crear una plantilla de desidentificació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 se deben 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 contenga 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 datos sensibles con una caja negra.Un objeto
TransformationDetailsStorageConfig
, que especifica una tabla de BigQuery en la que la protección de datos sensibles debe almacenar los detalles de cada transformación Para cada transformación, los detalles incluyen una descripción, un código de éxito o error, cualquier detalle de 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 los datos se escriben en una tabla de BigQuery, el uso de la facturación y las cuotas se aplican al proyecto que contiene la tabla de destino.
Después de desidentificar 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 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 crea una tabla de BigQuery que contiene metadatos sobre los detalles de la transformación. Para cada transformación que se produce, la 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 sobre los detalles de la 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 la protección de datos sensibles, consulta Bibliotecas cliente de la 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 la protección de datos sensibles, consulta Bibliotecas cliente de la 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 la protección de datos sensibles, consulta Bibliotecas cliente de la 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 la protección de datos sensibles, consulta Bibliotecas cliente de la 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 la protección de datos sensibles, consulta Bibliotecas cliente de la 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 la protección de datos sensibles, consulta Bibliotecas cliente de la 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á ningún subdirectorio 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 desidentificació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 desidentificació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 ocultamiento de imágenes para imágenes si creaste una. Este valor debe tener el formatoprojects/projectName/(locations/locationId)/deidentifyTemplates/templateName
.TRANSFORMATION_DETAILS_PROJECT_ID
: 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 crea 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.
Observa los siguientes objetos:
inspectJob
: El objeto de configuración del trabajo (DlpJob
). Este objeto contiene la configuración de las etapas de inspección y desidentificación.storageConfig
: 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 para los que deseas inspeccionar (InspectConfig
). En este ejemplo, se inspecciona el contenido que coincide con el Infotipo integradoPERSON_NAME
.actions
: Las acciones que se deben realizar después de que se completa la inspección del trabajo (Action
).deidentify
: Si especificas esta acción, se le indica a la protección de datos sensibles que desidentifique los datos sensibles coincidentes según la configuración especificada en (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 datos sensibles en imágenes, archivos estructurados y no estructurados (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 datos sensibles con una caja negra.transformation_details_storage_config
: Especifica que la protección de datos sensibles debe almacenar metadatos sobre cada transformación que realiza para este trabajo. 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 a los tipos de archivos que enumeras únicamente. Si no configuras este campo, todos los tipos de archivos compatibles incluidos en la operación de inspección también se incluirán en la operación de desidentificación. En este ejemplo, la protección de datos sensibles desidentifica solo los archivos de imagen, CSV y de texto, incluso si configurasteDlpJob
para inspeccionar todos los tipos de archivos compatibles.
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 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 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 del 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
: El ID del trabajo que se mostró cuando creaste elDlpJob
.
Si la operación está 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" }
¿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.
- Sigue el codelab Cómo crear una copia desidentificada de datos en Cloud Storage.
- Obtén más información sobre las transformaciones de desidentificación.
- Obtén más información sobre cómo inspeccionar el almacenamiento en busca de datos sensibles.