La protection des données sensibles peut anonymiser ces données dans du contenu textuel, y compris dans du texte stocké dans des structures de conteneurs telles que des tables. L'anonymisation est le processus qui consiste à éliminer les informations personnelles contenues dans les données. L'API détecte les données sensibles telles que les informations personnelles, puis procède à une transformation d'anonymisation pour masquer, supprimer ou dissimuler les données. Voici des exemples de techniques de suppression :
- Masquer les données sensibles en remplaçant partiellement ou entièrement les caractères par un symbole, tel qu'un astérisque (*) ou un dièse (#)
- Remplacer chaque instance de données sensibles par une chaîne de type "jeton" ou de substitution
- Chiffrer et remplacer les données sensibles à l'aide d'une clé générée de manière aléatoire ou prédéterminée
Vous pouvez transmettre des informations à l'API en utilisant le format JSON plutôt que le protocole HTTPS, et également en utilisant l&#CLI ainsi que plusieurs langages de programmation à l'aide des bibliothèques clientes de protection des données sensibles. Pour configurer l'interface de ligne de commande, consultez le guide de démarrage rapide. Pour en savoir plus sur l'envoi d'informations au format JSON, consultez le guide de démarrage rapide JSON.
Présentation de l'API
Pour anonymiser les données sensibles, exécutez la méthode content.deidentify
de la protection des données sensibles.
Un appel d'API d'anonymisation est construit autour de trois éléments :
- Les données à inspecter : Structure de chaîne ou de table (objet
ContentItem
) que l'API doit inspecter. Les éléments à rechercher:informations de configuration de la détection (
InspectConfig
) telles que les types de données (ou infoTypes), le filtrage des résultats dépassant un certain seuil de probabilité et les limitations éventuelles sur le nombre de résultats à renvoyer.Dans votre objet
InspectConfig
, veillez à inclure les infoTypes que vous souhaitez analyser. Sinon, la protection des données sensibles recherche un ensemble d'infoTypes (ALL_BASIC
) par défaut, dont certains peuvent ne pas vous être utiles. La recherche d'infoTypes dont vous n'avez pas besoin peut ajouter inutilement de la latence à votre requête.Un objet
InspectConfig
est obligatoire dans votre requête, à une exception près. Pour en savoir plus, consultez la section Enregistrer des transformations sur cette page.Que faire des résultats de l'inspection : Informations de configuration (
DeidentifyConfig
) qui définissent la manière dont vous souhaitez anonymiser les données sensibles. Cet argument est abordé plus en détail dans la section suivante.
L'API renvoie des éléments quasiment identiques à ceux que vous lui avez fournis et dans le même format. Cependant, le texte reconnu comme contenant des informations sensibles (selon les critères que vous avez définis) a été anonymisé.
Spécifier les critères de détection
Les détecteurs de type d'informations (ou "infoType") sont les mécanismes que la protection des données sensibles utilise pour rechercher des données sensibles.
La protection des données sensibles comprend plusieurs types de détecteurs d'infoTypes résumés ci-dessous:
- Les détecteurs d'infoTypes intégrés sont intégrés à la protection des données sensibles. Ils comprennent des détecteurs pour les types de données sensibles spécifiques à un pays ou une région, ainsi que pour les types de données applicables au niveau mondial.
- Les détecteurs d'infoTypes personnalisés sont des détecteurs que vous créez vous-même. Il existe trois types de détecteurs d'infoTypes personnalisés :
- Les détecteurs de dictionnaires personnalisés standards sont de simples listes de mots avec lesquels la protection des données sensibles recherche des correspondances. Utilisez des détecteurs de dictionnaires personnalisés standards lorsque vous avez une liste qui contient au maximum plusieurs dizaines de milliers de mots ou d'expressions. Les détecteurs de dictionnaires personnalisés standards sont recommandés si vous pensez que votre liste de mots ne changera pas de manière significative.
- Les détecteurs de dictionnaires personnalisés stockés sont générés par la protection des données sensibles à l'aide de listes volumineuses de mots ou d'expressions stockés dans Cloud Storage ou BigQuery. Utilisez des détecteurs de dictionnaires personnalisés stockés lorsque vous avez une longue liste de mots ou d'expressions, pouvant atteindre plusieurs dizaines de millions d'éléments.
- Les détecteurs d'expressions régulières (regex) permettent à la protection des données sensibles de détecter les correspondances basées sur un motif d'expression régulière.
En outre, Sensitive Data Protection intègre le concept de règles d'inspection grâce auxquelles vous pouvez affiner les résultats de l'analyse à l'aide des éléments suivants:
- Les règles d'exclusion vous permettent de réduire le nombre de résultats renvoyés en ajoutant des règles à un détecteur d'infoType intégré ou personnalisé.
- Les règles relatives aux mots clés vous permettent d'augmenter la quantité ou de modifier la valeur de probabilité des résultats renvoyés en ajoutant des règles à un détecteur d'infoType intégré ou personnalisé.
Transformations d'anonymisation
Lorsque vous définissez la configuration d'anonymisation (DeidentifyConfig
), vous devez spécifier une ou plusieurs transformations. Il existe deux catégories de transformations.
InfoTypeTransformations
: transformations qui ne sont appliquées qu'aux valeurs identifiées comme un infoType spécifique au sein du texte envoyéRecordTransformations
: transformations qui ne sont appliquées qu'aux valeurs identifiées comme un infoType spécifique au sein des données textuelles tabulaires envoyées, ou à une colonne entière de données tabulaires
Transformations d'infoType
Vous pouvez spécifier une ou plusieurs transformations d'infoTypes par requête. Dans chaque objet InfoTypeTransformation
, vous spécifiez les deux éléments suivants :
- Un ou plusieurs infoTypes auxquels une transformation doit être appliquée (objet de tableau
infoTypes[]
) - Une transformation primitive (objet
PrimitiveTransformation
)
Notez que vous n'êtes pas obligé de spécifier un infoType. Toutefois, si vous ne définissez aucun infoType dans un argument InspectConfig
, la transformation s'applique à tous les infoTypes intégrés pour lesquels aucune transformation n'est fournie. Cette pratique n'est pas recommandée, car cela peut entraîner une baisse des performances et une augmentation des coûts.
Transformations primitives
Vous devez spécifier au moins une transformation primitive à appliquer au texte d'entrée, qu'elle soit appliquée à certains infoTypes uniquement ou à l'intégralité de la chaîne de texte. Les sections suivantes décrivent des exemples de méthodes de transformation que vous pouvez utiliser. Pour obtenir la liste de toutes les méthodes de transformation proposées par la protection des données sensibles, consultez la documentation de référence sur les transformations.
replaceConfig
Si vous définissez la valeur de replaceConfig
sur un objet ReplaceValueConfig
, les valeurs détectées sont remplacées par une valeur que vous spécifiez.
Supposons par exemple que vous ayez défini replaceConfig
sur [email-address]
pour tous les infoTypes EMAIL_ADDRESS
et que la chaîne suivante soit envoyée à la protection des données sensibles:
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
La chaîne renvoyée sera la suivante :
My name is Alicia Abernathy, and my email address is [email-address].
L'exemple JSON et le code suivants dans plusieurs langages montrent comment former la requête API et ce que renvoie l'API DLP:
Python
Pour savoir comment installer et utiliser la bibliothèque cliente pour la protection des données sensibles, consultez la page Bibliothèques clientes de la protection des données sensibles.
Pour vous authentifier auprès de la protection des données sensibles, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Java
Pour savoir comment installer et utiliser la bibliothèque cliente pour la protection des données sensibles, consultez la page Bibliothèques clientes de la protection des données sensibles.
Pour vous authentifier auprès de la protection des données sensibles, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
REST
Pour découvrir comment utiliser le format JSON avec l'API DLP, consultez le démarrage rapide JSON.
Entrée 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"
}
]
}
}
Sortie 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 vous spécifiez redactConfig
, vous masquez une valeur donnée en la supprimant complètement. Le message redactConfig
n'accepte aucun argument, sa simple présence active la transformation.
Supposons par exemple que vous ayez spécifié redactConfig
pour tous les infoTypes EMAIL_ADDRESS
et que la chaîne suivante soit envoyée à la protection des données sensibles:
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
La chaîne renvoyée sera la suivante :
My name is Alicia Abernathy, and my email address is .
Les exemples suivants montrent comment former la requête API et ce que renvoie l'API DLP:
C#
Pour savoir comment installer et utiliser la bibliothèque cliente pour la protection des données sensibles, consultez la page Bibliothèques clientes de la protection des données sensibles.
Pour vous authentifier auprès de la protection des données sensibles, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Go
Pour savoir comment installer et utiliser la bibliothèque cliente pour la protection des données sensibles, consultez la page Bibliothèques clientes de la protection des données sensibles.
Pour vous authentifier auprès de la protection des données sensibles, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Java
Pour savoir comment installer et utiliser la bibliothèque cliente pour la protection des données sensibles, consultez la page Bibliothèques clientes de la protection des données sensibles.
Pour vous authentifier auprès de la protection des données sensibles, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Node.js
Pour savoir comment installer et utiliser la bibliothèque cliente pour la protection des données sensibles, consultez la page Bibliothèques clientes de la protection des données sensibles.
Pour vous authentifier auprès de la protection des données sensibles, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
PHP
Pour savoir comment installer et utiliser la bibliothèque cliente pour la protection des données sensibles, consultez la page Bibliothèques clientes de la protection des données sensibles.
Pour vous authentifier auprès de la protection des données sensibles, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Python
Pour savoir comment installer et utiliser la bibliothèque cliente pour la protection des données sensibles, consultez la page Bibliothèques clientes de la protection des données sensibles.
Pour vous authentifier auprès de la protection des données sensibles, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
REST
Entrée 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"
}
]
}
}
Sortie 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 vous définissez characterMaskConfig
sur un objet CharacterMaskConfig
, vous masquez une partie de la chaîne en remplaçant un nombre donné de caractères par un caractère fixe. Le masquage peut être effectué à partir du début ou de la fin de la chaîne. Cette transformation fonctionne également avec les types de nombres tels que les entiers longs.
L'objet CharacterMaskConfig
possède plusieurs arguments qui lui sont propres :
maskingCharacter
: caractère permettant de masquer chaque caractère d'une valeur sensible. Par exemple, vous pouvez spécifier un astérisque (*) ou un dièse (#) pour masquer une série de nombres, comme un numéro de carte de crédit.numberToMask
: nombre de caractères à masquer. Si vous ne définissez pas cette valeur, tous les caractères correspondants sont masqués.reverseOrder
: indique si les caractères doivent être masqués dans l'ordre inverse ou non. Vous pouvez définirreverseOrder
sur "true" pour masquer les caractères des valeurs détectées en commençant par la fin de la valeur. Si vous indiquez "false", le masquage s'effectue du début vers la fin de la valeur.charactersToIgnore[]
: un ou plusieurs caractères à ignorer lors du masquage des valeurs. Vous pouvez par exemple spécifier un trait d'union. Ainsi, les traits d'union figurant dans un numéro de téléphone ne sont pas masqués. Vous pouvez également spécifier un groupe de caractères communs (CharsToIgnore
) à ignorer lors du masquage.
Par exemple, supposons que vous ayez défini characterMaskConfig
pour qu'il soit masqué avec "#" pour les infotypes EMAIL_ADDRESS
, à l'exception des caractères ".". et "@". Si la chaîne suivante est envoyée à la protection des données sensibles:
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
La chaîne renvoyée sera la suivante :
My name is Alicia Abernathy, and my email address is ##########@#######.###.
Vous trouverez ci-dessous des exemples montrant comment utiliser l'API DLP pour anonymiser les données sensibles à l'aide de techniques de masquage.
Java
Pour savoir comment installer et utiliser la bibliothèque cliente pour la protection des données sensibles, consultez la page Bibliothèques clientes de la protection des données sensibles.
Pour vous authentifier auprès de la protection des données sensibles, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Node.js
Pour savoir comment installer et utiliser la bibliothèque cliente pour la protection des données sensibles, consultez la page Bibliothèques clientes de la protection des données sensibles.
Pour vous authentifier auprès de la protection des données sensibles, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Python
Pour savoir comment installer et utiliser la bibliothèque cliente pour la protection des données sensibles, consultez la page Bibliothèques clientes de la protection des données sensibles.
Pour vous authentifier auprès de la protection des données sensibles, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Go
Pour savoir comment installer et utiliser la bibliothèque cliente pour la protection des données sensibles, consultez la page Bibliothèques clientes de la protection des données sensibles.
Pour vous authentifier auprès de la protection des données sensibles, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
PHP
Pour savoir comment installer et utiliser la bibliothèque cliente pour la protection des données sensibles, consultez la page Bibliothèques clientes de la protection des données sensibles.
Pour vous authentifier auprès de la protection des données sensibles, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
C#
Pour savoir comment installer et utiliser la bibliothèque cliente pour la protection des données sensibles, consultez la page Bibliothèques clientes de la protection des données sensibles.
Pour vous authentifier auprès de la protection des données sensibles, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
REST
L'exemple JSON suivant montre comment former la requête API et ce que renvoie l'API DLP :
Entrée 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"
}
]
}
}
Sortie 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 vous définissez cryptoHashConfig
sur un objet CryptoHashConfig
, vous effectuez une pseudonymisation sur une valeur d'entrée en générant une valeur de substitution à l'aide d'un hachage cryptographique.
Cette méthode remplace la valeur d'entrée par un "condensé" chiffré ou une valeur de hachage.
Le condensé est calculé d'après le hachage SHA-256 de la valeur d'entrée.
La clé cryptographique utilisée pour créer le hachage est un objet CryptoKey
, qui doit avoir une taille de 32 ou 64 octets.
La méthode génère une représentation encodée en base64 du résultat haché. Actuellement, seules les chaînes et les valeurs entières peuvent être hachées.
Supposons par exemple que vous ayez spécifié cryptoHashConfig
pour tous les infoTypes EMAIL_ADDRESS
et que l'objet CryptoKey
se compose d'une clé générée de manière aléatoire (TransientCryptoKey
). La chaîne suivante est alors envoyée à la protection des données sensibles:
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
La chaîne générée de manière chiffrée qui est renvoyée ressemblera à ceci :
My name is Alicia Abernathy, and my email address is 41D1567F7F99F1DC2A5FAB886DEE5BEE.
Bien sûr, la chaîne hexadécimale sera générée de manière chiffrée et sera différente de celle montrée ici.
dateShiftConfig
Si vous définissez dateShiftConfig
sur un objet DateShiftConfig
, vous effectuez un changement de date sur une valeur d'entrée en décalant les dates d'un nombre aléatoire de jours.
Les techniques de changement de date modifient un ensemble de dates de manière aléatoire, tout en préservant la séquence et la durée d'une période. Le changement de date s'effectue généralement dans le contexte d'un individu ou d'une entité. Vous pouvez par exemple modifier toutes les dates pour un individu spécifique à l'aide du même différentiel de modification, mais appliquer un différentiel distinct pour un autre individu.
Pour savoir comment changer de date, consultez la page Changement de date.
Voici un exemple de code dans plusieurs langages qui montre comment utiliser l'API DLP pour anonymiser les dates à l'aide du changement de date.
Java
Pour savoir comment installer et utiliser la bibliothèque cliente pour la protection des données sensibles, consultez la page Bibliothèques clientes de la protection des données sensibles.
Pour vous authentifier auprès de la protection des données sensibles, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Node.js
Pour savoir comment installer et utiliser la bibliothèque cliente pour la protection des données sensibles, consultez la page Bibliothèques clientes de la protection des données sensibles.
Pour vous authentifier auprès de la protection des données sensibles, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Python
Pour savoir comment installer et utiliser la bibliothèque cliente pour la protection des données sensibles, consultez la page Bibliothèques clientes de la protection des données sensibles.
Pour vous authentifier auprès de la protection des données sensibles, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Go
Pour savoir comment installer et utiliser la bibliothèque cliente pour la protection des données sensibles, consultez la page Bibliothèques clientes de la protection des données sensibles.
Pour vous authentifier auprès de la protection des données sensibles, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
PHP
Pour savoir comment installer et utiliser la bibliothèque cliente pour la protection des données sensibles, consultez la page Bibliothèques clientes de la protection des données sensibles.
Pour vous authentifier auprès de la protection des données sensibles, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
C#
Pour savoir comment installer et utiliser la bibliothèque cliente pour la protection des données sensibles, consultez la page Bibliothèques clientes de la protection des données sensibles.
Pour vous authentifier auprès de la protection des données sensibles, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
cryptoReplaceFfxFpeConfig
Si vous définissez cryptoReplaceFfxFpeConfig
sur un objet CryptoReplaceFfxFpeConfig
, vous effectuez une pseudonymisation d'une valeur d'entrée en la remplaçant par un jeton. Celui-ci est défini de la manière suivante :
- Il correspond à la valeur d'entrée chiffrée.
- Il est aussi long que la valeur saisie.
- Calculé à l'aide du chiffrement préservant le format en mode FFX ("FPE-FFX") sur la clé cryptographique spécifiée par
cryptoKey
. - Il est composé des caractères spécifiés par
alphabet
. Les options valides sont :NUMERIC
HEXADECIMAL
UPPER_CASE_ALPHA_NUMERIC
ALPHA_NUMERIC
La valeur d'entrée est soumise aux conditions suivantes :
- Elle doit comporter au moins deux caractères (ou la chaîne vide).
- Elle doit être composée des caractères spécifiés par un
alphabet
. L'alphabet
peut comporter entre 2 et 95 caractères. (Unalphabet
de 95 caractères inclut tous les caractères imprimables du jeu de caractères US-ASCII.)
Sensitive Data Protection calcule le jeton de remplacement à l'aide d'une clé cryptographique. Vous fournissez cette clé de l'une des trois manières suivantes :
- En l'incorporant sous forme non chiffrée à la requête API. Cette action n'est pas recommandée.
- En demandant à Sensitive Data Protection de la générer.
- En l'incorporant sous forme chiffrée à la requête API.
Si vous choisissez d'intégrer la clé dans la requête API, vous devez créer une clé et l'encapsuler (chiffrer) à l'aide d'une clé Cloud Key Management Service (Cloud KMS). La valeur renvoyée par défaut est une chaîne codée en base64. Pour définir cette valeur dans la protection des données sensibles, vous devez la décoder en une chaîne d'octets. Les extraits de code suivants indiquent comment procéder dans plusieurs langages. Des exemples de bout en bout sont fournis à la suite de ces extraits.
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)
Pour en savoir plus sur le chiffrement et le déchiffrement des données à l'aide de Cloud KMS, consultez la page Chiffrer et déchiffrer des données .
Par sa conception, ce mode préserve la longueur et le jeu de caractères du texte d'entrée. Cela signifie qu'il manque d'authentification et de vecteur d'initialisation, ce qui entraînerait une extension de longueur dans le jeton de sortie. D'autres méthodes, telles que AES-SIV, fournissent ces garanties de sécurité plus strictes et sont recommandées pour les cas d'utilisation de tokenisation, à moins que des exigences de longueur et de définition de jeu de caractères ne soient strictes, par exemple pour assurer la rétrocompatibilité avec un ancien système de données.
Voici un exemple de code dans plusieurs langages qui montre comment anonymiser les données sensibles en remplaçant une valeur d'entrée par un jeton à l'aide de la protection des données sensibles.
Java
Pour savoir comment installer et utiliser la bibliothèque cliente pour la protection des données sensibles, consultez la page Bibliothèques clientes de la protection des données sensibles.
Pour vous authentifier auprès de la protection des données sensibles, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Node.js
Pour savoir comment installer et utiliser la bibliothèque cliente pour la protection des données sensibles, consultez la page Bibliothèques clientes de la protection des données sensibles.
Pour vous authentifier auprès de la protection des données sensibles, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Python
Pour savoir comment installer et utiliser la bibliothèque cliente pour la protection des données sensibles, consultez la page Bibliothèques clientes de la protection des données sensibles.
Pour vous authentifier auprès de la protection des données sensibles, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Go
Pour savoir comment installer et utiliser la bibliothèque cliente pour la protection des données sensibles, consultez la page Bibliothèques clientes de la protection des données sensibles.
Pour vous authentifier auprès de la protection des données sensibles, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
PHP
Pour savoir comment installer et utiliser la bibliothèque cliente pour la protection des données sensibles, consultez la page Bibliothèques clientes de la protection des données sensibles.
Pour vous authentifier auprès de la protection des données sensibles, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
C#
Pour savoir comment installer et utiliser la bibliothèque cliente pour la protection des données sensibles, consultez la page Bibliothèques clientes de la protection des données sensibles.
Pour vous authentifier auprès de la protection des données sensibles, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Pour obtenir des exemples de code montrant comment utiliser la protection des données sensibles pour désanonymiser des données sensibles qui ont été anonymisées à l'aide de la méthode de transformation CryptoReplaceFfxFpeConfig
, consultez Chiffrement préservant le format: exemples de désanonymisation.
fixedSizeBucketingConfig
Les transformations de binning (celle-ci et bucketingConfig
) permettent de masquer des données numériques en les convertissant en plages de buckets. La plage de nombres qui en résulte est une chaîne composée d'une limite inférieure, d'un trait d'union et d'une limite supérieure.
Si vous définissez fixedSizeBucketingConfig
sur un objet FixedSizeBucketingConfig
, les valeurs d'entrée seront présentées sous forme de buckets en fonction de plages de taille fixe. L'objet FixedSizeBucketingConfig
comprend les éléments suivants :
lowerBound
: limite inférieure de tous les buckets. Les valeurs inférieures à celle-ci sont regroupées dans un même bucket.upperBound
: limite supérieure de tous les buckets. Les valeurs supérieures à celle-ci sont regroupées dans un même bucket.bucketSize
: taille de chaque bucket autre que les buckets présentant la valeur minimale et maximale.
Par exemple, si lowerBound
est défini sur 10, upperBound
sur 89 et bucketSize
sur 10, les buckets suivants doivent être définis sur -10, 10-20, 20-30, 30-40, 40-50, 50-60, 60-70, 70-80, 80-89, 89+.
Pour en savoir plus sur le concept de binning, consultez la page Généralisation et binning.
bucketingConfig
La transformation de type bucketingConfig
offre une plus grande flexibilité que l'autre transformation de binning fixedSizeBucketingConfig
.
Plutôt que de spécifier des limites supérieure et inférieure ainsi qu'une valeur d'intervalle avec laquelle créer de buckets de taille égale, vous spécifiez les valeurs maximale et minimale pour chaque bucket que vous souhaitez créer. Chaque paire de valeurs maximale et minimale doit partager le même type.
Vous pouvez définir bucketingConfig
sur un objet BucketingConfig
pour spécifier des buckets personnalisés. L'objet BucketingConfig
se compose d'un tableau buckets[]
d'objets Bucket
. Chaque objet Bucket
comprend les éléments suivants :
min
: limite inférieure de la plage du bucket. Omettez cette valeur pour créer un bucket sans limite inférieure.max
: limite supérieure de la plage du bucket. Omettez cette valeur pour créer un bucket sans limite supérieure.replacementValue
: valeur permettant de remplacer les valeurs comprises entre les limites inférieure et supérieure. Si vous ne spécifiez pas de valeurreplacementValue
, une plagemin-max
est utilisée à la place.
Si une valeur se situe en dehors des plages définies, le TransformationSummary
renvoyé contient un message d'erreur.
Prenons l'exemple de configuration suivant pour la transformation 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"
}
}
]
}
Cette configuration définit le comportement suivant :
- Les valeurs entières comprises entre 1 et 30 sont masquées et remplacées par
LOW
. - Les valeurs entières comprises entre 31 et 65 sont masquées et remplacées par
MEDIUM
. - Les valeurs entières comprises entre 66 et 100 sont masquées et remplacées par
HIGH
.
Pour en savoir plus sur le concept de binning, consultez la page Généralisation et binning.
replaceWithInfoTypeConfig
Si vous spécifiez replaceWithInfoTypeConfig
, vous remplacez chaque valeur détectée par le nom de l'infoType. Le message replaceWithInfoTypeConfig
n'accepte aucun argument, sa simple présence active la transformation.
Supposons par exemple que vous ayez spécifié replaceWithInfoTypeConfig
pour tous les infoTypes EMAIL_ADDRESS
et que la chaîne suivante soit envoyée à la protection des données sensibles:
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
La chaîne renvoyée sera la suivante :
My name is Alicia Abernathy, and my email address is EMAIL_ADDRESS.
timePartConfig
Si vous définissez timePartConfig
sur un objet TimePartConfig
, une partie de la valeur détectée est conservée, ce qui inclut les valeurs Date
, Timestamp
et TimeOfDay
. L'objet TimePartConfig
comporte un argument partToExtract
qui peut être défini sur l'une des valeurs énumérées TimePart
, y compris l'année, le mois, le jour du mois, etc.
Supposons par exemple que vous ayez configuré une transformation timePartConfig
en définissant partToExtract
sur YEAR
. Après avoir envoyé les données de la première colonne ci-dessous à la protection des données sensibles, vous obtenez les valeurs transformées dans la deuxième colonne:
Valeurs d'origine | Valeurs transformées |
---|---|
9/21/1976 |
1976 |
6/7/1945 |
1945 |
1/20/2009 |
2009 |
7/4/1776 |
1776 |
8/1/1984 |
1984 |
4/21/1982 |
1982 |
Transformations d'enregistrement
Les transformations d'enregistrement (objet RecordTransformations
) ne sont appliquées qu'aux valeurs identifiées comme un infoType spécifique au sein de données tabulaires. L'objet RecordTransformations
se divise en deux autres sous-catégories de transformations :
fieldTransformations[]
: transformations qui appliquent diverses transformations de champ.recordSuppressions[]
: règles définissant les enregistrements qui sont complètement supprimés. Les enregistrements qui correspondent à une règle de suppression spécifiée dansrecordSuppressions[]
sont omis du résultat.
Transformations de champ
Chaque objet FieldTransformation
comprend trois arguments :
fields
: un ou plusieurs champs d'entrée (objetsFieldID
) auxquels appliquer la transformation.condition
: une condition (objetRecordCondition
) qui doit renvoyer la valeur "true" pour que la transformation soit appliquée. Vous pouvez par exemple appliquer une transformation de bucket à une colonne "Âge" d'un enregistrement seulement si la colonne "Code postal" du même enregistrement se situe dans une plage spécifique. Vous pouvez également ne masquer un champ que si le champ "Date de naissance" indique qu'une personne a 85 ans ou plus.L'un des deux arguments suivants de type transformation. Vous devez en spécifier au moins un :
infoTypeTransformations
: traite le contenu du champ en tant que texte libre et n'applique une transformationPrimitiveTransformation
qu'au contenu correspondant à unInfoType
. Nous avons abordé ces transformations plus haut sur cette page.primitiveTransformation
: applique la transformation primitive spécifiée (objetPrimitiveTransformation
) à l'ensemble du champ. Nous avons abordé ces transformations plus haut sur cette page.Si votre objet
RecordTransformations
ne contient qu'unprimitiveTransformation
et pas deinfoTypeTransformations
, vous n'avez pas besoin d'inclure d'objetInspectConfig
dans votre requête. Dans ce cas, Sensitive Data Protection l'ignore.
Exemple de transformation de champ
L'exemple suivant envoie une requête projects.content.deidentify
avec deux transformations de champ:
La première transformation de champ s'applique aux deux premières colonnes (
column1
etcolumn2
). Étant donné que son type de transformation est un objetprimitiveTransformation
(plus précisément, unCryptoDeterministicConfig
), la protection des données sensibles transforme l'ensemble du champ.La deuxième transformation de champ s'applique à la troisième colonne (
column3
). Comme son type de transformation est un objetinfoTypeTransformations
, la protection des données sensibles n'applique la transformation primitive (plus précisément, unReplaceWithInfoTypeConfig
) qu'au contenu correspondant à l'infoType défini dans la configuration d'inspection.
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
-
PROJECT_ID
: ID de votre projet Google Cloud. Les ID de projet sont des chaînes alphanumériques, telles quemy-project
.
Méthode HTTP et URL :
POST https://dlp.googleapis.com/v2/projects/PROJECT_ID/content:deidentify
Corps JSON de la requête :
{ "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" } ] } }
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{ "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" } ] } }
Suppression d'enregistrements
En plus d'appliquer des transformations aux données de champ, vous pouvez également demander à Sensitive Data Protection d'anonymiser les données en éliminant simplement des enregistrements lorsque certaines conditions de suppression sont vérifiées. Vous pouvez appliquer des transformations de champ et des suppressions d'enregistrement dans la même requête.
Vous définissez le message recordSuppressions
de l'objet RecordTransformations
sur un tableau comprenant un ou plusieurs objets RecordSuppression
.
Chaque objet RecordSuppression
contient un seul objet RecordCondition
, qui à son tour contient un seul objet Expressions
.
Un objet Expressions
contient :
logicalOperator
: l'un des typesLogicalOperator
énumérés.conditions
: un objetConditions
comprenant un tableau d'un ou de plusieurs objetsCondition
. Un objetCondition
correspond à une comparaison d'une valeur de champ à une autre valeur, de typestring
,boolean
,integer
,double
,Timestamp
ouTimeofDay
.
Si la comparaison prend la valeur "true", l'enregistrement est supprimé et inversement. Si les valeurs comparées ne partagent pas le même type, vous recevez un avertissement, et la condition prend la valeur "false".
Transformations réversibles
Lorsque vous anonymisez des données à l'aide des transformations d'infoTypes CryptoReplaceFfxFpeConfig
ou CryptoDeterministicConfig
, vous pouvez désanonymiser ces données, à condition de disposer de la clé CryptoKey
utilisée à l'origine pour les anonymiser.
Pour en savoir plus, consultez la section Transformations de tokenisation basées sur la cryptographie.
Limite du nombre de résultats
Si votre requête comporte plus de 3 000 résultats, la protection des données sensibles renvoie le message suivant:
Too many findings to de-identify. Retry with a smaller request.
La liste des résultats renvoyés par la protection des données sensibles est un sous-ensemble arbitraire de tous les résultats de la requête. Pour obtenir tous les résultats, divisez votre requête en lots plus petits.
Étape suivante
Découvrez comment un workflow d'anonymisation s'intègre aux déploiements réels.
Suivez le atelier de programmation sur le masquage des données sensibles avec Sensitive Data Protection.
Suivez un exemple qui montre comment créer une clé encapsulée, tokeniser du contenu et restaurer l'identification du contenu tokenisé.
Découvrez comment créer une copie anonymisée des données dans l'espace de stockage.