A proteção de dados sensíveis pode desidentificar dados confidenciais no conteúdo de texto, incluindo textos armazenados em estruturas de contêiner, como tabelas. A desidentificação é o processo de remover informações de identificação dos dados. A API detecta dados confidenciais, como informações de identificação pessoal (PII, na sigla em inglês), e usa uma transformação de desidentificação para mascarar, excluir ou ocultar os dados. Por exemplo, as técnicas de desidentificação podem incluir qualquer uma destas opções:
- Mascarar dados confidenciais substituindo parcial ou totalmente os caracteres por um símbolo, como asterisco (*) ou cerquilha (#).
- Substituir cada instância de dados confidenciais por uma string de token ou alternativa.
- Criptografar e substituir dados confidenciais por meio de uma chave gerada aleatoriamente ou pré-determinada.
É possível alimentar informações na API usando JSON por HTTPS, além da CLI e várias linguagens de programação usando as bibliotecas de cliente da proteção de dados sensíveis. Para configurar a CLI, consulte o quickstart. Para mais informações sobre o envio de informações no formato JSON, consulte o guia de início rápido do JSON.
Visão geral da API
Para desidentificar dados confidenciais, use o método content.deidentify
da proteção de dados sensíveis.
Há três partes em uma chamada de API de desidentificação:
- Os dados a serem inspecionados: uma string ou estrutura de tabela (objeto
ContentItem
) para a API a ser inspecionada. - O que inspecionar: informações de configuração de detecção (
InspectConfig
), como os tipos de dados (ou infoTypes) a serem procurados, seja para filtrar as descobertas que estão acima de um determinado limite de probabilidade, seja para retornar no máximo um determinado número de resultados e assim por diante. Não especificar pelo menos um infoType em um argumentoInspectConfig
equivale a especificar todos os infoTypes integrados. Isso não é recomendado, porque pode reduzir o desempenho e aumentar os custos. - O que fazer com as descobertas da inspeção: informações de configuração (
DeidentifyConfig
) que definem como você quer que os dados confidenciais sejam desidentificados. Esse argumento é abordado mais detalhadamente na próxima seção.
A API retorna os mesmos itens que você forneceu a ela, no mesmo formato, exceto qualquer texto identificado como contendo informações confidenciais, de acordo com seus critérios, que foi desidentificado.
Como especificar critérios de detecção
Os detectores de tipo de informação (ou "InfoType") são os mecanismos que a proteção de dados sensíveis usa para encontrar dados sensíveis.
A proteção de dados sensíveis inclui vários tipos de detectores de infoType, todos resumidos aqui:
- Os detectores de infoType integrados fazem parte da proteção de dados sensíveis. Eles incluem detectores para tipos de dados confidenciais específicos do país ou da região, bem como tipos de dados aplicáveis globalmente.
- Os detectores de infoType personalizados são aqueles que você mesmo cria. Eles são divididos em três tipos:
- Os detectores de dicionários personalizados regulares são listas de palavras simples com as quais a proteção de dados sensíveis faz a correspondência. Use-os quando tiver uma lista de até dezenas de milhares de palavras ou frases. Dê preferência aos detectores de dicionários personalizados regulares se você não espera mudanças significativas na sua lista de palavras.
- Os detectores de dicionários personalizados armazenados são gerados pela Proteção de dados sensíveis usando grandes listas de palavras ou frases armazenadas no Cloud Storage ou no BigQuery. Use-os quando tiver uma lista grande de até dezenas de milhões de palavras ou frases.
- Os detectores de expressões regulares (regex) permitem que a proteção de dados sensíveis detecte correspondências com base em um padrão de expressão regular.
Além disso, a proteção de dados sensíveis inclui o conceito de regras de inspeção. Com elas, você ajusta os resultados da verificação usando o seguinte:
- Regras de exclusão, que permitem diminuir o número de descobertas retornadas adicionando regras a um detector de infoType integrado ou personalizado.
- Regras de hotword, que permitem aumentar a quantidade ou alterar o valor de probabilidade das descobertas retornadas adicionando regras a um detector de infoType integrado ou personalizado.
Transformações de desidentificação
Especifique uma ou mais transformações ao definir a configuração de desidentificação (DeidentifyConfig
). Há duas categorias de transformações:
InfoTypeTransformations
: transformações que são aplicadas somente a valores no texto enviado que são identificados como um infoType específico.RecordTransformations
: transformações aplicadas somente a valores em dados de texto tabulares enviados que são identificados como um infoType específico ou em uma coluna inteira de dados tabulares.
Transformações de infoType
É possível especificar uma ou mais transformações de infoType por solicitação. Em cada objeto InfoTypeTransformation
, você especifica os seguintes itens:
- Um ou mais infoTypes aos quais uma transformação precisa ser aplicada (o objeto de matriz
infoTypes[]
). - Uma transformação primitiva (o objeto
PrimitiveTransformation
).
Observe que especificar um infoType é opcional, mas não especificar pelo menos um infoType em um argumento InspectConfig
faz com que a transformação seja aplicada a todos os infoTypes integrados que não têm uma transformação fornecida. Isso não é recomendado, porque pode reduzir o desempenho e aumentar os custos.
Transformações primárias
Especifique pelo menos uma transformação primitiva para aplicar à entrada, independentemente de aplicá-la apenas a determinados infoTypes ou à string de texto inteira. As seções a seguir descrevem exemplos de métodos de transformação que podem ser usados. Para conferir uma lista de todos os métodos de transformação que a proteção de dados sensíveis oferece, consulte Referência de transformações.
replaceConfig
Definir replaceConfig
como um objeto ReplaceValueConfig
substitui os valores de entrada correspondentes por um valor especificado por você.
Por exemplo, suponha que você tenha definido replaceConfig
como "[email-address]
" para todos os infoTypes EMAIL_ADDRESS
e a seguinte string seja enviada para a proteção de dados sensíveis:
My name is Alicia Abernathy, and my email address is [email protected].
Esta será a string retornada:
My name is Alicia Abernathy, and my email address is [email-address].
O exemplo e o código JSON a seguir em várias linguagens mostram como formar a solicitação de API e o que a API DLP retorna:
Python
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Java
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
REST
Consulte o Início rápido do JSON para ver mais informações sobre o uso da API DLP com o 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"
}
]
}
}
Saída 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
Especificar redactConfig
edita um determinado valor removendo-o completamente. A mensagem redactConfig
não tem argumentos; especificá-los permite a transformação deles.
Por exemplo, suponha que você tenha especificado redactConfig
para todos os infoTypes EMAIL_ADDRESS
e a seguinte string seja enviada para a proteção de dados sensíveis:
My name is Alicia Abernathy, and my email address is [email protected].
Esta será a string retornada:
My name is Alicia Abernathy, and my email address is .
Os exemplos a seguir mostram como formar a solicitação de API e o que a API DLP retorna:
C#
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Go
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Java
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Node.js
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
PHP
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Python
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento 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"
}
]
}
}
Saída 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
Definir characterMaskConfig
como um objeto CharacterMaskConfig
mascara parcialmente uma string substituindo um determinado número de caracteres por um caractere fixo. O mascaramento pode iniciar pelo começo ou fim da string. Essa transformação também funciona com tipos de números, como inteiros longos.
O objeto CharacterMaskConfig
tem vários argumentos próprios:
maskingCharacter
: o caractere a ser usado para mascarar cada caractere de um valor confidencial. Por exemplo, especifique um asterisco (*) ou hash (#) para mascarar uma sequência numérica, como número de cartão de crédito.numberToMask
: o número de caracteres a serem mascarados. Se você não definir esse valor, todos os caracteres correspondentes serão mascarados.reverseOrder
: se os caracteres precisarem ser mascarados na ordem inversa. DefinirreverseOrder
como verdadeiro faz com que os caracteres nos valores correspondentes sejam mascarados do final até o início do valor. Se for definido como falso, o mascaramento começará do início do valor.charactersToIgnore[]
: um ou mais caracteres a serem ignorados ao mascarar valores. Por exemplo, especifique um hífen para manter os hifens inalterados ao mascarar um número de telefone. Também é possível especificar um grupo de caracteres comuns (CharsToIgnore
) a serem ignorados no mascaramento.
Por exemplo, suponha que você tenha definido characterMaskConfig
para mascarar com "#" os infoTypes EMAIL_ADDRESS
, exceto os caracteres "." e "@". Se a
string a seguir for enviada para a proteção de dados sensíveis:
My name is Alicia Abernathy, and my email address is [email protected].
Esta será a string retornada:
My name is Alicia Abernathy, and my email address is ##########@#######.###.
Veja a seguir exemplos que demonstram como usar a API DLP para desidentificar dados confidenciais usando técnicas de mascaramento.
Java
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Node.js
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Python
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Go
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
PHP
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
C#
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
REST
O exemplo JSON a seguir mostra como formar a solicitação de API e o que a API DLP retornará:
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"
}
]
}
}
Saída 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
Definir cryptoHashConfig
como um objeto CryptoHashConfig
executa a pseudonimização em um valor de entrada, gerando um valor alternativo usando hash criptográfico.
Esse método substitui o valor de entrada por um valor criptografado de "resumo" ou hash.
O resumo é calculado usando o hash SHA-256 do valor de entrada.
A chave criptográfica usada para criar o hash é um objeto CryptoKey
e precisa ter 32 ou 64 bytes de tamanho.
O método gera uma representação codificada em base64 da saída em hash. Atualmente, é possível gerar hash apenas de valores de string e inteiros.
Por exemplo, suponha que você tenha especificado cryptoHashConfig
para todos os infoTypes EMAIL_ADDRESS
e o objeto CryptoKey
consiste em uma chave gerada aleatoriamente (uma TransientCryptoKey
). Em seguida, a seguinte string é enviada para a proteção de dados sensíveis:
My name is Alicia Abernathy, and my email address is [email protected].
Será retornada a seguinte string gerada criptograficamente:
My name is Alicia Abernathy, and my email address is 41D1567F7F99F1DC2A5FAB886DEE5BEE.
Claro que a string hexadecimal será gerada criptograficamente e será diferente da mostrada aqui.
dateShiftConfig
Definir dateShiftConfig
como um objeto DateShiftConfig
executa mudança de data em um valor de entrada de data alterando as datas por um número aleatório de dias.
As técnicas de mudança de data alteram aleatoriamente um conjunto de datas, mas preservam a sequência e a duração de um período. Geralmente, a mudança de datas é feita no contexto para um indivíduo ou uma entidade. Ou seja, você muda todas as datas de um indivíduo específico com o mesmo diferencial de mudança, mas usa um diferencial de mudança separado para cada indivíduo.
Para mais informações sobre esse assunto, consulte o tópico do conceito de mudança de data.
O exemplo de código a seguir demonstra em várias linguagens como usar a API DLP para desidentificar datas usando mudança de data.
Java
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Node.js
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Python
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Go
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
PHP
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
C#
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
cryptoReplaceFfxFpeConfig
Definir cryptoReplaceFfxFpeConfig
como um objeto CryptoReplaceFfxFpeConfig
executa pseudonimização em um valor de entrada substituindo um valor de entrada por um token. Esse token tem/é:
- o valor de entrada criptografado;
- o mesmo tamanho do valor de entrada;
- calculada por criptografia de preservação de formato no modo FFX ("FPE-FFX") com chave na chave criptográfica especificada por
cryptoKey
; - composto pelos caracteres especificados por
alphabet
. Opções válidas:NUMERIC
HEXADECIMAL
UPPER_CASE_ALPHA_NUMERIC
ALPHA_NUMERIC
O valor de entrada:
- ter pelo menos dois caracteres (ou a string vazia);
- precisa ser composto pelos caracteres especificados por um
alphabet
. Oalphabet
pode conter entre 2 e 95 caracteres. Umalphabet
com 95 caracteres inclui todos os caracteres para impressão do conjunto de caracteres US-ASCII.
A proteção de dados sensíveis calcula o token de substituição usando uma chave criptográfica. Há três maneiras de fornecer essa chave:
- Incorpore-a sem criptografia na solicitação de API. No entanto, não recomendamos esse procedimento.
- Solicitar a geração deles pela proteção de dados sensíveis.
- incorporando-a criptografada na solicitação da API.
Se você optar por incorporar a chave na solicitação de API, será necessário criar uma chave e encapsulá-la (criptografar) usando uma chave do Cloud Key Management Service (Cloud KMS). Por padrão, o valor retornado é uma string codificada em base64. Para definir esse valor na proteção de dados sensíveis, ele precisa ser decodificado em uma string de bytes. Os snippets de código a seguir destacam como isso é feito em várias linguagens. Veja exemplos completos após esses snippets.
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 mais informações sobre criptografia e descriptografia de dados usando o Cloud KMS, consulte Como criptografar e descriptografar dados.
Por design, a FPE-FFX preserva o comprimento e o conjunto de caracteres do texto de entrada. Isso significa que não há autenticação e um vetor de inicialização, o que causa uma expansão de comprimento no token de saída. Outros métodos, como o AES-SIV, fornecem essas garantias de segurança mais fortes e são recomendados para casos de uso de tokenização, a menos que o tamanho e a preservação do conjunto de caracteres sejam requisitos rigorosos. Por exemplo, para compatibilidade com versões anteriores de um sistema de dados legado.
O exemplo de código a seguir demonstra em várias linguagens como usar a proteção de dados sensíveis para desidentificar dados confidenciais substituindo um valor de entrada por um token.
Java
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Node.js
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Python
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Go
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
PHP
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
C#
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Para amostras de código que demonstram como usar a proteção de dados sensíveis para
reidentificar dados confidenciais que foram desidentificados por meio do
método de transformação CryptoReplaceFfxFpeConfig
, consulte Criptografia com
preservação de formato: exemplos de
reidentificação.
fixedSizeBucketingConfig
As transformações de agrupamento por classes (esta e bucketingConfig
) servem para mascarar dados numéricos agrupando-os por classes em intervalos. O intervalo de números resultante é uma string hifenizada que consiste em um limite inferior, um hífen e um limite superior.
Definir fixedSizeBucketingConfig
como um objeto FixedSizeBucketingConfig
agrupa por classes os valores de entrada com base em intervalos de tamanho fixo. O objeto FixedSizeBucketingConfig
consiste no seguinte:
lowerBound
: o valor limite mínimo de todos os buckets. Valores menores que esse são agrupados em um único bucket.upperBound
: o valor limite máximo de todos os buckets. Valores maiores que esse são agrupados em um único bucket.bucketSize
: o tamanho de cada bucket diferente dos buckets mínimo e máximo.
Por exemplo, se lowerBound
for definido como 10, upperBound
for definido como 89 e bucketSize
for definido como 10, os seguintes buckets serão usados: -10, 10-20, 20-30, 30-40, 40-50, 50-60, 60-70, 70-80, 80-89, 89+.
Para mais informações sobre esse conceito, consulte Generalização e agrupamento por classes.
bucketingConfig
A transformação bucketingConfig
oferece mais flexibilidade do que a outra transformação de agrupamento por classes, fixedSizeBucketingConfig
.
Em vez de especificar limites superiores e inferiores e um valor de bucket com o qual os buckets iguais serão criados, especifique os valores máximo e mínimo para cada bucket que quiser criar. Cada par de valor máximo e mínimo precisa ser do mesmo tipo.
Definir bucketingConfig
como um objeto BucketingConfig
especifica buckets personalizados. O objeto BucketingConfig
consiste em uma matriz buckets[]
de objetos Bucket
. Cada objeto Bucket
consiste no seguinte:
min
: o limite inferior do intervalo do bucket. Omita esse valor para criar um bucket sem limite inferior.max
: o limite superior do intervalo do bucket. Omita esse valor para criar um bucket sem limite superior.replacementValue
: o valor pelo qual serão substituídos valores que se enquadram nos limites inferior e superior. Se você não fornecer umreplacementValue
, um intervalomin-max
com hífen será usado no lugar.
Se um valor estiver fora dos intervalos definidos, o TransformationSummary
retornado conterá uma mensagem de erro.
Por exemplo, considere a seguinte configuração para a transformação 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"
}
}
]
}
Isso define o comportamento a seguir:
- Valores inteiros entre 1 e 30 são mascarados ao serem substituídos por
LOW
. - Valores inteiros entre 31 e 65 são mascarados ao serem substituídos por
MEDIUM
. - Valores inteiros entre 66 e 100 são mascarados ao serem substituídos por
HIGH
.
Para mais informações sobre esse conceito, consulte Generalização e agrupamento por classes.
replaceWithInfoTypeConfig
Especificar replaceWithInfoTypeConfig
substitui cada valor correspondente pelo nome do infoType. A mensagem replaceWithInfoTypeConfig
não tem argumentos; especificá-los permite a transformação deles.
Por exemplo, suponha que você tenha especificado replaceWithInfoTypeConfig
para todos os infoTypes EMAIL_ADDRESS
e a seguinte string seja enviada para a proteção de dados sensíveis:
My name is Alicia Abernathy, and my email address is [email protected].
Esta será a string retornada:
My name is Alicia Abernathy, and my email address is EMAIL_ADDRESS.
timePartConfig
Definir timePartConfig
como um objeto TimePartConfig
preserva uma parte de um valor correspondente que inclui valores Date
, Timestamp
e TimeOfDay
. O objeto TimePartConfig
consiste em um argumento partToExtract
, que pode ser definido como qualquer um dos valores enumerados TimePart
, incluindo ano, mês, dia do mês e assim por diante.
Por exemplo, suponha que você tenha configurado uma transformação timePartConfig
definindo partToExtract
como YEAR
. Depois de enviar os dados na primeira coluna abaixo para a proteção de dados sensíveis, você acabaria com os valores transformados na segunda coluna:
Valores originais | 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 |
Transformações de registro
As transformações de registro (o objeto RecordTransformations
) são aplicadas apenas a valores em dados tabulares que são identificados como um infoType específico. Em RecordTransformations
, há mais duas subcategorias de transformações:
fieldTransformations[]
: transformações que aplicam várias transformações de campo.recordSuppressions[]
: regras que definem quais registros são suprimidos completamente. Os registros que correspondem a qualquer regra de supressão dentro derecordSuppressions[]
são omitidos da saída.
Transformações de campo
Cada objeto FieldTransformation
inclui três argumentos:
fields
: um ou mais campos de entrada (objetosFieldID
) aos quais será aplicada a transformação.condition
: uma condição (um objetoRecordCondition
) que precisa ser avaliada como verdadeira para a transformação a ser aplicada. Por exemplo, aplique uma transformação de bucket a uma coluna de idade em um registro somente se a coluna de CEP do mesmo registro estiver dentro de uma faixa específica. Se preferir, edite um campo apenas se o campo de data de nascimento definir a idade de uma pessoa como 85 ou mais.- Um dos dois argumentos de tipo de transformação a seguir. É necessário especificar uma destas opções:
infoTypeTransformations
: trate o conteúdo do campo como texto livre e aplique umPrimitiveTransformation
somente ao conteúdo que corresponder a umInfoType
. Essas transformações já foram discutidas neste tópico.primitiveTransformation
: aplica a transformação primária especificada (objetoPrimitiveTransformation
) ao campo inteiro. Essas transformações já foram discutidas neste tópico.
Exemplo de transformações de campo
O exemplo a seguir envia uma solicitação projects.content.deidentify
com duas transformações de campo:
A primeira transformação de campo se aplica às duas primeiras colunas (
column1
ecolumn2
). Como o tipo de transformação dela é um objetoprimitiveTransformation
(especificamente,CryptoDeterministicConfig
), a proteção de dados sensíveis transforma todo o campo.A segunda transformação de campo se aplica à terceira coluna (
column3
). Como o tipo de transformação dela é um objetoinfoTypeTransformations
, a proteção de dados confidenciais aplica a transformação primitiva (especificamente, umReplaceWithInfoTypeConfig
) apenas ao conteúdo que corresponde ao infoType definido na configuração de inspeção.
Antes de usar os dados da solicitação, faça as substituições a seguir:
-
PROJECT_ID
pelo ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, comomy-project
.
Método HTTP e URL:
POST https://dlp.googleapis.com/v2/projects/PROJECT_ID/content:deidentify
Corpo JSON da solicitação:
{ "item": { "table": { "headers": [ { "name": "column1" }, { "name": "column2" }, { "name": "column3" } ], "rows": [ { "values": [ { "stringValue": "Example string 1" }, { "stringValue": "Example string 2" }, { "stringValue": "My email address is [email protected]" } ] }, { "values": [ { "stringValue": "Example string 1" }, { "stringValue": "Example string 3" }, { "stringValue": "My email address is [email protected]" } ] } ] } }, "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 a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{ "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" } ] } }
Supressões de registro
Além de aplicar transformações a dados de campo, também é possível instruir a proteção de dados sensíveis a desidentificar dados suprimindo registros quando determinadas condições de supressão forem avaliadas como verdadeiras. As transformações de campo e as supressões de registro podem ser aplicadas à mesma solicitação.
Você define a mensagem recordSuppressions
do objeto RecordTransformations
como uma matriz de um ou mais objetos RecordSuppression
.
Cada objeto RecordSuppression
contém um único objeto RecordCondition
, que, por sua vez, contém um único objeto Expressions
.
Um objeto Expressions
contém:
logicalOperator
: um dos tipos enumerados deLogicalOperator
.conditions
: um objetoConditions
, contendo uma matriz de um ou mais objetosCondition
. UmCondition
é uma comparação de um valor de campo e outro valor e ambos dos tiposstring
,boolean
,integer
,double
,Timestamp
ouTimeofDay
.
Se a comparação for avaliada como verdadeira, o registro será suprimido e vice-versa. Se os valores comparados não forem do mesmo tipo, será apresentada uma mensagem de aviso e a condição será avaliada como falsa.
Transformações reversíveis
Quando você desidentifica dados usando as transformações de infoType CryptoReplaceFfxFpeConfig
ou CryptoDeterministicConfig
, é possível reidentificar esses dados, desde que o CryptoKey
tenha sido usado para desidentificar os dados originalmente.
Para mais informações, consulte Transformações de tokenização
baseadas em criptografia.
Limite no número de descobertas
Se a solicitação tiver mais de 3.000 descobertas, a proteção de dados sensíveis retornará a seguinte mensagem:
Too many findings to de-identify. Retry with a smaller request.
A lista de descobertas que a proteção de dados sensíveis retorna é um subconjunto arbitrário de todas as descobertas na solicitação. Para ter todas as descobertas, divida a solicitação em lotes menores.
A seguir
Saiba mais sobre como um fluxo de trabalho de desidentificação se encaixa em implantações reais.
Trabalhe no codelab Como encobrir dados sensíveis com a proteção de dados sensíveis.
Confira um exemplo que demonstre como criar uma chave encapsulada, tokenizar o conteúdo e reidentificar o conteúdo tokenizado.
Saiba mais sobre como criar uma cópia desidentificada dos dados no armazenamento.