Criptografe os dados do usuário

A API Data Manager oferece suporte à criptografia de dados usando os seguintes serviços de gerenciamento de chaves:

O suporte para alguns casos de uso varia de acordo com o serviço de gerenciamento de chaves (KMS):

Categoria Caso de uso Google Cloud KMS KMS da AWS
Públicos-alvo Enviar membros do público-alvo
Eventos Conversões off-line ou conversões otimizadas para leads
Eventos Eventos enviados como uma fonte de dados adicional para um destino do Google Ads
Eventos Eventos enviados como uma fonte de dados adicional para um destino do Google Analytics

Configurar o Google Cloud KMS

Confira as etapas para configurar recursos do Google Cloud KMS para criptografia.

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 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
  3. Para definir seu 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 visão geral do Cloud 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 fazer 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 identidades da carga de trabalho

Esta seção é uma breve visão geral da federação de identidade da carga de trabalho. Para mais informações, consulte Federação de identidade 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 pools e provedores 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 == 'CONFIDENTIAL_SPACE' &&
         'STABLE' in assertion.submods.confidential_space.support_attributes &&
         ['cfm-services@admcloud-cfm-services.iam.gserviceaccount.com'].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://confidentialcomputing.googleapis.com" \
       --allowed-audiences="https://sts.googleapis.com"
    
  3. Conceda o papel 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"
    
  4. Se você quiser criptografar dados de eventos para conversões off-line e conversões otimizadas para leads, conceda a função de descriptografador de chaves à conta de serviço do Google datamanager-api@datamanager-ga.iam.gserviceaccount.com.

    # Grants the role to the Google service account.
    gcloud kms keys add-iam-policy-binding KEY_NAME \
        --keyring KEY_RING_NAME \
        --location KEY_RING_LOCATION \
        --member "serviceAccount:datamanager-api@datamanager-ga.iam.gserviceaccount.com" \
        --role "roles/cloudkms.cryptoKeyDecrypter"
    

Acesse a seção Criptografar dados.

Configurar o AWS KMS

Confira as etapas para configurar recursos do AWS KMS para criptografia.

Configurar a interface de linha de comando da AWS

  1. Instale a interface de linha de comando da AWS.
  2. Execute o seguinte comando para verificar a instalação:

    aws --version
    

    Confira um snippet da saída de uma instalação bem-sucedida:

    aws-cli/2.31.12 Python/3.13.7 ...
    

Configurar um usuário da AWS e fazer login

  1. Cumpra os pré-requisitos para usar a interface de linha de comando da AWS.
  2. Faça login em uma sessão do IAM Identity Center.

Crie uma chave

  1. Crie uma chave simétrica do KMS (KEK).

    aws kms create-key \
      --key-usage ENCRYPT_DECRYPT \
      --key-spec SYMMETRIC_DEFAULT \
      --description "KEK for Confidential Matching Data Encryption"
    

    Observe o Arn em KeyMetadata na saída. Você vai precisar desse nome de recurso da Amazon (ARN) em outras etapas.

    AWS_KEY_ARN
    
  2. Opcional: crie um alias de chave usando um nome de alias de sua escolha.

    aws kms create-alias \
      --alias-name "alias/AWS_KEY_ALIAS" \
      --target-key-id AWS_KEY_ARN
    

    Um alias não é obrigatório, mas é útil para criar comandos da interface de linha de comando da AWS. Por exemplo, é possível recuperar o ARN da chave usando o alias:

    aws kms describe-key --key-id "alias/AWS_KEY_ALIAS" \
      --query 'KeyMetadata.Arn' \
      --output text
    

Criar um provedor de identidade do OpenID Connect

Crie um provedor de identidade OpenID Connect (OIDC). Você só precisa realizar essa etapa uma vez por conta da AWS.

aws iam create-open-id-connect-provider \
  --url https://confidentialcomputing.googleapis.com \
  --client-id-list AUDIENCE \
  --thumbprint-list "08745487e891c19e3078c1f2a07e452950ef36f6"

Anote o ARN do provedor OIDC na saída. Você vai precisar dele em outras etapas.

AWS_OIDC_PROVIDER_ARN

Crie uma política do IAM:

  1. Crie um arquivo JSON chamado kms-decrypt-policy.json com o seguinte conteúdo:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "kms:Decrypt",
          "Resource": "AWS_KEY_ARN"
        }
      ]
    }
    
  2. Crie uma política do IAM usando o arquivo JSON e um nome de política de sua escolha.

    aws iam create-policy \
      --policy-name "AWS_POLICY_NAME" \
      --policy-document file://kms-decrypt-policy.json
    

    Anote o ARN da política do IAM na saída. Você vai precisar dele em outras etapas.

    AWS_IAM_POLICY_ARN
    

Criar e anexar um papel do IAM

  1. Crie um arquivo JSON chamado role-trust-policy.json com o seguinte conteúdo e o ARN do provedor OIDC da etapa anterior:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Federated": "AWS_OIDC_PROVIDER_ARN"
                },
                "Action": [
                    "sts:AssumeRoleWithWebIdentity",
                    "sts:TagSession"
                ],
                "Condition": {
                    "StringEquals": {
                        "confidentialcomputing.googleapis.com:aud": "cfm-awsresource",
                        "aws:RequestTag/swname": "CONFIDENTIAL_SPACE",
                        "aws:RequestTag/container.signatures.key_ids": "6b1f357b59e9407fb017ca0e3e783b2bd5acbfea6c83dd82971a4150df5b25f9"
                    },
                    "StringLike": {
                        "aws:RequestTag/confidential_space.support_attributes": "*STABLE*"
                    }
                }
            }
        ]
    }
    
  2. Crie um papel do IAM com um nome de sua escolha.

    aws iam create-role \
      --role-name "AWS_IAM_ROLE_NAME" \
      --assume-role-policy-document file://role-trust-policy.json
    
  3. Anexe a política de papéis à política do IAM.

    aws iam attach-role-policy \
      --role-name "AWS_IAM_ROLE_NAME" \
      --policy-arn "AWS_IAM_POLICY_ARN"
    

Criptografar dados

A criptografia na API Data Manager exige uma chave de criptografia de dados (DEK). Uma DEK é uma chave simétrica usada para criptografar dados. A DEK é criptografada usando sua chave do Google Cloud ou do AWS 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 geração de hash que você usaria para dados não criptografados.

Não criptografe valores não hashados. Por exemplo, o region_code ou postal_code de um AddressInfo.

Depois que os dados de cada campo forem formatados e criptografados, criptografe o valor criptografado 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 do campo.
  5. Defina encryption_info e encoding na solicitação.

Para concluir a última etapa, modifique o IngestAudienceMembersRequest ou IngestEventsRequest 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 usando uma chave do Google Cloud KMS e 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 ingest_audience_members_with_encryption para Python.