La protección de datos sensibles puede desidentificar datos sensibles en el contenido de texto, incluido el texto almacenado en estructuras de contenedor como tablas. La desidentificación es el proceso de quitar información de identificación de los datos. La API detecta datos sensibles, como información de identificación personal (PII) y, luego, usa una transformación de desidentificación para enmascarar, borrar o, de otro modo, ocultar los datos. Por ejemplo, a continuación se muestran algunas de las técnicas de desidentificación:
- Enmascarar datos sensibles mediante el reemplazo parcial o completo de caracteres con un símbolo, como un asterisco (*) o un hash (#).
- Reemplaza cada instancia de datos sensibles con un token o una string subrogada.
- Encriptación y reemplazo de datos sensibles con una clave predeterminada o generada de manera aleatoria.
Puedes proporcionar información a la API mediante JSON a través de HTTPS, también con la CLI y varios lenguajes de programación mediante las bibliotecas cliente de Protección de datos sensibles. Para configurar la CLI, consulta la Guía de inicio rápido. Para obtener más información sobre el envío de información en formato JSON, consulta la Guía de inicio rápido de JSON.
Descripción general de la API
Para desidentificar datos sensibles, usa el método content.deidentify
de Sensitive Data Protection.
A continuación, se muestran las tres partes de desidentificación a una llamada a la API:
- Los datos a inspeccionar: Una string o estructura de tabla (objeto
ContentItem
) para que la API inspeccione. Qué se debe inspeccionar: Información de configuración de detección (
InspectConfig
), como qué tipos de datos (o infotipos) buscar, si filtrar resultados que están por encima de un límite de probabilidad determinado y si se debe mostrar una cantidad determinada de resultados.En tu objeto
InspectConfig
, asegúrate de incluir los infotipos que deseas analizar. De lo contrario, la Protección de datos sensibles busca un conjunto predeterminado de infotipos (ALL_BASIC
), algunos de los cuales es posible que no necesites. El escaneo de infotipos que no necesitas puede agregar latencia innecesaria a tu solicitud.Se requiere un objeto
InspectConfig
en tu solicitud, con una excepción. Para obtener más información, consulta Transformaciones de registro en esta página.Qué hacer con los resultados de la inspección: La información de configuración (
DeidentifyConfig
) que define cómo deseas que se desidentifiquen los datos sensibles. En la siguiente sección, encontrarás más detalles sobre este argumento.
La API muestra los mismos elementos que le proporcionaste, en el mismo formato, pero se desidentificó todo el texto que contenga información sensible de acuerdo con tus criterios.
Especifica criterios de detección
Los detectores de tipo de información (o “Infotipo”) son los mecanismos que usa Sensitive Data Protection para encontrar datos sensibles.
Sensitive Data Protection incluye varios tipos de detectores de Infotipo, los cuales se resumen a continuación:
- Los detectores de Infotipo incorporados están integrados en la Protección de datos sensibles. Incluyen detectores para tipos de datos sensibles específicos de un país o región, así como tipos de datos aplicables a nivel mundial.
- Los detectores de Infotipos personalizados son detectores que creas tú mismo. Existen tres tipos de detectores de Infotipos personalizados:
- Los detectores de diccionarios personalizados normales son listas de palabras sencillas con las que la Protección de datos sensibles detecta coincidencias. Usa los detectores de diccionarios personalizados normales cuando tengas una lista de al menos varias decenas de miles de palabras o frases. Se prefieren los detectores de diccionarios personalizados normales si esperas que tu lista de palabras no cambie de forma significativa.
- La Protección de datos sensibles genera detectores de diccionarios personalizados almacenados con listas grandes de palabras o frases almacenadas en Cloud Storage o BigQuery. Usa los detectores de diccionarios personalizados almacenados cuando tengas listas grandes de palabras o frases de hasta decenas de millones.
- Los detectores de expresiones regulares (regex) permiten que la Protección de datos sensibles detecte coincidencias basadas en un patrón de expresión regular.
Además, la Protección de datos sensibles incluye el concepto de reglas de inspección, que te permiten ajustar con precisión los resultados del análisis mediante las siguientes reglas:
- Las reglas de exclusión te permiten reducir el número de resultados que se muestran mediante la adición de reglas a un detector de Infotipo incorporado o personalizado.
- Las reglas de palabra clave te permiten aumentar la cantidad o cambiar el valor de probabilidad de los resultados que se muestran si agregas reglas a un detector de Infotipos integrado o personalizado.
Transformaciones de desidentificación
Debes especificar una o más transformaciones cuando estableces la configuración de desidentificación (DeidentifyConfig
). Existen dos categorías de transformaciones:
InfoTypeTransformations
: Las transformaciones que solo se aplican a valores dentro del texto enviado que se identifican como un Infotipo específico.RecordTransformations
: Las transformaciones que solo se aplican a valores dentro de datos de texto tabulares enviados que se identifican como un Infotipo específico o en una columna completa de datos tabulares.
Transformaciones de Infotipos
Puedes especificar una o más transformaciones de Infotipo por solicitud. Dentro de cada objeto InfoTypeTransformation
, especifica lo siguiente:
- Uno o más Infotipos a los que se les debe aplicar una transformación (el objeto del arreglo
infoTypes[]
) - Una transformación básica (el objeto
PrimitiveTransformation
)
Ten en cuenta que especificar un Infotipo es opcional, pero no especificar al menos un Infotipo en un argumento InspectConfig
hace que la transformación se aplique a todos los Infotipos integrados que no tengan una transformación proporcionada. Esto no se recomienda, debido a que puede causar una disminución en el rendimiento y un incremento en el costo.
Transformaciones primitivas
Debes especificar al menos una transformación primitiva para aplicar a la entrada, sin importar si se aplica solo a ciertos infotipos o a la cadena de texto completa. En las siguientes secciones, se describen ejemplos de métodos de transformación que puedes usar. Para obtener una lista de todos los métodos de transformación que ofrece Sensitive Data Protection, consulta la Referencia de transformación.
replaceConfig
Establecer replaceConfig
en un objeto ReplaceValueConfig
reemplaza los valores de entrada coincidentes por un valor que especifiques.
Por ejemplo, supongamos que configuraste replaceConfig
como “[email-address]
” para todos los Infotipos EMAIL_ADDRESS
y la siguiente cadena se envía a Sensitive Data Protection:
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
La string obtenida será la que se muestra a continuación:
My name is Alicia Abernathy, and my email address is [email-address].
En el siguiente ejemplo y código JSON en varios lenguajes, se muestra cómo formar la solicitud a la API y lo que muestra la API de DLP:
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.
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.
REST
Consulta la guía de inicio rápido de JSON para obtener más información sobre el uso de la API de DLP con JSON.
Entrada de JSON:
POST https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/content:deidentify?key={YOUR_API_KEY}
{
"item":{
"value":"My name is Alicia Abernathy, and my email address is aabernathy@example.com."
},
"deidentifyConfig":{
"infoTypeTransformations":{
"transformations":[
{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
],
"primitiveTransformation":{
"replaceConfig":{
"newValue":{
"stringValue":"[email-address]"
}
}
}
}
]
}
},
"inspectConfig":{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
]
}
}
Salida de JSON:
{
"item":{
"value":"My name is Alicia Abernathy, and my email address is [email-address]."
},
"overview":{
"transformedBytes":"22",
"transformationSummaries":[
{
"infoType":{
"name":"EMAIL_ADDRESS"
},
"transformation":{
"replaceConfig":{
"newValue":{
"stringValue":"[email-address]"
}
}
},
"results":[
{
"count":"1",
"code":"SUCCESS"
}
],
"transformedBytes":"22"
}
]
}
}
redactConfig
Si especificas redactConfig
, se oculta un valor porque se lo quita por completo. El mensaje redactConfig
no tiene argumentos; si lo especificas se habilita su transformación.
Por ejemplo, supongamos que especificaste redactConfig
para todos los Infotipos EMAIL_ADDRESS
y que la siguiente cadena se envía a Protección de datos sensibles:
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
La string obtenida será la que se muestra a continuación:
My name is Alicia Abernathy, and my email address is .
En los siguientes ejemplos, se muestra cómo formar la solicitud a la API y qué muestra la API de DLP:
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:
POST https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/content:deidentify?key={YOUR_API_KEY}
{
"item":{
"value":"My name is Alicia Abernathy, and my email address is aabernathy@example.com."
},
"deidentifyConfig":{
"infoTypeTransformations":{
"transformations":[
{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
],
"primitiveTransformation":{
"redactConfig":{
}
}
}
]
}
},
"inspectConfig":{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
]
}
}
Salida de JSON:
{
"item":{
"value":"My name is Alicia Abernathy, and my email address is ."
},
"overview":{
"transformedBytes":"22",
"transformationSummaries":[
{
"infoType":{
"name":"EMAIL_ADDRESS"
},
"transformation":{
"redactConfig":{
}
},
"results":[
{
"count":"1",
"code":"SUCCESS"
}
],
"transformedBytes":"22"
}
]
}
}
characterMaskConfig
Si configuras characterMaskConfig
como un objeto CharacterMaskConfig
, se enmascara de manera parcial una string mediante el reemplazo de una cantidad determinada de caracteres por un carácter fijo. El enmascaramiento puede comenzar desde el principio o el final de la string. Esta transformación también funciona con los tipos de número como los números enteros largos.
El objeto CharacterMaskConfig
tiene varios de sus propios argumentos:
maskingCharacter
: El carácter que se debe usar para enmascarar cada carácter de un valor sensible. Por ejemplo, puedes especificar un asterisco (*) o un numeral (#) para enmascarar una serie de números como los de un número de tarjeta de crédito.numberToMask
: La cantidad de caracteres que se enmascararán. Si no estableces este valor, todos los caracteres coincidentes se enmascararán.reverseOrder
: Si se deben enmascarar los caracteres en orden inverso. Si configurasreverseOrder
como verdadero, los caracteres de los valores coincidentes se enmascaran desde el final hacia el principio del valor. Si lo estableces en falso, el enmascaramiento comienza al principio del valor.charactersToIgnore[]
: Uno o más caracteres para omitir cuando se enmascaran valores. Por ejemplo, especifica aquí un guion para que los guiones permanezcan en su lugar cuando se enmascara un número de teléfono. También puedes especificar un grupo de caracteres comunes (CharsToIgnore
) para que se los ignore cuando se enmascara.
Por ejemplo, supongamos que configuraste characterMaskConfig
para enmascarar con “#” para los infotipos EMAIL_ADDRESS
, excepto los caracteres “.” y “@” Si la siguiente cadena se envía a Sensitive Data Protection:
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
La string obtenida será la que se muestra a continuación:
My name is Alicia Abernathy, and my email address is ##########@#######.###.
A continuación, se muestran ejemplos para usar la API de DLP para desidentificar datos sensibles mediante técnicas de enmascaramiento.
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.
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.
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.
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.
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.
REST
En el siguiente ejemplo de JSON, se muestra cómo formar una solicitud a la API y lo que muestra la API de DLP:
Entrada de JSON:
POST https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/content:deidentify?key={YOUR_API_KEY}
{
"item":{
"value":"My name is Alicia Abernathy, and my email address is aabernathy@example.com."
},
"deidentifyConfig":{
"infoTypeTransformations":{
"transformations":[
{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
],
"primitiveTransformation":{
"characterMaskConfig":{
"maskingCharacter":"#",
"reverseOrder":false,
"charactersToIgnore":[
{
"charactersToSkip":".@"
}
]
}
}
}
]
}
},
"inspectConfig":{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
]
}
}
Salida de JSON:
{
"item":{
"value":"My name is Alicia Abernathy, and my email address is ##########@#######.###."
},
"overview":{
"transformedBytes":"22",
"transformationSummaries":[
{
"infoType":{
"name":"EMAIL_ADDRESS"
},
"transformation":{
"characterMaskConfig":{
"maskingCharacter":"#",
"charactersToIgnore":[
{
"charactersToSkip":".@"
}
]
}
},
"results":[
{
"count":"1",
"code":"SUCCESS"
}
],
"transformedBytes":"22"
}
]
}
}
cryptoHashConfig
Si configuras cryptoHashConfig
como un objeto CryptoHashConfig
, se realiza una seudonimización en un valor de entrada mediante la generación de un valor subrogado con un hash criptográfico.
Este método reemplaza al valor de entrada con un “resumen” o valor de hash encriptado.
El resumen se calcula si tomas el hash SHA-256 del valor de entrada.
La clave criptográfica que se usa para crear el hash es un objeto CryptoKey
y debe tener un tamaño de 32 o 64 bytes.
El método genera una representación codificada en Base64 de la salida de hash. Por el momento, solo los valores de número entero y string pueden generar un hash.
Por ejemplo, supongamos que especificaste cryptoHashConfig
para todos los Infotipos EMAIL_ADDRESS
y el objeto CryptoKey
consta de una clave generada de forma aleatoria (TransientCryptoKey
). Luego, se envía la siguiente cadena a la Protección de datos sensibles:
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
La string obtenida generada de manera criptográfica tendrá el siguiente aspecto:
My name is Alicia Abernathy, and my email address is 41D1567F7F99F1DC2A5FAB886DEE5BEE.
Por supuesto, la string hexadecimal se generará de manera criptográfica y será diferente a la que se muestra aquí.
dateShiftConfig
Si configuras dateShiftConfig
como un objeto DateShiftConfig
, se realiza un cambio de fecha en un valor de entrada de fecha mediante el cambio de fechas por una cantidad de días aleatoria.
Las técnicas de cambio de fechas cambian un conjunto de fechas de forma aleatoria, pero conservan la secuencia y la duración de un período. En general, el cambio de fechas se realiza en el contexto de un individuo o una entidad. Es decir, debes cambiar todas las fechas para un individuo específico con el mismo diferencial de cambio, pero debes usar un diferencial de cambio distinto para cada individuo.
Para obtener más información sobre cambio de fecha, consulta el tema del concepto de cambio de fecha.
A continuación, se observa el código de muestra en varios lenguajes, lo que explica cómo usar la API de DLP para desidentificar fechas mediante el cambio de fecha.
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.
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.
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.
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.
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.
cryptoReplaceFfxFpeConfig
Si configuras cryptoReplaceFfxFpeConfig
como un objeto CryptoReplaceFfxFpeConfig
, se realiza una seudonimización en un valor de entrada mediante el reemplazo de un valor de entrada por un token. Este token tiene las siguientes características:
- Es el valor de entrada encriptado.
- Tiene la misma longitud que el valor de entrada.
- Se calcula con la encriptación de preservación de formato en modo FFX (“FPE-FFX”) vinculada con la clave criptográfica especificada por
cryptoKey
. - Está compuesto por los caracteres especificados por
alphabet
. Opciones válidas:NUMERIC
HEXADECIMAL
UPPER_CASE_ALPHA_NUMERIC
ALPHA_NUMERIC
El valor de entrada debe cumplir las siguientes condiciones:
- Debe constar de al menos dos caracteres (o la string vacía).
- Debe estar compuesto por los caracteres especificados por un
alphabet
. Elalphabet
puede estar compuesto por entre 2 y 95 caracteres. Unalphabet
con 95 caracteres incluye todos los caracteres imprimibles en el grupo de caracteres US-ASCII.
La Protección de datos sensibles calcula el token de reemplazo con una clave criptográfica. Debes proporcionar esta clave de una de las siguientes tres maneras:
- Incorpórala sin encriptar en la solicitud a la API. No se recomienda hacerlo.
- Solicita que Sensitive Data Protection la genere.
- Incorpórala ya encriptada en la solicitud a la API.
Si eliges incorporar la clave en la solicitud a la API, debes crear una clave y unirla (encriptarla) con una clave de Cloud Key Management Service (Cloud KMS). El valor que se muestra es una string codificada en base64 de forma predeterminada. Para establecer este valor en la Protección de datos sensibles, debes decodificarlo en una cadena de bytes. En los siguientes fragmentos de código, se destaca cómo realizar esto en varios lenguajes. A continuación de estos fragmentos, se proporcionan ejemplos de extremo a extremo.
Java
KmsWrappedCryptoKey.newBuilder()
.setWrappedKey(ByteString.copyFrom(BaseEncoding.base64().decode(wrappedKey)))
Python
# The wrapped key is base64-encoded, but the library expects a binary
# string, so decode it here.
import base64
wrapped_key = base64.b64decode(wrapped_key)
PHP
// Create the wrapped crypto key configuration object
$kmsWrappedCryptoKey = (new KmsWrappedCryptoKey())
->setWrappedKey(base64_decode($wrappedKey))
->setCryptoKeyName($keyName);
C#
WrappedKey = ByteString.FromBase64(wrappedKey)
Para obtener más información sobre la encriptación y la desencriptación de datos mediante Cloud KMS, consulta Encripta y desencripta datos.
Por diseño, FPE-FFX conserva la longitud y el grupo de caracteres del texto de entrada. Esto significa que carece de autenticación y de un vector de inicialización, lo que puede causar una expansión de longitud en el token de salida. Otros métodos como AES-SIV proporcionan estas garantías de seguridad más sólidas y se recomiendan para los casos de uso de asignación de token, a menos que la preservación de la longitud y el conjunto de caracteres sean requisitos estrictos, por ejemplo, para la retrocompatibilidad con un sistema de datos heredado.
A continuación, se muestra el código de muestra en varios lenguajes que demuestran cómo usar la Protección de datos sensibles para desidentificar datos sensibles mediante el reemplazo de un valor de entrada por un token.
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.
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.
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.
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.
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.
Si quieres ver muestras de código que demuestran cómo usar Sensitive Data Protection para volver a identificar datos sensibles que se desidentificaron a través del método de transformación CryptoReplaceFfxFpeConfig
, consulta Encriptación de preservación de formato: ejemplos de reidentificación.
fixedSizeBucketingConfig
Las transformaciones de agrupamiento (esta y bucketingConfig
) sirven para enmascarar datos numéricos mediante el “agrupamiento” en rangos. El rango numérico resultante es una string con guion que consta de un límite inferior, un guion y un límite superior.
Si configuras fixedSizeBucketingConfig
en un objeto FixedSizeBucketingConfig
, se agrupan los valores de entrada según rangos fijos de tamaño. El objeto FixedSizeBucketingConfig
consta de lo siguiente:
lowerBound
: El valor del límite inferior de todos los agrupamientos. Los valores menores que este se juntan en un solo grupo.upperBound
: El valor del límite superior de todos los agrupamientos. Los valores mayores que este se juntan en un solo grupo.bucketSize
: El tamaño de cada grupo, excepto los grupos mínimo y máximo.
Por ejemplo, si se establece lowerBound
en 10, upperBound
en 89 y bucketSize
en 10, se usarán los siguientes grupos: -10, 10-20, 20-30, 30-40, 40-50, 50-60, 60-70, 70-80, 80-89, 89+.
Para obtener más información sobre el concepto de agrupamiento, consulta Generalización y agrupamiento.
bucketingConfig
La transformación bucketingConfig
ofrece más flexibilidad que la otra transformación de agrupamiento, fixedSizeBucketingConfig
.
En vez de especificar los límites inferiores y superiores y un valor interno con el que crear grupos de igual tamaño, especificas los valores mínimo y máximo para cada grupo que desees crear. Cada par de valor mínimo y máximo debe tener el mismo tipo.
Si configuras bucketingConfig
como un objeto BucketingConfig
, se especifican grupos personalizados. El objeto BucketingConfig
consta de un arreglo buckets[]
de objetos Bucket
. Cada objeto Bucket
consta de lo siguiente:
min
: El límite inferior del rango del bucket. Omite este valor para crear un grupo que no tenga un límite inferior.max
: El límite superior del rango del bucket. Omite este valor para crear un grupo que no tenga un límite superior.replacementValue
: El valor por el que se reemplazan los valores que se encuentran dentro de los límites inferior y superior. Si no proporcionas unreplacementValue
, se usará un rangomin-max
con guion.
Si un valor se encuentra fuera de los rangos definidos, el TransformationSummary
que se muestra contendrá un mensaje de error.
Por ejemplo, considera la siguiente configuración para la transformación bucketingConfig
:
"bucketingConfig":{
"buckets":[
{
"min":{
"integerValue":"1"
},
"max":{
"integerValue":"30"
},
"replacementValue":{
"stringValue":"LOW"
}
},
{
"min":{
"integerValue":"31"
},
"max":{
"integerValue":"65"
},
"replacementValue":{
"stringValue":"MEDIUM"
}
},
{
"min":{
"integerValue":"66"
},
"max":{
"integerValue":"100"
},
"replacementValue":{
"stringValue":"HIGH"
}
}
]
}
Esta configuración define el siguiente comportamiento:
- Los valores de número entero que se encuentran entre 1 y 30 se enmascaran mediante el reemplazo por
LOW
. - Los valores de número entero que se encuentran entre 31 y 65 se enmascaran mediante el reemplazo por
MEDIUM
. - Los valores de número entero que se encuentran entre 66 y 100 se enmascaran mediante el reemplazo por
HIGH
.
Para obtener más información sobre el concepto de agrupamiento, consulta Generalización y agrupamiento.
replaceWithInfoTypeConfig
Si especificas replaceWithInfoTypeConfig
, se reemplaza cada valor coincidente por el nombre del Infotipo. El mensaje replaceWithInfoTypeConfig
no tiene argumentos; si lo especificas se habilita su transformación.
Por ejemplo, supongamos que especificaste replaceWithInfoTypeConfig
para todos los Infotipos EMAIL_ADDRESS
y que la siguiente cadena se envía a Protección de datos sensibles:
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
La string obtenida será la que se muestra a continuación:
My name is Alicia Abernathy, and my email address is EMAIL_ADDRESS.
timePartConfig
Si configuras timePartConfig
en un objeto TimePartConfig
, se preserva una parte del valor coincidente que incluye los valores Date
, Timestamp
y TimeOfDay
. El objeto TimePartConfig
consta de un argumento partToExtract
, que se puede establecer en cualquiera de los valores enumerados de TimePart
, que incluyen año, mes, día del mes, etcétera.
Por ejemplo, supongamos que configuraste una transformación timePartConfig
mediante la configuración de partToExtract
en YEAR
. Después de enviar los datos de la primera columna que se encuentra a continuación a la Protección de datos sensibles, obtendrías los valores transformados de la segunda columna:
Valores originales | Valores transformados |
---|---|
9/21/1976 |
1976 |
6/7/1945 |
1945 |
1/20/2009 |
2009 |
7/4/1776 |
1776 |
8/1/1984 |
1984 |
4/21/1982 |
1982 |
Transformaciones de registro
Las transformaciones de registros (el objeto RecordTransformations
) solo se aplican a valores dentro de datos tabulares que se identifican como un Infotipo específico. En RecordTransformations
, hay otras dos subcategorías de transformaciones más, que son las siguientes:
fieldTransformations[]
: Transformaciones que aplican varias transformaciones de camporecordSuppressions[]
: Reglas que definen qué registros se suprimen por completo Los registros que coinciden con cualquier regla de supresión dentro derecordSuppressions[]
se omiten en la salida.
Transformaciones de campo
Cada objeto FieldTransformation
incluye tres argumentos, que son los siguientes:
fields
: Uno o más campos de entrada (objetosFieldID
) para aplicar la transformación.condition
: Una condición (un objetoRecordCondition
) que debe evaluarse como verdadera para que se aplique la transformación. Por ejemplo, aplica una transformación de agrupamiento a una columna de edad de un registro solo si la columna de código postal para el mismo registro se encuentra dentro de un rango específico. Otra opción es ocultar un campo solo si en el campo de fecha de nacimiento se pone la edad de una persona en 85 o más.Uno de los siguientes dos argumentos de tipo de transformación. Debes especificar uno de ellos:
infoTypeTransformations
: Trata el contenido del campo como texto libre y aplica unaPrimitiveTransformation
solo al contenido que coincida con unInfoType
. Estas transformaciones se analizaron antes en este tema.primitiveTransformation
: Aplica la transformación básica especificada (objetoPrimitiveTransformation
) a todo el campo. Estas transformaciones se analizaron antes en este tema.Si tu objeto
RecordTransformations
solo contiene unprimitiveTransformation
y no uninfoTypeTransformations
, no es necesario que incluyas un objetoInspectConfig
en tu solicitud. Si lo haces, Sensitive Data Protection lo ignorará.
Ejemplo de transformaciones de campos
En el siguiente ejemplo, se envía una solicitud projects.content.deidentify
con dos transformaciones de campo:
La primera transformación de campo se aplica a las dos primeras columnas (
column1
ycolumn2
). Debido a que su tipo de transformación es un objetoprimitiveTransformation
(específicamente, unCryptoDeterministicConfig
), Sensitive Data Protection transforma todo el campo.La segunda transformación de campo se aplica a la tercera columna (
column3
). Debido a que su tipo de transformación es un objetoinfoTypeTransformations
, la Protección de datos sensibles aplica la transformación primitiva (específicamente, unaReplaceWithInfoTypeConfig
) solo al contenido que coincide con el Infotipo establecido en la configuración de inspección.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
-
PROJECT_ID
es el ID del proyecto de Google Cloud. Los IDs de proyecto son cadenas alfanuméricas, comomy-project
.
Método HTTP y URL:
POST https://dlp.googleapis.com/v2/projects/PROJECT_ID/content:deidentify
Cuerpo JSON de la solicitud:
{ "item": { "table": { "headers": [ { "name": "column1" }, { "name": "column2" }, { "name": "column3" } ], "rows": [ { "values": [ { "stringValue": "Example string 1" }, { "stringValue": "Example string 2" }, { "stringValue": "My email address is dani@example.org" } ] }, { "values": [ { "stringValue": "Example string 1" }, { "stringValue": "Example string 3" }, { "stringValue": "My email address is cruz@example.org" } ] } ] } }, "deidentifyConfig": { "recordTransformations": { "fieldTransformations": [ { "fields": [ { "name": "column1" }, { "name": "column2" } ], "primitiveTransformation": { "cryptoDeterministicConfig": { "cryptoKey": { "unwrapped": { "key": "YWJjZGVmZ2hpamtsbW5vcA==" } } } } }, { "fields": [ { "name": "column3" } ], "infoTypeTransformations": { "transformations": [ { "primitiveTransformation": { "replaceWithInfoTypeConfig": {} } } ] } } ] } }, "inspectConfig": { "infoTypes": [ { "name": "EMAIL_ADDRESS" } ] } }
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
{ "item": { "table": { "headers": [ { "name": "column1" }, { "name": "column2" }, { "name": "column3" } ], "rows": [ { "values": [ { "stringValue": "AWttmGlln6Z2MFOMqcOzDdNJS52XFxOOZsg0ckDeZzfc" }, { "stringValue": "AUBTE+sQB6eKZ5iD3Y0Ss682zANXbijuFl9KL9ExVOTF" }, { "stringValue": "My email address is [EMAIL_ADDRESS]" } ] }, { "values": [ { "stringValue": "AWttmGlln6Z2MFOMqcOzDdNJS52XFxOOZsg0ckDeZzfc" }, { "stringValue": "AU+oD2pnqUDTLNItE8RplY3E0fTHeO4rZkX4GeFHN2CI" }, { "stringValue": "My email address is [EMAIL_ADDRESS]" } ] } ] } }, "overview": { "transformedBytes": "96", "transformationSummaries": [ { "field": { "name": "column1" }, "results": [ { "count": "2", "code": "SUCCESS" } ], "fieldTransformations": [ { "fields": [ { "name": "column1" }, { "name": "column2" } ], "primitiveTransformation": { "cryptoDeterministicConfig": { "cryptoKey": { "unwrapped": { "key": "YWJjZGVmZ2hpamtsbW5vcA==" } } } } } ], "transformedBytes": "32" }, { "field": { "name": "column2" }, "results": [ { "count": "2", "code": "SUCCESS" } ], "fieldTransformations": [ { "fields": [ { "name": "column1" }, { "name": "column2" } ], "primitiveTransformation": { "cryptoDeterministicConfig": { "cryptoKey": { "unwrapped": { "key": "YWJjZGVmZ2hpamtsbW5vcA==" } } } } } ], "transformedBytes": "32" }, { "infoType": { "name": "EMAIL_ADDRESS", "sensitivityScore": { "score": "SENSITIVITY_MODERATE" } }, "field": { "name": "column3" }, "results": [ { "count": "2", "code": "SUCCESS" } ], "fieldTransformations": [ { "fields": [ { "name": "column3" } ], "infoTypeTransformations": { "transformations": [ { "primitiveTransformation": { "replaceWithInfoTypeConfig": {} } } ] } } ], "transformedBytes": "32" } ] } }
Supresión de registro
Además de aplicar transformaciones a los datos de campo, también puedes indicarle a Sensitive Data Protection que desidentifique los datos mediante la supresión de registros cuando algunas condiciones de supresión se evalúen como verdaderas. Puedes aplicar las transformaciones de campo y las supresiones de registros en la misma solicitud.
Establece el mensaje recordSuppressions
del objeto RecordTransformations
en un arreglo de uno o más objetos RecordSuppression
.
Cada objeto RecordSuppression
contiene un solo objeto RecordCondition
, que a su vez contiene un solo objeto Expressions
.
Un objeto Expressions
contiene lo siguiente:
logicalOperator
: Uno de los tipos enumeradosLogicalOperator
.conditions
: Un objetoConditions
que contiene un arreglo de uno o más objetosCondition
. UnaCondition
es una comparación de un valor de campo con otro valor, ambos de tipostring
,boolean
,integer
,double
,Timestamp
oTimeofDay
.
Si la comparación se evalúa como verdadera, el registro se suprime y viceversa. Si los valores comparados no son del mismo tipo, se emite una advertencia y la condición se evalúa como falsa.
Transformaciones reversibles
Cuando desidentificas datos mediante las transformaciones de Infotipo CryptoReplaceFfxFpeConfig
o CryptoDeterministicConfig
, puedes volver a identificar esos datos, siempre que tengas la CryptoKey
que se usó en un principio para desidentificar los datos.
Para obtener más información, consulta Transformaciones de tokenización basadas en criptografía.
Límite de la cantidad de resultados
Si tu solicitud tiene más de 3,000 resultados, la Protección de datos sensibles muestra el siguiente mensaje:
Too many findings to de-identify. Retry with a smaller request.
La lista de resultados que muestra la Protección de datos sensibles es un subconjunto arbitrario de todos los resultados de la solicitud. Para obtener todos los resultados, divide tu solicitud en lotes más pequeños.
¿Qué sigue?
Obtén más información sobre cómo un flujo de trabajo de desidentificación se ajusta a las implementaciones reales.
Completa el codelab Oculta datos sensibles con Sensitive Data Protection.
Trabaja con un ejemplo en el que se muestre cómo crear una clave unida, asignar un token al contenido y reidentificar el contenido con asignación de token.
Obtén más información para crear una copia desidentificada de los datos en el almacenamiento.