Protección de Datos Sensibles puede desidentificar datos sensibles en contenido de texto, incluido el texto almacenado en estructuras de contenedores, como tablas. La desidentificación es el proceso mediante el cual se elimina la información de identificación de los datos. La API detecta datos sensibles, como la información personal identificable (IPI) y, a continuación, utiliza una transformación de desidentificación para enmascarar, eliminar u ocultar de cualquier otra forma los datos. Por ejemplo, las técnicas de desidentificación pueden incluir cualquiera de las siguientes:
- Ocultar datos sensibles sustituyendo parcial o totalmente los caracteres por un símbolo, como un asterisco (*) o una almohadilla (#).
- Sustituye cada instancia de datos sensibles por un token o una cadena de caracteres sustituta.
- Encriptar y sustituir datos sensibles con una clave generada aleatoriamente o predeterminada.
Puedes proporcionar información a la API mediante JSON a través de HTTPS, así como la CLI y varios lenguajes de programación mediante las bibliotecas de 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 cómo enviar información en formato JSON, consulta la guía de inicio rápido de JSON.
Información general sobre la API
Para desidentificar datos sensibles, usa el método content.deidentify
de Protección de Datos Sensibles.
Las llamadas a la API de desidentificación constan de tres partes:
- Los datos que se van a inspeccionar: una cadena o una estructura de tabla
(
ContentItem
objeto) que la API debe inspeccionar. Qué se debe inspeccionar: información de configuración de la detección (
InspectConfig
) como los tipos de datos (o infoTypes) que se deben buscar, si se deben filtrar los resultados que superen un determinado umbral de probabilidad y si se debe devolver un número máximo de resultados.En tu objeto
InspectConfig
, asegúrate de incluir los infoTypes que quieras buscar. De lo contrario, Protección de Datos Sensibles buscará un conjunto predeterminado de infoTypes (ALL_BASIC
), algunos de los cuales puede que no necesites. Buscar infoTipos que no necesitas puede añadir latencia innecesariamente a tu solicitud.En tu solicitud se requiere un objeto
InspectConfig
, con una excepción. Para obtener más información, consulta Transformaciones de registros en esta página.Qué hacer con los resultados de la inspección: información de configuración (
DeidentifyConfig
) que define cómo quieres que se desidentifiquen los datos sensibles. Este argumento se trata con más detalle en la siguiente sección.
La API devuelve los mismos elementos que le proporcionaste en el mismo formato, pero el texto que se haya identificado como que contiene información sensible según tus criterios se ha anonimizado.
Especificar criterios de detección
Los detectores de tipo de información (o "infoType") son los mecanismos que usa Protección de Datos Sensibles para encontrar datos sensibles.
Protección de Datos Sensibles incluye varios tipos de detectores de infoType, que se resumen a continuación:
- Los detectores de infoType integrados están integrados en Protección de Datos Sensibles. Incluyen detectores de tipos de datos sensibles específicos de un país o una región, así como tipos de datos aplicables a nivel mundial.
- Los detectores de infoType personalizados son detectores que creas tú. Hay tres tipos de detectores de infoType personalizados:
- Los detectores de diccionario personalizado normales son listas de palabras sencillas con las que Protección de Datos Sensibles busca coincidencias. Utiliza detectores de diccionario personalizado normales cuando tengas una lista de hasta varias decenas de miles de palabras o frases. Se recomienda usar detectores de diccionario personalizado normales si no prevés que tu lista de palabras vaya a cambiar significativamente.
- Protección de Datos Sensibles genera detectores de diccionario personalizado almacenados a partir de grandes listas de palabras o frases almacenadas en Cloud Storage o BigQuery. Usa detectores de diccionarios personalizados almacenados cuando tengas una lista grande de palabras o frases (hasta decenas de millones).
- Los detectores de expresiones regulares (regex) permiten que Protección de Datos Sensibles detecte coincidencias basadas en un patrón de expresión regular.
Además, Protección de Datos Sensibles incluye el concepto de reglas de inspección, que te permiten ajustar los resultados de los análisis con lo siguiente:
- Las reglas de exclusión le permiten reducir el número de resultados devueltos añadiendo reglas a un detector de infoType integrado o personalizado.
- Las reglas de palabras de activación te permiten aumentar la cantidad o cambiar el valor de probabilidad de los resultados devueltos añadiendo reglas a un detector de infoType integrado o personalizado.
Transformaciones de desidentificación
Debe especificar una o varias transformaciones al definir la configuración de desidentificación (DeidentifyConfig
).
Hay dos categorías de transformaciones:
InfoTypeTransformations
: Transformaciones que solo se aplican a los valores del texto enviado que se identifican como un infoType específico.RecordTransformations
: Transformaciones que solo se aplican a los valores de los datos de texto tabulares enviados que se identifican como un infoType específico o a una columna completa de datos tabulares.
Transformaciones de infoType
Puede especificar una o varias transformaciones de infoType por solicitud. En cada objeto InfoTypeTransformation
, debes especificar lo siguiente:
- Uno o varios infoTypes a los que se debe aplicar una transformación (el objeto de matriz
infoTypes[]
). - Una transformación primitiva (el objeto
PrimitiveTransformation
).
Ten en cuenta que especificar un infoType es opcional, pero si no se especifica al menos uno en un argumento de InspectConfig
, la transformación se aplicará a todos los infoTypes integrados que no tengan una transformación proporcionada. No se recomienda hacerlo, ya que puede provocar una disminución del rendimiento y un aumento de los costes.
Transformaciones primitivas
Debe especificar al menos una transformación primitiva que se aplique a la entrada, independientemente de si la aplica solo a determinados infoTypes o a toda la cadena de texto. En las siguientes secciones se describen ejemplos de métodos de transformación que puedes usar. Para ver una lista de todos los métodos de transformación que ofrece Protección de Datos Sensibles, consulta la referencia de transformaciones.
replaceConfig
Si asignas el valor replaceConfig
a un objeto ReplaceValueConfig
, se sustituirán los valores de entrada coincidentes por el valor que especifiques.
Por ejemplo, supongamos que ha definido replaceConfig
como "[email-address]
"
para todos los infoTypes EMAIL_ADDRESS
y que se envía la siguiente cadena a
Protección de Datos Sensibles:
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
La cadena devuelta será la siguiente:
My name is Alicia Abernathy, and my email address is [email-address].
En el siguiente ejemplo de JSON y código en varios lenguajes se muestra cómo formar la solicitud a la API y qué devuelve la API DLP:
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.
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.
REST
Consulta la guía de inicio rápido de JSON para obtener más información sobre cómo usar la API de DLP con JSON.
Entrada 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 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 determinado eliminándolo por completo. El mensaje redactConfig
no tiene argumentos. Si lo especificas, se habilita su transformación.
Por ejemplo, supongamos que ha especificado redactConfig
para todos los EMAIL_ADDRESS
infoTypes y que se envía la siguiente cadena a Protección de Datos Sensibles:
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
La cadena devuelta será la siguiente:
My name is Alicia Abernathy, and my email address is .
En los siguientes ejemplos se muestra cómo crear la solicitud de la API y qué devuelve la API DLP:
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:
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 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 asignas el valor characterMaskConfig
a un objeto CharacterMaskConfig
, se enmascara parcialmente una cadena sustituyendo un número determinado de caracteres por un carácter fijo. El enmascaramiento puede empezar al principio o al final de la cadena. Esta transformación también funciona con tipos de números, como los enteros largos.
El objeto CharacterMaskConfig
tiene varios argumentos propios:
maskingCharacter
: carácter que se usa para enmascarar cada carácter de un valor sensible. Por ejemplo, puedes especificar un asterisco (*) o una almohadilla (#) para ocultar una serie de números, como los de una tarjeta de crédito.numberToMask
: número de caracteres que se van a enmascarar. Si no defines este valor, se enmascararán todos los caracteres coincidentes.reverseOrder
: indica si se deben enmascarar los caracteres en orden inverso. Si se asigna el valor true areverseOrder
, los caracteres de los valores coincidentes se enmascaran desde el final hacia el principio del valor. Si se asigna el valor "false", el enmascaramiento empezará al principio del valor.charactersToIgnore[]
: uno o varios caracteres que se omitirán al enmascarar valores. Por ejemplo, especifica un guion para dejar los guiones en su sitio al enmascarar un número de teléfono. También puedes especificar un grupo de caracteres comunes (CharsToIgnore
) que se ignorarán al enmascarar.
Por ejemplo, supongamos que ha configurado characterMaskConfig
para que se enmascare con "#" en los infotipos de EMAIL_ADDRESS
, excepto en los caracteres "." y "@". Si se envía la siguiente cadena a Protección de Datos Sensibles:
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
La cadena devuelta será la siguiente:
My name is Alicia Abernathy, and my email address is ##########@#######.###.
A continuación, se muestran ejemplos de cómo usar la API DLP para desidentificar datos sensibles mediante técnicas de enmascaramiento.
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.
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.
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.
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.
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.
REST
En el siguiente ejemplo de JSON se muestra cómo crear la solicitud de la API y qué devuelve la API DLP:
Entrada 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 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 asignas a cryptoHashConfig
un objeto CryptoHashConfig
, se seudonimiza un valor de entrada
generando un valor sustituto mediante un cifrado hash.
Este método sustituye el valor de entrada por un "resumen" o valor hash cifrado.
La digestión se calcula tomando el hash SHA-256 del valor introducido.
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 cifrada. Por el momento, solo se pueden cifrar valores de cadena y enteros.
Por ejemplo, supongamos que ha especificado cryptoHashConfig
para todos los
EMAIL_ADDRESS
infoTypes y que el objeto CryptoKey
consta de una clave generada aleatoriamente (a
TransientCryptoKey
).
A continuación, se envía la siguiente cadena a Protección de Datos Sensibles:
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
La cadena devuelta generada criptográficamente tendrá el siguiente aspecto:
My name is Alicia Abernathy, and my email address is 41D1567F7F99F1DC2A5FAB886DEE5BEE.
Por supuesto, la cadena hexadecimal se generará de forma criptográfica y será diferente de la que se muestra aquí.
dateShiftConfig
Si asignas a dateShiftConfig
un objeto DateShiftConfig
, se realiza un desplazamiento de fecha en un valor de entrada de fecha. Para ello, se desplazan las fechas un número aleatorio de días.
Las técnicas de cambio de fechas modifican aleatoriamente un conjunto de fechas, pero conservan la secuencia y la duración de un periodo. Las fechas de cambio suelen estar relacionadas con una persona o una entidad. Es decir, quieres cambiar todas las fechas de una persona concreta con la misma diferencia horaria, pero usar una diferencia horaria distinta para cada una de las demás personas.
Para obtener más información sobre el cambio de fecha, consulta el artículo sobre el concepto de cambio de fecha.
A continuación, se muestra un ejemplo de código en varios lenguajes que explica cómo usar la API DLP para desidentificar fechas mediante el desplazamiento de fechas.
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.
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.
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.
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.
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.
cryptoReplaceFfxFpeConfig
Si asignas el valor cryptoReplaceFfxFpeConfig
a un objeto CryptoReplaceFfxFpeConfig
, se seudonimiza un valor de entrada sustituyéndolo por un token. Este token es:
- Es el valor de entrada cifrado.
- La misma longitud que el valor de entrada.
- Se calcula mediante el cifrado con conservación de formato en modo FFX ("FPE-FFX") con la clave criptográfica especificada por
cryptoKey
. - Consta de los caracteres especificados por
alphabet
. Opciones válidas:NUMERIC
HEXADECIMAL
UPPER_CASE_ALPHA_NUMERIC
ALPHA_NUMERIC
El valor de entrada:
- Debe tener al menos dos caracteres (o una cadena vacía).
- Debe estar formado por los caracteres especificados por un
alphabet
. Elalphabet
puede tener entre 2 y 95 caracteres. (Unalphabet
con 95 caracteres incluye todos los caracteres imprimibles del conjunto de caracteres US-ASCII).
Protección de Datos Sensibles calcula el token de sustitución mediante una clave criptográfica. Puedes proporcionar esta clave de tres formas:
- Insertándola sin cifrar en la solicitud a la API. aunque no se recomienda hacerlo.
- Solicitando a Protección de Datos Sensibles que la genere.
- Insertándola cifrada en la solicitud a la API.
Si decides insertar la clave en la solicitud de la API, debes crear una clave y envolverla (encriptarla) con una clave de Cloud Key Management Service (Cloud KMS). El valor devuelto es una cadena codificada en base64 de forma predeterminada. Para definir este valor en Protección de Datos Sensibles, debes decodificarlo en una cadena de bytes. En los siguientes fragmentos de código se destaca cómo hacerlo en varios idiomas. Después de estos fragmentos, se proporcionan ejemplos completos.
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 cómo cifrar y descifrar datos con Cloud KMS, consulta el artículo Cifrar y descifrar datos.
Por diseño, FPE-FFX conserva la longitud y el conjunto de caracteres del texto de entrada. Esto significa que no tiene autenticación ni vector de inicialización, lo que provocaría una expansión de longitud en el token de salida. Otros métodos, como AES-SIV, ofrecen estas garantías de seguridad más sólidas y se recomiendan para los casos prácticos de tokenización, a menos que la conservación de la longitud y del conjunto de caracteres sean requisitos estrictos (por ejemplo, para la compatibilidad con versiones anteriores de un sistema de datos antiguo).
A continuación, se muestra un código de ejemplo en varios idiomas que explica cómo usar Protección de Datos Sensibles para desidentificar datos sensibles sustituyendo un valor de entrada por un token.
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.
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.
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.
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.
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.
Para ver ejemplos de código que muestran cómo usar Protección de Datos Sensibles para volver a identificar datos sensibles que se han desidentificado mediante el método de transformación CryptoReplaceFfxFpeConfig
, consulta Encriptado con preservación de formato: ejemplos de reidentificación.
fixedSizeBucketingConfig
Las transformaciones de creación de contenedores (esta y bucketingConfig
) sirven para enmascarar datos numéricos agrupándolos en intervalos. El intervalo de números resultante es una cadena con un guion
que consta de un límite inferior, un guion y un límite superior.
Si asigna el valor fixedSizeBucketingConfig
a FixedSizeBucketingConfig
los valores de entrada de los segmentos de objetos se basan en intervalos de tamaño fijo. El objeto FixedSizeBucketingConfig
se compone de lo siguiente:
lowerBound
: el valor del límite inferior de todos los segmentos. Los valores inferiores a este se agrupan en un solo segmento.upperBound
: valor del límite superior de todos los contenedores. Los valores superiores a este se agrupan en un solo contenedor.bucketSize
: tamaño de cada contenedor, excepto el mínimo y el máximo.
Por ejemplo, si lowerBound
es 10, upperBound
es 89 y bucketSize
es 10, se usarían los siguientes segmentos: -10, 10-20, 20-30, 30-40, 40-50, 50-60, 60-70, 70-80, 80-89 y 89+.
Para obtener más información sobre el concepto de segmentación, consulta Generalización y segmentación.
bucketingConfig
La transformación bucketingConfig
ofrece más flexibilidad que la otra transformación de asignación a contenedor, fixedSizeBucketingConfig
.
En lugar de especificar los límites superior e inferior y un valor de intervalo con el que crear contenedores del mismo tamaño, especifica los valores máximo y mínimo de cada contenedor que quieras crear. Cada par de valores máximo y mínimo debe tener el mismo tipo.
Si se asigna el valor BucketingConfig
a bucketingConfig
, se especifican los segmentos personalizados. El objeto BucketingConfig
consta de una matriz buckets[]
de objetos Bucket
. Cada objeto Bucket
consta de lo siguiente:
min
: límite inferior del intervalo del contenedor. Omite este valor para crear un contenedor que no tenga límite inferior.max
: límite superior del intervalo del contenedor. Omite este valor para crear un contenedor sin límite superior.replacementValue
: valor con el que se sustituirán los valores que se encuentren entre los límites inferior y superior. Si no proporcionas unreplacementValue
, se usará un intervalomin-max
con guion.
Si un valor está fuera de los intervalos definidos, el TransformationSummary
devuelto contendrá un mensaje de error.
Por ejemplo, considere la siguiente configuración de 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"
}
}
]
}
Esto define el siguiente comportamiento:
- Los valores enteros comprendidos entre 1 y 30 se ocultan sustituyéndolos por
LOW
. - Los valores enteros comprendidos entre 31 y 65 se ocultan y se sustituyen por
MEDIUM
. - Los valores enteros comprendidos entre 66 y 100 se ocultan y se sustituyen por
HIGH
.
Para obtener más información sobre el concepto de segmentación, consulta Generalización y segmentación.
replaceWithInfoTypeConfig
Si especifica replaceWithInfoTypeConfig
, se sustituirá cada valor coincidente por el nombre del infoType. El mensaje replaceWithInfoTypeConfig
no tiene argumentos. Si lo especificas, se habilita su transformación.
Por ejemplo, supongamos que ha especificado replaceWithInfoTypeConfig
para todos los
EMAIL_ADDRESS
infoTypes y que se envía la siguiente cadena a
Protección de Datos Sensibles:
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
La cadena devuelta será la siguiente:
My name is Alicia Abernathy, and my email address is EMAIL_ADDRESS.
timePartConfig
Si asignas el valor timePartConfig
a un objeto TimePartConfig
, se conserva una parte de un valor coincidente que incluye los valores Date
, Timestamp
y TimeOfDay
. El objeto TimePartConfig
consta de un argumento partToExtract
, que puede tener cualquiera de los valores enumerados de TimePart
, como año, mes, día del mes, etc.
Por ejemplo, supongamos que ha configurado una transformación timePartConfig
definiendo partToExtract
como YEAR
. Después de enviar los datos de la primera columna de abajo a 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 |
Registrar transformaciones
Las transformaciones de registros (el objeto
RecordTransformations
) solo se aplican a los valores de los datos tabulares que se identifican como
un infoType específico. En RecordTransformations
, hay dos subcategorías de transformaciones:
fieldTransformations[]
: transformaciones que aplican varias transformaciones de campos.recordSuppressions[]
: reglas que definen qué registros se suprimen por completo. Los registros que coincidan con alguna regla de supresión derecordSuppressions[]
se omiten en el resultado.
Transformaciones de campos
Cada objeto
FieldTransformation
incluye tres argumentos:
fields
: uno o varios campos de entrada (objetosFieldID
) a los que aplicar la transformación.condition
: una condición (un objetoRecordCondition
) que debe dar como resultado true para que se aplique la transformación. Por ejemplo, aplica una transformación de contenedor a una columna de edad de un registro solo si la columna de código postal del mismo registro está dentro de un intervalo específico. O bien, redactar un campo solo si el campo de fecha de nacimiento indica que una persona tiene 85 años o más.Uno de los dos argumentos de tipo de transformación siguientes. Es obligatorio especificar uno de los siguientes:
infoTypeTransformations
: trata el contenido del campo como texto libre y aplica unPrimitiveTransformation
solo al contenido que coincida con unInfoType
. Estas transformaciones se han explicado en la sección anterior de este tema.primitiveTransformation
: aplica la transformación primitiva especificada (PrimitiveTransformation
objeto) a todo el campo. Estas transformaciones se han explicado en este tema.Si tu objeto
RecordTransformations
solo contiene unprimitiveTransformation
y ningúninfoTypeTransformations
, no es necesario que incluyas un objetoInspectConfig
en tu solicitud. Si lo haces, Protección de Datos Sensibles lo ignorará.
Ejemplo de transformaciones de campos
En el siguiente ejemplo se envía una solicitud projects.content.deidentify
con dos transformaciones de campos:
La primera transformación de campo se aplica a las dos primeras columnas (
column1
ycolumn2
). Como su tipo de transformación es un objetoprimitiveTransformation
(en concreto, unCryptoDeterministicConfig
), la protección de datos sensibles transforma todo el campo.La segunda transformación de campo se aplica a la tercera columna (
column3
). Como su tipo de transformación es un objetoinfoTypeTransformations
, Sensitive Data Protection aplica la transformación primitiva (en concreto, unReplaceWithInfoTypeConfig
) solo al contenido que coincide con el infoType definido en la configuración de inspección.
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
-
PROJECT_ID
: tu ID de proyecto 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, despliega una de estas opciones:
Deberías recibir una respuesta JSON similar a la siguiente:
{ "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" } ] } }
Registrar supresiones
Además de aplicar transformaciones a los datos de los campos, también puede indicar a Protección de Datos Sensibles que desidentifique los datos suprimiendo registros cuando se cumplan determinadas condiciones de supresión. Puedes aplicar transformaciones de campos y supresiones de registros en la misma solicitud.
Asigna el mensaje recordSuppressions
del objeto RecordTransformations
a una matriz de uno o varios objetos RecordSuppression
.
Cada objeto RecordSuppression
contiene un objeto RecordCondition
, que a su vez contiene un objeto Expressions
.
Un objeto Expressions
contiene lo siguiente:
logicalOperator
: uno de losLogicalOperator
tipos enumerados.conditions
: objetoConditions
que contiene un array de uno o varios objetosCondition
. UnaCondition
es una comparación entre el valor de un campo y otro valor. Ambos deben ser de tipostring
,boolean
,integer
,double
,Timestamp
oTimeofDay
.
Si la comparación da como resultado "true", el registro se suprime y viceversa. Si los valores comparados no son del mismo tipo, se muestra una advertencia y la condición se evalúa como falsa.
Transformaciones reversibles
Cuando desidentificas datos con las transformaciones de infoType CryptoReplaceFfxFpeConfig
o CryptoDeterministicConfig
, puedes volver a identificarlos siempre que tengas el CryptoKey
que se usó para desidentificarlos originalmente.
Para obtener más información, consulta Transformaciones de tokenización basadas en criptografía.
Límite en el número de resultados
Si tu solicitud tiene más de 3000 resultados, Protección de Datos Sensibles devuelve el siguiente mensaje:
Too many findings to de-identify. Retry with a smaller request.
La lista de resultados que devuelve 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.
Siguientes pasos
Completa el codelab Ocultar datos sensibles con Protección de Datos Sensibles.
Consulta un ejemplo que muestra cómo crear una clave envuelta, tokenizar contenido y volver a identificar contenido tokenizado.
Más información sobre cómo crear una copia anonimizada de los datos almacenados