A API Data Manager é compatível com a 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 | Conversões de vendas na loja do Google Ads | ||
| Eventos | Conversões de várias origens do Google Ads | ||
| Eventos | Eventos de várias origens do Google Analytics |
Configurar o Google Cloud KMS
Confira as etapas para configurar os recursos do Google Cloud KMS para criptografia.
Configurar a interface de linha de comando do Google Cloud
Instale e inicialize a interface de linha de comando do Google Cloud.
Para selecionar ou criar um projeto na nuvem do Google Cloud e ativar o Cloud Key Management Service, clique em Ativar o Cloud KMS.
Ativar o Cloud KMSPara definir o projeto no ambiente, use o comando
gcloud config set. Para verificar se o projeto já está definido no ambiente, executegcloud config list.Se nenhum
projectestiver definido ou se você quiser usar um projeto diferente para sua chave, executegcloud 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.
Criar um keyring
gcloud kms keyrings create KEY_RING_NAME \ --location KEY_RING_LOCATIONPara mais informações, consulte Criar um keyring.
Crie uma chave no keyring. O ROTATION_PERIOD indica o intervalo para alternar a chave, e o NEXT_ROTATION_TIME indica a data e a hora em que a primeira rotação deve ocorrer.
Por exemplo, para alternar a chave a cada 30 dias e realizar a primeira rotação em uma semana, defina ROTATION_PERIOD como
30de 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 é 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.
Crie um pool de Identidade da carga de trabalho (WIP). O
locationdo pool precisa serglobal.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 de Identidade da carga de trabalho e provedores.
Crie um provedor de pool de Identidade da carga de trabalho. O argumento
--attribute-conditionverifica 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"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"Se você quiser criptografar dados de eventos para conversões off-line e conversões otimizadas para leads, conceda o papel 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
Veja as etapas para configurar os recursos do AWS KMS para criptografia.
Configurar a interface de linha de comando da AWS
- Instale a interface de linha de comando da AWS.
Execute o seguinte comando para verificar a instalação:
aws --versionVeja 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
- Conclua os pré-requisitos para usar a interface de linha de comando da AWS.
- Faça login em uma sessão do IAM Identity Center.
Crie uma chave
Crie uma chave KMS simétrica (KEK).
aws kms create-key \ --key-usage ENCRYPT_DECRYPT \ --key-spec SYMMETRIC_DEFAULT \ --description "KEK for Confidential Matching Data Encryption"Observe o
ArnemKeyMetadatana saída. Você vai precisar desse nome de recurso da Amazon (ARN) em outras etapas.AWS_KEY_ARNOpcional: 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_ARNUm 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 do 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:
Crie um arquivo JSON chamado
kms-decrypt-policy.jsoncom o seguinte conteúdo:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "AWS_KEY_ARN" } ] }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.jsonAnote 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
Crie um arquivo JSON chamado
role-trust-policy.jsoncom o seguinte conteúdo e o ARN do provedor do 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*" } } } ] }Crie um papel do IAM com o nome que preferir.
aws iam create-role \ --role-name "AWS_IAM_ROLE_NAME" \ --assume-role-policy-document file://role-trust-policy.jsonAnexe a política de papel à 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 requer uma chave de criptografia de dados (DEK). Uma DEK é uma chave simétrica usada para criptografar dados. A DEK é criptografada usando sua chave de criptografia de chaves (KEK) do Google Cloud ou do AWS KMS. Você envia a DEK criptografada, o URI da KEK e o provedor de WIP 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, não use hash em region_code,
postal_code, city ou administrative_area de um
AddressInfo.
Depois que os dados de cada campo forem formatados e criptografados com hash, criptografe o valor de hash seguindo estas etapas:
Codifique os bytes de hash usando a codificação Base64.
Criptografe o hash codificado em Base64 usando sua DEK. Como a criptografia necessária é
XCHACHA20_POLY1305, a funçãoencrypt()do Tink requer um parâmetro de dados associado. Esse parâmetro precisa estar vazio (por exemplo,b""em Python ounew byte[0]em Java). Se você transmitirnullou um valor não vazio, a API Data Manager não poderá descriptografar os dados.Codifique a saída do processo de criptografia usando a codificação hexadecimal ou Base64.
Use o valor codificado para o campo.
Defina
encryption_infoeencodingna 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
encodingcomo a codificação usada para codificar os valores de campo criptografados.
Veja um snippet de uma solicitação que usa uma chave do Google Cloud KMS e tem 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 IngestAudienceMembers
para Java ou o
exemplo de código ingest_audience_members
para Python.
Verificar diagnósticos para problemas de criptografia
Depois de fazer upload dos dados criptografados, use o diagnóstico para verificar se há avisos relacionados à criptografia, como PROCESSING_WARNING_REASON_KEK_PERMISSION_DENIED ou PROCESSING_WARNING_REASON_DEK_DECRYPTION_ERROR. Resolva todos os avisos no
diagnóstico, envie as solicitações novamente e verifique se o diagnóstico não retorna mais
avisos após as mudanças.