Criptografe os dados do usuário

Confira como enviar dados criptografados em solicitações de transferência de membros do público-alvo.

Configurar a interface de linha de comando do Google Cloud

  1. Instale e inicialize a interface de linha de comando do Google Cloud.

  2. Para garantir que os componentes gcloud estejam atualizados, execute o comando a seguir.

    gcloud components update
    
  3. Para selecionar ou criar um projeto do Google Cloud e ativar o Cloud Key Management Service, clique em Ativar o Cloud KMS.

    Ativar o Cloud KMS
  4. Para definir o projeto no ambiente, use o comando gcloud config set. Para verificar se o projeto já está definido no seu ambiente, execute gcloud config list.

    Se nenhum project estiver definido ou se você quiser usar um projeto diferente para sua chave, execute gcloud config set:

    gcloud config set project PROJECT_ID
    

Crie uma chave

Para mais informações, consulte a documentação do Key Management Service.

  1. Criar um keyring

    gcloud kms keyrings create KEY_RING_NAME \
        --location KEY_RING_LOCATION
    

    Para mais informações, consulte Criar um chaveiro.

  2. Crie uma chave no keyring. O ROTATION_PERIOD indica o intervalo para girar a chave, e o NEXT_ROTATION_TIME indica a data e a hora em que a primeira rotação deve ocorrer.

    Por exemplo, para girar a chave a cada 30 dias e realizar a primeira rotação em uma semana, defina ROTATION_PERIOD como 30d e NEXT_ROTATION_TIME como $(date --utc --date="next week" --iso-8601=seconds).

    gcloud kms keys create KEY_NAME \
        --keyring KEY_RING_NAME \
        --location KEY_RING_LOCATION \
        --purpose "encryption" \
        --rotation-period ROTATION_PERIOD \
        --next-rotation-time "NEXT_ROTATION_TIME"
    

    Para mais informações, consulte Criar uma chave.

Criar um provedor de pool de identidade da carga de trabalho

Esta seção é um breve resumo da federação de identidade da carga de trabalho. Para mais informações, consulte a documentação da Federação de identidades da carga de trabalho.

  1. Crie um pool de identidade da carga de trabalho (WIP). O location do pool precisa ser global.

    gcloud iam workload-identity-pools create WIP_ID \
       --location=global \
       --display-name="WIP_DISPLAY_NAME" \
       --description="WIP_DESCRIPTION"
    

    Para mais informações, consulte Gerenciar provedores e pools de identidade da carga de trabalho.

  2. Crie um provedor de pool de identidade da carga de trabalho. O argumento --attribute-condition verifica se o autor da chamada é uma conta de serviço de correspondência confidencial.

    gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID \
       --location=global \
       --workload-identity-pool=WIP_ID \
       --display-name="PROVIDER_DISPLAY_NAME" \
       --description="PROVIDER_DESCRIPTION" \
       --attribute-mapping="google.subject=assertion.sub,google.groups=[\"PROVIDER_ID\"]" \
       --attribute-condition="assertion.swname == '_SPACE' &&
         'STABLE' in assertion.submods._space.support_attributes &&
         ['[email protected]'].exists(
             a, a in assertion.google_service_accounts) &&
         'ECDSA_P256_SHA256:6b1f357b59e9407fb017ca0e3e783b2bd5acbfea6c83dd82971a4150df5b25f9'
         in assertion.submods.container.image_signatures.map(sig, sig.signature_algorithm+':'+sig.key_id)" \
       --issuer-uri="https://computing.googleapis.com" \
       --allowed-audiences="https://sts.googleapis.com"
    
  3. Conceda a função de descriptografador de chaves ao provedor de WIP.

    # Grants the role to the WIP provider.
    gcloud kms keys add-iam-policy-binding KEY_NAME \
        --keyring KEY_RING_NAME \
        --location KEY_RING_LOCATION \
        --member "principalSet://iam.googleapis.com/projects/PROJECT_ID/locations/global/workloadIdentityPools/WIP_ID/group/PROVIDER_ID" \
        --role "roles/cloudkms.cryptoKeyDecrypter"
    

Criptografar dados

A criptografia na API Data Manager requer uma chave de criptografia de dados (DEK). Uma DEK é uma chave simétrica usada para criptografar dados. Sua DEK é criptografada usando sua chave do Google Cloud KMS. Você envia a DEK criptografada como parte da solicitação.

Para preparar os dados na solicitação de criptografia, siga as mesmas diretrizes de formatação e hash que você usaria para dados não criptografados.

Não criptografe valores sem hash. Por exemplo, o region_code ou postal_code de um AddressInfo.

Depois que os dados de cada campo forem formatados e gerados em hash, criptografe o valor gerado em hash seguindo estas etapas:

  1. Codifique os bytes de hash usando a codificação Base64.
  2. Criptografe o hash codificado em Base64 usando sua DEK.
  3. Codifique a saída do processo de criptografia usando a codificação hexadecimal ou Base64.
  4. Use o valor codificado para o campo.
  5. Defina encryption_info e encoding na solicitação.

Para concluir a última etapa, modifique o IngestAudienceMembersRequest para indicar que você criptografou seus dados:

  • Defina o campo encryption_info.
  • Defina o campo encoding como a codificação usada para codificar os valores do campo criptografado.

Confira um snippet de uma solicitação com os campos de criptografia e codificação definidos:

{
  ...
  "encryptionInfo": {
    "gcpWrappedKeyInfo": {
      "kekUri": "gcp-kms://projects/PROJECT_ID/locations/KEY_RING_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME",
      "wipProvider": "projects/PROJECT_ID/locations/global/workloadIdentityPools/WIP_ID/providers/PROVIDER_ID",
      "keyType": "XCHACHA20_POLY1305",
      "encryptedDek": "ENCRYPTED_DEK"
    }
  },
  "encoding": "ENCODING"
}

Para usar a biblioteca e os utilitários da API Data Manager para criar e enviar uma solicitação, consulte o exemplo de código IngestAudienceMembersWithEncryption para Java ou o ingest_audience_members_with_encryption para Python.