Desidentificar e reidentificar dados sensíveis
O processo descrito neste documento é chamado de pseudonimização (ou tokenização). Nesse processo, a Proteção de Dados Sensíveis usa uma chave criptográfica para converter (desidentificar) textos sensíveis em um token. Para restaurar (reidentificar) esse texto, você precisa da chave criptográfica usada durante a desidentificação e do token.
A Proteção de Dados Sensíveis é compatível com métodos criptográficos reversíveis e não reversíveis. Para reidentificar o conteúdo, você precisa escolher um método reversível.
O método criptográfico descrito aqui é chamado de criptografia determinística usando AES-SIV (padrão de criptografia avançada no modo de vetor de inicialização sintética). Recomendamos esse método porque ele oferece o mais alto nível de segurança entre todos os métodos criptográficos reversíveis que a Proteção de dados sensíveis suporta.
Você pode concluir as etapas deste documento em 10 a 20 minutos, sem incluir as etapas Antes de começar.
Antes de começar
- Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a gcloud CLI, execute o seguinte comando:
gcloud init -
Crie ou selecione um Google Cloud projeto.
Funções necessárias para selecionar ou criar um projeto
- Selecionar um projeto: não é necessário um papel específico do IAM para selecionar um projeto. Você pode escolher qualquer projeto em que tenha recebido um papel.
-
Criar um projeto: para criar um projeto, é necessário ter o papel de Criador de projetos
(
roles/resourcemanager.projectCreator), que contém a permissãoresourcemanager.projects.create. Saiba como conceder papéis.
-
Crie um projeto do Google Cloud :
gcloud projects create PROJECT_ID
Substitua
PROJECT_IDpor um nome para o projeto Google Cloud que você está criando. -
Selecione o projeto Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_IDpelo nome do projeto do Google Cloud .
-
Se este guia estiver usando um projeto atual, verifique se você tem as permissões necessárias para concluir o guia. Se você criou um projeto, já tem as permissões necessárias.
-
Verifique se o faturamento está ativado para o projeto do Google Cloud .
Ative as APIs Proteção de Dados Sensíveis e Cloud KMS:
Funções necessárias para ativar APIs
Para ativar as APIs, é necessário ter o papel do IAM de administrador do Service Usage (
roles/serviceusage.serviceUsageAdmin), que contém a permissãoserviceusage.services.enable. Saiba como conceder papéis.gcloud services enable dlp.googleapis.com
cloudkms.googleapis.com -
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a gcloud CLI, execute o seguinte comando:
gcloud init -
Crie ou selecione um Google Cloud projeto.
Funções necessárias para selecionar ou criar um projeto
- Selecionar um projeto: não é necessário um papel específico do IAM para selecionar um projeto. Você pode escolher qualquer projeto em que tenha recebido um papel.
-
Criar um projeto: para criar um projeto, é necessário ter o papel de Criador de projetos
(
roles/resourcemanager.projectCreator), que contém a permissãoresourcemanager.projects.create. Saiba como conceder papéis.
-
Crie um projeto do Google Cloud :
gcloud projects create PROJECT_ID
Substitua
PROJECT_IDpor um nome para o projeto Google Cloud que você está criando. -
Selecione o projeto Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_IDpelo nome do projeto do Google Cloud .
-
Se este guia estiver usando um projeto atual, verifique se você tem as permissões necessárias para concluir o guia. Se você criou um projeto, já tem as permissões necessárias.
-
Verifique se o faturamento está ativado para o projeto do Google Cloud .
Ative as APIs Proteção de Dados Sensíveis e Cloud KMS:
Funções necessárias para ativar APIs
Para ativar as APIs, é necessário ter o papel do IAM de administrador do Service Usage (
roles/serviceusage.serviceUsageAdmin), que contém a permissãoserviceusage.services.enable. Saiba como conceder papéis.gcloud services enable dlp.googleapis.com
cloudkms.googleapis.com
Funções exigidas
Para receber as permissões necessárias para criar uma chave AES encapsulada, desidentificar dados sensíveis e reidentificá-los, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:
-
Administrador do Cloud KMS (
roles/cloudkms.admin) -
Criptografador de CryptoKey do Cloud KMS (
roles/cloudkms.cryptoKeyEncrypter) -
Usuário da DLP (
roles/dlp.user)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.
Crie um keyring e uma chave.
Antes de iniciar este procedimento, decida onde você quer que a Proteção de Dados Sensíveis processe as solicitações de desidentificação e reidentificação. Quando você cria uma chave do Cloud KMS, é necessário armazená-la em global ou na mesma região que será usada nas solicitações da Proteção de Dados Sensíveis.
Caso contrário, as solicitações da Proteção de Dados Sensíveis vão falhar.
Confira uma lista de locais compatíveis em Locais da Proteção de Dados Sensíveis. Anote o nome da região escolhida (por exemplo, us-west1).
Neste procedimento, global é usado como local para todas as solicitações de API. Se você quiser usar uma região diferente, substitua global pelo nome da região.
Crie um keyring:
gcloud kms keyrings create "dlp-keyring" \ --location "global"Crie uma chave:
gcloud kms keys create "dlp-key" \ --location "global" \ --keyring "dlp-keyring" \ --purpose "encryption"Liste o keyring e a chave:
gcloud kms keys list \ --location "global" \ --keyring "dlp-keyring"A saída a seguir é exibida:
NAME: projects/<var>PROJECT_ID</var>/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key PURPOSE: ENCRYPT_DECRYPT ALGORITHM: GOOGLE_SYMMETRIC_ENCRYPTION PROTECTION_LEVEL: SOFTWARE LABELS: PRIMARY_ID: 1 PRIMARY_STATE: ENABLEDNessa saída,
PROJECT_IDé o ID do projeto.O valor de
NAMEé o nome completo do recurso da chave do Cloud KMS. Anote esse valor, porque as solicitações de desidentificação e reidentificação exigem isso.
Criar uma chave AES codificada em base64
Esta seção descreve como criar uma chave do padrão de criptografia avançada (AES) e codificá-la no formato base64.
Crie uma chave AES de 128, 192 ou 256 bits. O comando a seguir usa
opensslpara criar uma chave de 256 bits no diretório atual:openssl rand -out "./aes_key.bin" 32O arquivo
aes_key.biné adicionado ao diretório atual.Codifique a chave AES como uma string base64:
base64 -i ./aes_key.binVocê verá um resultado parecido com este:
uEDo6/yKx+zCg2cZ1DBwpwvzMVNk/c+jWs7OwpkMc/s=
Encapsular a chave AES usando a chave do Cloud KMS
Esta seção descreve como usar a chave do Cloud KMS criada em Criar um keyring e uma chave para encapsular a chave AES codificada em base64 criada em Criar uma chave AES codificada em base64.
Para encapsular a chave AES, use curl para enviar a seguinte solicitação ao método
projects.locations.keyRings.cryptoKeys.encrypt
da API Cloud KMS:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key:encrypt" \
--request "POST" \
--header "Authorization:Bearer $(gcloud auth application-default print-access-token)" \
--header "content-type: application/json" \
--data "{\"plaintext\": \"BASE64_ENCODED_AES_KEY\"}"
Substitua:
PROJECT_ID: ID do projeto.BASE64_ENCODED_AES_KEY: a string codificada em base64 retornada em Criar uma chave AES codificada em base64.
A resposta que você recebe do Cloud KMS é semelhante ao seguinte JSON:
{
"name": "projects/<var>PROJECT_ID</var>/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key/cryptoKeyVersions/1",
"ciphertext": "CiQAYuuIGo5DVaqdE0YLioWxEhC8LbTmq7Uy2G3qOJlZB7WXBw0SSQAjdwP8ZusZJ3Kr8GD9W0vaFPMDksmHEo6nTDaW/j5sSYpHa1ym2JHk+lUgkC3Zw5bXhfCNOkpXUdHGZKou1893O8BDby/82HY=",
"ciphertextCrc32c": "901327763",
"protectionLevel": "SOFTWARE"
}
Nessa saída, PROJECT_ID é o ID do projeto.
Anote o valor de ciphertext na resposta.
Essa é sua chave encapsulada.
Enviar uma solicitação de desidentificação para a API DLP
Esta seção descreve como desidentificar dados confidenciais em conteúdo de texto.
Para concluir esta tarefa, você precisa do seguinte:
- O nome completo do recurso da chave do Cloud KMS que você criou em Criar um keyring e uma chave.
- A chave encapsulada que você criou em Encapsular a chave AES usando a chave do Cloud KMS.
Salve a solicitação de amostra em um arquivo JSON. Se você usa o Cloud Shell, use o editor do Cloud Shell para criar o arquivo. Para iniciar o editor, clique em Abrir editor na barra de ferramentas do Cloud Shell.
Para desidentificar dados confidenciais em conteúdo de texto, siga estas etapas:
Crie um arquivo de solicitação JSON chamado
deidentify-request.jsoncom o texto a seguir.{ "item": { "value": "My name is Alicia Abernathy, and my email address is aabernathy@example.com." }, "deidentifyConfig": { "infoTypeTransformations": { "transformations": [ { "infoTypes": [ { "name": "EMAIL_ADDRESS" } ], "primitiveTransformation": { "cryptoDeterministicConfig": { "cryptoKey": { "kmsWrapped": { "cryptoKeyName": "projects/PROJECT_ID/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key", "wrappedKey": "WRAPPED_KEY" } }, "surrogateInfoType": { "name": "EMAIL_ADDRESS_TOKEN" } } } } ] } }, "inspectConfig": { "infoTypes": [ { "name": "EMAIL_ADDRESS" } ] } }Substitua:
PROJECT_ID: ID do projeto.WRAPPED_KEY: a chave encapsulada que você criou em Encapsular a chave AES usando a chave do Cloud KMS.
Verifique se o valor resultante de
cryptoKeyNameforma o nome completo do recurso da chave do Cloud KMS.Para mais informações sobre os componentes dessa solicitação JSON, consulte
projects.locations.content.deidentify. Depois de concluir esta tarefa, tente fazer experimentos com entradas diferentes para essa solicitação. Você pode usarcurlconforme descrito aqui. Também é possível usar o APIs Explorer nessa página de Referência da API em Testar este método.Use
curlpara fazer uma solicitaçãoprojects.locations.content.deidentify:curl -s \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json" \ https://dlp.googleapis.com/v2/projects/PROJECT_ID/locations/global/content:deidentify \ -d @deidentify-request.jsonSubstitua
PROJECT_IDpelo ID do seu projeto.Para transmitir um nome de arquivo para
curl, use a opção-d(para dados) e use um sinal@antes do nome do arquivo. Esse arquivo precisa estar no mesmo diretório em que você executa o comandocurl.A resposta que você recebe da Proteção de dados sensíveis é semelhante ao seguinte JSON:
{ "item": { "value": "My name is Alicia Abernathy, and my email address is EMAIL_ADDRESS_TOKEN(52):AVAx2eIEnIQP5jbNEr2j9wLOAd5m4kpSBR/0jjjGdAOmryzZbE/q." }, "overview": { "transformedBytes": "22", "transformationSummaries": [ { "infoType": { "name": "EMAIL_ADDRESS" }, "transformation": { "cryptoDeterministicConfig": { "cryptoKey": { "kmsWrapped": { "wrappedKey": "CiQAYuuIGo5DVaqdE0YLioWxEhC8LbTmq7Uy2G3qOJlZB7WXBw0SSQAjdwP8ZusZJ3Kr8GD9W0vaFPMDksmHEo6nTDaW/j5sSYpHa1ym2JHk+lUgkC3Zw5bXhfCNOkpXUdHGZKou1893O8BDby/82HY=", "cryptoKeyName": "projects/<var>PROJECT_ID</var>/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key" } }, "surrogateInfoType": { "name": "EMAIL_ADDRESS_TOKEN" } } }, "results": [ { "count": "1", "code": "SUCCESS" } ], "transformedBytes": "22" } ] } }No campo
item, o endereço de e-mail é substituído por um token, comoEMAIL_ADDRESS_TOKEN(52):AVAx2eIEnIQP5jbNEr2j9wLOAd5m4kpSBR/0jjjGdAOmryzZbE/q. Anote o valor do token na resposta. Para reidentificar o conteúdo desidentificado, transmita o token inteiro na solicitação de reidentificação.
Enviar uma solicitação de reidentificação para a API DLP
Esta seção descreve como reidentificar dados tokenizados no conteúdo de texto.
Para concluir esta tarefa, você precisa do seguinte:
- O nome completo do recurso da chave do Cloud KMS que você criou em Criar um keyring e uma chave.
- A chave encapsulada que você criou em Encapsular a chave AES usando a chave do Cloud KMS.
- O token que você recebeu em Enviar uma solicitação de desidentificação para a API DLP.
Para identificar o conteúdo tokenizado novamente, siga estas etapas:
Crie um arquivo de solicitação JSON chamado
reidentify-request.jsoncom o texto a seguir.{ "reidentifyConfig":{ "infoTypeTransformations":{ "transformations":[ { "infoTypes":[ { "name":"EMAIL_ADDRESS_TOKEN" } ], "primitiveTransformation":{ "cryptoDeterministicConfig":{ "cryptoKey":{ "kmsWrapped": { "cryptoKeyName": "projects/PROJECT_ID/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key", "wrappedKey": "WRAPPED_KEY" } }, "surrogateInfoType":{ "name":"EMAIL_ADDRESS_TOKEN" } } } } ] } }, "inspectConfig":{ "customInfoTypes":[ { "infoType":{ "name":"EMAIL_ADDRESS_TOKEN" }, "surrogateType":{ } } ] }, "item":{ "value": "My name is Alicia Abernathy, and my email address is TOKEN." } }Substitua:
PROJECT_ID: ID do projeto.WRAPPED_KEY: a chave encapsulada que você criou em Encapsular a chave AES usando a chave do Cloud KMS.TOKEN: o token que você recebeu em Enviar uma solicitação de desidentificação à API DLP, por exemplo,EMAIL_ADDRESS_TOKEN(52):AVAx2eIEnIQP5jbNEr2j9wLOAd5m4kpSBR/0jjjGdAOmryzZbE/q.
Verifique se o valor resultante de
cryptoKeyNameforma o nome completo do recurso da chave do Cloud KMS.Para mais informações sobre os componentes dessa solicitação JSON, consulte
projects.locations.content.reidentify. Depois de concluir esta tarefa, tente fazer experimentos com entradas diferentes para essa solicitação. Você pode usarcurlconforme descrito aqui. Alternativamente, use o APIs Explorer nessa página de Referência da API em Testar este método.Use
curlpara fazer uma solicitaçãoprojects.locations.content.reidentify:curl -s \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json" \ https://dlp.googleapis.com/v2/projects/PROJECT_ID/locations/global/content:reidentify \ -d @reidentify-request.jsonSubstitua
PROJECT_IDpelo ID do seu projeto.Para transmitir um nome de arquivo para
curl, use a opção-d(para dados) e use um sinal@antes do nome do arquivo. Esse arquivo precisa estar no mesmo diretório em que você executa o comandocurl.A resposta que você recebe da Proteção de dados sensíveis é semelhante ao seguinte JSON:
{ "item": { "value": "My name is Alicia Abernathy, and my email address is aabernathy@example.com." }, "overview": { "transformedBytes": "70", "transformationSummaries": [ { "infoType": { "name": "EMAIL_ADDRESS" }, "transformation": { "cryptoDeterministicConfig": { "cryptoKey": { "kmsWrapped": { "wrappedKey": "CiQAYuuIGo5DVaqdE0YLioWxEhC8LbTmq7Uy2G3qOJlZB7WXBw0SSQAjdwP8ZusZJ3Kr8GD9W0vaFPMDksmHEo6nTDaW/j5sSYpHa1ym2JHk+lUgkC3Zw5bXhfCNOkpXUdHGZKou1893O8BDby/82HY=", "cryptoKeyName": "projects/<var>PROJECT_ID</var>/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key" } }, "surrogateInfoType": { "name": "EMAIL_ADDRESS_TOKEN" } } }, "results": [ { "count": "1", "code": "SUCCESS" } ], "transformedBytes": "70" } ] } }No campo
item, o token de endereço de e-mail é substituído pelo endereço de e-mail real do texto original.Você acabou de desidentificar e reidentificar dados sensíveis em conteúdo de texto usando criptografia determinística.
Limpar
Para evitar cobranças na conta do Google Cloud pelos recursos usados nesta página, exclua o projeto do Google Cloud e os recursos.
Destruir a versão da chave
Se você não quiser mais usar a chave criada nesta tarefa, destrua a versão dela.
Liste as versões disponíveis para sua chave:
gcloud kms keys versions list \
--location "global" \
--keyring "dlp-keyring" \
--key "dlp-key"
Para destruir uma versão, execute o seguinte comando:
gcloud kms keys versions destroy KEY_VERSION \
--location "global" \
--keyring "dlp-keyring" \
--key "dlp-key"
Substitua KEY_VERSION pelo número da versão a ser
destruída, por exemplo, 1.
Excluir o projeto
Se você criou um novo projeto para esta tarefa, a maneira mais fácil de evitar cobranças adicionais é excluir o projeto.
Excluir um projeto do Google Cloud :
gcloud projects delete PROJECT_ID
Revogar suas credenciais
Opcional: revogar credenciais da CLI gcloud.
gcloud auth revoke
A seguir
- Para mais informações sobre como desidentificar conteúdo sensível, consulte Desidentificação de dados sensíveis.
- Para informações sobre como um fluxo de trabalho de desidentificação se encaixa em implantações reais, consulte Desidentificação e reidentificação de PII em conjuntos de dados de grande escala usando a Proteção de dados sensíveis.
- Para informações conceituais sobre tokenização de dados com uma chave criptográfica, consulte Pseudonimização.