Desidentificar e reidentificar dados sensíveis

Neste documento, mostramos como usar a Proteção de Dados Sensíveis para desidentificar e reidentificar dados sensíveis em conteúdo de texto. No processo, você vai aprender a criar uma chave encapsulada usando o Cloud Key Management Service. Você precisa dessa chave nas solicitações de desidentificação e reidentificação.

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 nível mais alto 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

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.

  3. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  4. Para inicializar a gcloud CLI, execute o seguinte comando:

    gcloud init
  5. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. 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.

  7. Verify that billing is enabled for your Google Cloud project.

  8. Enable the Sensitive Data Protection and Cloud KMS APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable dlp.googleapis.com cloudkms.googleapis.com
  9. Install the Google Cloud CLI.

  10. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  11. Para inicializar a gcloud CLI, execute o seguinte comando:

    gcloud init
  12. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  13. 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.

  14. Verify that billing is enabled for your Google Cloud project.

  15. Enable the Sensitive Data Protection and Cloud KMS APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable dlp.googleapis.com cloudkms.googleapis.com
  16. Funções exigidas

    Para receber as permissões necessárias para criar uma chave AES encapsulada, remover a identificação de dados sensíveis e identificá-los novamente, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:

    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.

    1. Crie um keyring:

      gcloud kms keyrings create "dlp-keyring" \
          --location "global"
      
    2. Crie uma chave:

      gcloud kms keys create "dlp-key" \
          --location "global" \
          --keyring "dlp-keyring" \
          --purpose "encryption"
      
    3. 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: ENABLED
      

      Nessa 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.

    1. Crie uma chave AES de 128, 192 ou 256 bits. O comando a seguir usa openssl para criar uma chave de 256 bits no diretório atual:

      openssl rand -out "./aes_key.bin" 32
      

      O arquivo aes_key.bin é adicionado ao diretório atual.

    2. Codifique a chave AES como uma string base64:

      base64 -i ./aes_key.bin
      

      Você 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:

    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:

    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:

    1. Crie um arquivo de solicitação JSON chamado deidentify-request.json com 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:

      Verifique se o valor resultante de cryptoKeyName forma 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 usar curl conforme descrito aqui. Também é possível usar o API Explorer nessa página de referência em Testar este método.

    2. Use curl para fazer uma solicitação projects.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.json
      

      Substitua PROJECT_ID pelo 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 comando curl.

      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, como EMAIL_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:

    Para identificar o conteúdo tokenizado novamente, siga estas etapas:

    1. Crie um arquivo de solicitação JSON chamado reidentify-request.json com 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:

      Verifique se o valor resultante de cryptoKeyName forma 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 usar curl conforme descrito aqui. Também é possível usar o API Explorer nessa página de referência em Testar este método.

    2. Use curl para fazer uma solicitação projects.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.json
      

      Substitua PROJECT_ID pelo 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 comando curl.

      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 confidenciais 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.

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

    Revogar suas credenciais

    Optional: Revoke credentials from the gcloud CLI.

    gcloud auth revoke

    A seguir