Sensitive Data Protection può anonimizzare i dati sensibili nei contenuti testuali, inclusi i testi archiviati in strutture dei container come le tabelle. L'anonimizzazione è il processo di rimozione delle informazioni identificative dai dati. L'API rileva dati sensibili come le informazioni che consentono l'identificazione personale (PII) e utilizza una trasformazione di anonimizzazione per mascherare, eliminare o oscurare in altro modo i dati. Ad esempio, le tecniche di anonimizzazione possono includere uno qualsiasi dei seguenti elementi:
- Mascheramento dei dati sensibili sostituendo parzialmente o completamente i caratteri con un simbolo, ad esempio un asterisco (*) o un hash (#).
- Sostituzione di ogni istanza di dati sensibili con una stringa di token, o surrogato.
- Crittografia e sostituzione dei dati sensibili utilizzando una chiave generata in modo casuale o predeterminata.
Puoi fornire informazioni all'API utilizzando JSON tramite HTTPS, nonché l'interfaccia a riga di comando e diversi linguaggi di programmazione utilizzando le librerie client di Sensitive Data Protection. Per configurare l'interfaccia a riga di comando, consulta la quickstart. Per maggiori informazioni sull'invio di informazioni in formato JSON, consulta la guida rapida di JSON.
Panoramica dell'API
Per anonimizzare i dati sensibili, utilizza il metodo content.deidentify
di Sensitive Data Protection.
Una chiamata API di anonimizzazione si compone di tre parti:
- I dati da ispezionare: una struttura stringa o tabella (oggetto
ContentItem
) che l'API deve ispezionare. - Cosa controllare: informazioni di configurazione del rilevamento (
InspectConfig
), ad esempio quali tipi di dati (o infoType) cercare, se filtrare i risultati che superano una determinata soglia di probabilità, se restituire non più di un determinato numero di risultati e così via. Non specificare almeno un infoType in un argomentoInspectConfig
equivale a specificare tutti gli infoType integrati. Questa operazione non è consigliata, in quanto può causare una diminuzione delle prestazioni e un aumento dei costi. - Cosa fare con i risultati dell'ispezione: informazioni di configurazione
(
DeidentifyConfig
) che definiscono il modo in cui vuoi che i dati sensibili vengano anonimizzati. Questo argomento viene trattato più dettagliatamente nella sezione seguente.
L'API restituisce gli stessi elementi che hai fornito, nello stesso formato, ma qualsiasi testo identificato come contenente informazioni sensibili in base ai tuoi criteri è stato anonimizzato.
Specificare i criteri di rilevamento
I rilevatori di tipi di informazioni (o "infoType") sono i meccanismi utilizzati da Sensitive Data Protection per trovare i dati sensibili.
Sensitive Data Protection include diversi tipi di rilevatori infoType, tutti riassunti di seguito:
- I rilevatori di infoType integrati sono integrati in Sensitive Data Protection. Includono rilevatori di tipi di dati sensibili specifici per paese o regione, nonché tipi di dati applicabili a livello globale.
- I rilevatori di infoType personalizzati sono rilevatori creati da te. Esistono tre tipi di rilevatori infoType personalizzati:
- I rilevatori di dizionari personalizzati normali sono semplici elenchi di parole in cui vengono trovate corrispondenze con la protezione dei dati sensibili. Utilizza normali rilevatori di dizionari personalizzati quando hai un elenco di diverse decine di migliaia di parole o frasi. Se non prevedi che l'elenco di parole cambi in modo significativo, è preferibile utilizzare normali rilevatori di dizionari personalizzati.
- I rilevatori di dizionari personalizzati archiviati vengono generati da Sensitive Data Protection utilizzando grandi elenchi di parole o frasi archiviate in Cloud Storage o BigQuery. Utilizza rilevatori di dizionari personalizzati archiviati quando hai un lungo elenco di parole o frasi, fino a decine di milioni.
- I rilevatori di espressioni regolari (regex) consentono a Sensitive Data Protection di rilevare le corrispondenze in base a un pattern di espressioni regolari.
Inoltre, Sensitive Data Protection include il concetto di regole di ispezione, che consentono di ottimizzare i risultati dell'analisi utilizzando quanto segue:
- Le regole di esclusione consentono di ridurre il numero di risultati restituiti aggiungendo regole a un rilevatore infoType integrato o personalizzato.
- Le regole hotword ti consentono di aumentare la quantità o modificare il valore di probabilità dei risultati restituiti aggiungendo regole a un rilevatore infoType integrato o personalizzato.
Trasformazioni di anonimizzazione
Devi specificare una o più trasformazioni quando imposti la configurazione di anonimizzazione (DeidentifyConfig
). Esistono due categorie di trasformazioni:
InfoTypeTransformations
: trasformazioni applicate solo ai valori all'interno del testo inviato che sono identificati come infoType specifico.RecordTransformations
: trasformazioni applicate solo ai valori all'interno dei dati di testo tabulari inviati che sono identificati come infoType specifico o su un'intera colonna di dati tabulari.
Trasformazioni InfoType
Puoi specificare una o più trasformazioni infoType per richiesta. All'interno di ogni oggetto InfoTypeTransformation
, specifichi entrambi i seguenti elementi:
- Uno o più infoTypes a cui deve essere applicata una trasformazione (l'oggetto array
infoTypes[]
). - Una trasformazione primitiva (l'oggetto
PrimitiveTransformation
).
Tieni presente che specificare un infoType è facoltativo, ma se non specifichi almeno un infoType in un argomento InspectConfig
, la trasformazione si applica a tutti gli infoType integrati per cui non è stata fornita una trasformazione. Non è consigliabile farlo, perché può
causare una diminuzione delle prestazioni e un aumento dei costi.
Trasformazioni primitive
Devi specificare almeno una trasformazione primitiva da applicare all'input, indipendentemente dal fatto che la stai applicando solo a determinati infoType o all'intera stringa di testo. Le seguenti sezioni descrivono esempi di metodi di trasformazione che puoi usare. Per un elenco di tutti i metodi di trasformazione offerti da Sensitive Data Protection, consulta Riferimento per la trasformazione.
replaceConfig
L'impostazione di replaceConfig
su un oggetto ReplaceValueConfig
sostituisce i valori di input corrispondenti con un valore specificato da te.
Ad esempio, supponiamo che tu abbia impostato replaceConfig
su "[email-address]
" per tutti gli infoType EMAIL_ADDRESS
e che la seguente stringa venga inviata a Sensitive Data Protection:
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
La stringa restituita sarà la seguente:
My name is Alicia Abernathy, and my email address is [email-address].
L'esempio JSON e il codice JSON seguenti in diversi linguaggi mostrano come creare la richiesta API e cosa restituisce l'API DLP:
Python
Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.
Per eseguire l'autenticazione in Sensitive Data Protection, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Java
Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.
Per eseguire l'autenticazione in Sensitive Data Protection, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
REST
Consulta la guida rapida di JSON per ulteriori informazioni sull'utilizzo dell'API DLP con JSON.
Input 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"
}
]
}
}
Output 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
Se specifichi redactConfig
, un determinato valore viene oscurato rimuovendolo completamente. Il messaggio redactConfig
non ha argomenti; specificando che consente la sua trasformazione.
Ad esempio, supponiamo che tu abbia specificato redactConfig
per tutti gli infoType EMAIL_ADDRESS
e che la seguente stringa venga inviata a Sensitive Data Protection:
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
La stringa restituita sarà la seguente:
My name is Alicia Abernathy, and my email address is .
I seguenti esempi mostrano come formulare la richiesta API e cosa restituisce l'API DLP:
C#
Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.
Per eseguire l'autenticazione in Sensitive Data Protection, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Go
Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.
Per eseguire l'autenticazione in Sensitive Data Protection, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Java
Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.
Per eseguire l'autenticazione in Sensitive Data Protection, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Node.js
Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.
Per eseguire l'autenticazione in Sensitive Data Protection, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
PHP
Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.
Per eseguire l'autenticazione in Sensitive Data Protection, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Python
Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.
Per eseguire l'autenticazione in Sensitive Data Protection, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
REST
Input 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"
}
]
}
}
Output 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
L'impostazione di characterMaskConfig
su un oggetto CharacterMaskConfig
maschera parzialmente una stringa sostituendo un determinato numero di caratteri con un carattere fisso. Il mascheramento può iniziare dall'inizio o dalla fine della stringa. Questa trasformazione funziona anche con tipi di numeri, come
i numeri interi lunghi.
L'oggetto CharacterMaskConfig
ha diversi argomenti:
maskingCharacter
: il carattere da utilizzare per mascherare ogni carattere di un valore sensibile. Ad esempio, potresti specificare un asterisco (*) o un hash (#) per mascherare una serie di numeri, come quelli contenuti in un numero di carta di credito.numberToMask
: il numero di caratteri da mascherare. Se non imposti questo valore, tutti i caratteri corrispondenti verranno mascherati.reverseOrder
: indica se mascherare i caratteri in ordine inverso. Se impostireverseOrder
su true, i caratteri nei valori corrispondenti vengono mascherati dalla fine verso l'inizio del valore. Se viene impostato su false, il mascheramento inizia dall'inizio del valore.charactersToIgnore[]
: uno o più caratteri da ignorare quando si mascherano i valori. Ad esempio, specifica un trattino qui per lasciare in posizione i trattini quando maschera un numero di telefono. Puoi anche specificare un gruppo di caratteri comuni (CharsToIgnore
) da ignorare durante il mascheramento.
Ad esempio, supponi di aver impostato characterMaskConfig
in modo da mascherare "#" per
EMAIL_ADDRESS
gli infoType, ad eccezione dei caratteri "." e "@". Se la
seguente stringa viene inviata a Sensitive Data Protection:
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
La stringa restituita sarà la seguente:
My name is Alicia Abernathy, and my email address is ##########@#######.###.
Di seguito sono riportati alcuni esempi che mostrano come utilizzare l'API DLP per anonimizzare i dati sensibili utilizzando tecniche di mascheramento.
Java
Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.
Per eseguire l'autenticazione in Sensitive Data Protection, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Node.js
Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.
Per eseguire l'autenticazione in Sensitive Data Protection, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Python
Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.
Per eseguire l'autenticazione in Sensitive Data Protection, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Go
Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.
Per eseguire l'autenticazione in Sensitive Data Protection, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
PHP
Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.
Per eseguire l'autenticazione in Sensitive Data Protection, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
C#
Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.
Per eseguire l'autenticazione in Sensitive Data Protection, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
REST
Il seguente esempio JSON mostra come formulare la richiesta API e cosa restituisce l'API DLP:
Input 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"
}
]
}
}
Output 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
L'impostazione di cryptoHashConfig
su un oggetto CryptoHashConfig
esegue la pseudonimizzazione su un valore di input generando un valore surrogato utilizzando l'hashing crittografico.
Questo metodo sostituisce il valore di input con un valore hash criptato "digest".
Il digest viene calcolato prendendo l'hash SHA-256 del valore di input.
La chiave di crittografia utilizzata per creare l'hash è un oggetto CryptoKey
e deve avere una dimensione di 32 o 64 byte.
Il metodo restituisce una rappresentazione con codifica Base64 dell'output con hash. Al momento, solo i valori stringa e interi possono essere sottoposti ad hashing.
Ad esempio, supponiamo che tu abbia specificato cryptoHashConfig
per tutti gli infoType EMAIL_ADDRESS
e che l'oggetto CryptoKey
sia costituito da una chiave generata in modo casuale (un TransientCryptoKey
). A questo punto, viene inviata la seguente stringa a Sensitive Data Protection:
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
La stringa restituita generata tramite crittografia avrà il seguente aspetto:
My name is Alicia Abernathy, and my email address is 41D1567F7F99F1DC2A5FAB886DEE5BEE.
Ovviamente, la stringa esadecimale verrà generata crittograficamente e diversa da quella mostrata qui.
dateShiftConfig
L'impostazione di dateShiftConfig
su un oggetto DateShiftConfig
esegue lo spostamento delle date in base a un valore di input della data, spostando le date di un numero casuale di giorni.
Le tecniche di cambio della data spostano in modo casuale un insieme di date, ma preservano la sequenza e la durata di un periodo di tempo. Lo spostamento delle date avviene generalmente nel contesto di un individuo o di un'entità. In altre parole, vuoi spostare tutte le date di una persona specifica utilizzando lo stesso differenziale di turno, ma utilizzare un differenziale di turno separato per gli altri individui.
Per ulteriori informazioni sul cambio di data, consulta l'argomento concettuale del cambio di data.
Di seguito è riportato un codice campione in diversi linguaggi che mostra come utilizzare l'API DLP per anonimizzare le date utilizzando lo spostamento delle date.
Java
Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.
Per eseguire l'autenticazione in Sensitive Data Protection, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Node.js
Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.
Per eseguire l'autenticazione in Sensitive Data Protection, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Python
Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.
Per eseguire l'autenticazione in Sensitive Data Protection, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Go
Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.
Per eseguire l'autenticazione in Sensitive Data Protection, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
PHP
Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.
Per eseguire l'autenticazione in Sensitive Data Protection, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
C#
Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.
Per eseguire l'autenticazione in Sensitive Data Protection, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
cryptoReplaceFfxFpeConfig
L'impostazione di cryptoReplaceFfxFpeConfig
su un oggetto
CryptoReplaceFfxFpeConfig
esegui la assegnazione di pseudonimi su un valore
di input sostituendo un valore di input con un token. Questo token è:
- Il valore di input criptato.
- La stessa lunghezza del valore di input.
- Calcolata utilizzando la crittografia con protezione del formato in modalità FFX ("FPE-FFX") associata alla chiave di crittografia specificata da
cryptoKey
. - Comprende i caratteri specificati da
alphabet
. Opzioni valide:NUMERIC
HEXADECIMAL
UPPER_CASE_ALPHA_NUMERIC
ALPHA_NUMERIC
Valore di input:
- Deve avere una lunghezza di almeno due caratteri (o la stringa vuota).
- Deve contenere i caratteri specificati da un
alphabet
. Il campoalphabet
può contenere da 2 a 95 caratteri. Unalphabet
con 95 caratteri include tutti i caratteri stampabili nel set di caratteri US-ASCII.
Sensitive Data Protection calcola il token sostitutivo utilizzando una chiave crittografica. Puoi fornire questa chiave in uno dei tre seguenti modi:
- Incorporandoli non criptati nella richiesta API. Ti sconsigliamo tuttavia di selezionare questa opzione.
- Richiedendo che sia generato da Sensitive Data Protection.
- Incorporandolo, viene criptato nella richiesta API.
Se scegli di incorporare la chiave nella richiesta API, devi creare una chiave e eseguirne il wrapping (crittografia) utilizzando una chiave Cloud Key Management Service (Cloud KMS). Il valore restituito è una stringa con codifica Base64 per impostazione predefinita. Per impostare questo valore in Sensitive Data Protection, devi decodificarlo in una stringa di byte. I seguenti snippet di codice illustrano come eseguire questa operazione in diverse lingue. In seguito a questi snippet vengono forniti esempi end-to-end.
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)
Per ulteriori informazioni sulla crittografia e la decrittografia dei dati mediante Cloud KMS, consulta Crittografia e decriptazione dei dati.
FPE-FFX mantiene la lunghezza e il set di caratteri del testo di input in base alla sua progettazione. Ciò significa che manca l'autenticazione e un vettore di inizializzazione, il che causerebbe un'espansione della lunghezza nel token di output. Altri metodi come AES-SIV forniscono queste garanzie di sicurezza più efficaci e sono consigliati per i casi d'uso di tokenizzazione, a meno che la lunghezza e la conservazione del set di caratteri non siano requisiti rigorosi, ad esempio per la compatibilità con le versioni precedenti di un sistema di dati legacy.
Di seguito è riportato un codice campione in diversi linguaggi che mostra come utilizzare Sensitive Data Protection per anonimizzare i dati sensibili sostituendo un valore di input con un token.
Java
Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.
Per eseguire l'autenticazione in Sensitive Data Protection, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Node.js
Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.
Per eseguire l'autenticazione in Sensitive Data Protection, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Python
Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.
Per eseguire l'autenticazione in Sensitive Data Protection, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Go
Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.
Per eseguire l'autenticazione in Sensitive Data Protection, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
PHP
Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.
Per eseguire l'autenticazione in Sensitive Data Protection, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
C#
Per scoprire come installare e utilizzare la libreria client per Sensitive Data Protection, consulta Librerie client di Sensitive Data Protection.
Per eseguire l'autenticazione in Sensitive Data Protection, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Per esempi di codice che dimostrano come utilizzare Sensitive Data Protection per
reidentificare i dati sensibili anonimizzati tramite il
metodo di trasformazione CryptoReplaceFfxFpeConfig
, consulta Crittografia con protezione del formato: esempi di reidentificazione.
fixedSizeBucketingConfig
Le trasformazioni dei bucket, questa e bucketingConfig
, servono a mascherare i dati numerici "raggruppandoli" in intervalli. L'intervallo di numeri risultante è una stringa con trattino
composta da un limite inferiore, un trattino e un limite superiore.
L'impostazione di fixedSizeBucketingConfig
su FixedSizeBucketingConfig
per i bucket di oggetti consente di inserire valori in base a intervalli di dimensioni fissi. L'oggetto FixedSizeBucketingConfig
è costituito da quanto segue:
lowerBound
: il valore del limite inferiore di tutti i bucket. I valori inferiori a questo vengono raggruppati in un unico bucket.upperBound
: il valore del limite superiore di tutti i bucket. I valori maggiori di questo vengono raggruppati in un unico bucket.bucketSize
: le dimensioni di ogni bucket diverse dai bucket minimo e massimo.
Ad esempio, se lowerBound
è impostato su 10, upperBound
è impostato su 89 e
bucketSize
è impostato su 10, verranno utilizzati i seguenti bucket: -10,
10-20, 20-30, 30-40, 40-50, 50-60, 60-70, 70-80, 80-9.
Per saperne di più sul concetto di bucketing, consulta Generalizzazione e bucket.
bucketingConfig
La trasformazione bucketingConfig
offre maggiore flessibilità rispetto
all'altra trasformazione in bucket, fixedSizeBucketingConfig
.
Anziché specificare i limiti superiore e inferiore e un valore dell'intervallo con cui creare bucket di uguali dimensioni, puoi specificare i valori massimo e minimo per ogni bucket da creare. Ogni coppia di valori massimo e minimo deve
avere lo stesso tipo.
L'impostazione di bucketingConfig
su un oggetto BucketingConfig
consente di specificare i bucket personalizzati. L'oggetto BucketingConfig
è costituito da un array buckets[]
di oggetti Bucket
. Ogni oggetto Bucket
è costituito da quanto segue:
min
: il limite inferiore dell'intervallo del bucket. Ometti questo valore per creare un bucket senza limite inferiore.max
: il limite superiore dell'intervallo del bucket. Ometti questo valore per creare un bucket senza limite superiore.replacementValue
: il valore con cui sostituire i valori che rientrano nei limiti inferiore e superiore. Se non fornisci unreplacementValue
, verrà utilizzato un intervallomin-max
con trattino.
Se un valore non rientra negli intervalli definiti, il valore TransformationSummary
restituito conterrà un messaggio di errore.
Ad esempio, considera la seguente configurazione per la trasformazione 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"
}
}
]
}
In questo modo viene definito il seguente comportamento:
- I valori interi che rientrano tra 1 e 30 sono mascherati mediante la sostituzione con
LOW
. - I valori interi che rientrano tra 31 e 65 sono mascherati mediante la sostituzione con
MEDIUM
. - I valori interi che rientrano tra 66 e 100 sono mascherati mediante la sostituzione con
HIGH
.
Per saperne di più sul concetto di bucketing, consulta Generalizzazione e bucket.
replaceWithInfoTypeConfig
Se specifichi replaceWithInfoTypeConfig
, ogni valore corrispondente viene sostituito con il nome dell'infoType. Il messaggio replaceWithInfoTypeConfig
non ha argomenti. Specificando che consente la sua trasformazione.
Ad esempio, supponiamo che tu abbia specificato replaceWithInfoTypeConfig
per tutti gli infoType EMAIL_ADDRESS
e che la seguente stringa venga inviata a Sensitive Data Protection:
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
La stringa restituita sarà la seguente:
My name is Alicia Abernathy, and my email address is EMAIL_ADDRESS.
timePartConfig
L'impostazione di timePartConfig
su un oggetto
TimePartConfig
conserva una parte di un valore con corrispondenza che include i valori Date
,
Timestamp
e TimeOfDay
. L'oggetto TimePartConfig
è costituito da un argomento partToExtract
, che può essere impostato su uno qualsiasi dei valori enumerati TimePart
, tra cui anno, mese, giorno del mese e così via.
Ad esempio, supponi di aver configurato una trasformazione timePartConfig
impostando partToExtract
su YEAR
. Dopo aver inviato i dati nella prima colonna qui sotto a Sensitive Data Protection, ottieni i valori trasformati nella seconda colonna:
Valori originali | Valori trasformati |
---|---|
9/21/1976 |
1976 |
6/7/1945 |
1945 |
1/20/2009 |
2009 |
7/4/1776 |
1776 |
8/1/1984 |
1984 |
4/21/1982 |
1982 |
Registra trasformazioni
Le trasformazioni record (l'oggetto RecordTransformations
) vengono applicate solo ai valori all'interno di dati tabulari identificati come infoType specifico. All'interno di RecordTransformations
, sono disponibili altre due
sottocategorie di trasformazioni:
fieldTransformations[]
: trasformazioni che applicano varie trasformazioni dei campi.recordSuppressions[]
: regole che definiscono quali record vengono completamente eliminati. I record che corrispondono a qualsiasi regola di soppressione all'interno direcordSuppressions[]
vengono omessi dall'output.
Trasformazioni dei campi
Ogni oggetto FieldTransformation
include tre argomenti:
fields
: uno o più campi di input (oggettiFieldID
) a cui applicare la trasformazione.condition
: una condizione (un oggettoRecordCondition
) che deve restituire il valore true affinché venga applicata la trasformazione. Ad esempio, applica una trasformazione del bucket a una colonna di età di un record solo se la colonna CAP dello stesso record rientra in un intervallo specifico. In alternativa, oscura un campo solo se nel campo della data di nascita l'età di una persona è superiore a 85 anni.- Uno dei seguenti due argomenti di tipo di trasformazione. È obbligatorio specificarne uno:
infoTypeTransformations
: considera i contenuti del campo come testo libero e applica unPrimitiveTransformation
solo ai contenuti che corrispondono aInfoType
. Queste trasformazioni sono state discusse in precedenza in questo argomento.primitiveTransformation
: applica la trasformazione primitiva specificata (oggettoPrimitiveTransformation
) all'intero campo. Queste trasformazioni sono state discusse in precedenza in questo argomento.
Esempio di trasformazioni dei campi
L'esempio seguente invia una richiesta projects.content.deidentify
con due trasformazioni del campo:
La prima trasformazione del campo si applica alle prime due colonne (
column1
ecolumn2
). Poiché il tipo di trasformazione è un oggettoprimitiveTransformation
(nello specifico,CryptoDeterministicConfig
), la protezione dei dati sensibili trasforma l'intero campo.La seconda trasformazione del campo si applica alla terza colonna (
column3
). Poiché il suo tipo di trasformazione è un oggettoinfoTypeTransformations
, Sensitive Data Protection applica la trasformazione primitiva (in particolare unReplaceWithInfoTypeConfig
) solo al contenuto che corrisponde all'infoType impostato nella configurazione dell'ispezione.
Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:
-
PROJECT_ID
: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, comemy-project
.
Metodo HTTP e URL:
POST https://dlp.googleapis.com/v2/projects/PROJECT_ID/content:deidentify
Corpo JSON richiesta:
{ "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" } ] } }
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
{ "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" } ] } }
Soppressioni di record
Oltre ad applicare trasformazioni ai dati dei campi, puoi anche indicare a Sensitive Data Protection di anonimizzare i dati semplicemente sopprimendo i record quando determinate condizioni di soppressione risultano true. Nella stessa richiesta puoi applicare sia le trasformazioni dei campi sia le soppressioni dei record.
Hai impostato il messaggio recordSuppressions
dell'oggetto RecordTransformations
su un array di uno o più oggetti RecordSuppression
.
Ogni oggetto RecordSuppression
contiene un singolo oggetto RecordCondition
, che a sua volta contiene un singolo oggetto Expressions
.
Un oggetto Expressions
contiene:
logicalOperator
: uno dei tipi enumeratiLogicalOperator
.conditions
: un oggettoConditions
contenente un array di uno o più oggettiCondition
. UnCondition
è un confronto tra un valore di campo e un altro valore, entrambi di tipostring
,boolean
,integer
,double
,Timestamp
oTimeofDay
.
Se il confronto restituisce true, il record viene soppresso e viceversa. Se i valori confrontati non sono dello stesso tipo, viene inviato un avviso e la condizione restituisce false.
Trasformazioni reversibili
Quando anonimizzi i dati utilizzando le trasformazioni degli infoType CryptoReplaceFfxFpeConfig
o CryptoDeterministicConfig
, puoi reidentificarli, a patto che sia stato usato il CryptoKey
per anonimizzare in origine i dati.
Per maggiori informazioni, consulta Trasformazioni della tokenizzazione
basata su criptovalute.
Limite al numero di risultati
Se la richiesta ha più di 3000 risultati, Sensitive Data Protection restituisce il seguente messaggio:
Too many findings to de-identify. Retry with a smaller request.
L'elenco dei risultati restituiti da Sensitive Data Protection è un sottoinsieme arbitrario di tutti i risultati nella richiesta. Per ottenere tutti i risultati, suddividi la richiesta in batch più piccoli.
Passaggi successivi
Scopri di più su come un flusso di lavoro di anonimizzazione si inserisce nei deployment reali.
Svolgi il codelab Oscuramento dei dati sensibili con Sensitive Data Protection.
Analizza un esempio che dimostra come creare una chiave con wrapping, tokenizzare i contenuti e identificare nuovamente i contenuti tokenizzati.
Scopri di più sulla creazione di una copia anonimizzata dei dati nello spazio di archiviazione.