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
Instale e inicialize a interface de linha de comando do Google Cloud.
Para garantir que os componentes
gcloud
estejam atualizados, execute o comando a seguir.gcloud components update
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 KMSPara definir o projeto no ambiente, use o comando
gcloud config set
. Para verificar se o projeto já está definido no seu ambiente, executegcloud config list
.Se nenhum
project
estiver 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 documentação do Key Management Service.
Criar um keyring
gcloud kms keyrings create KEY_RING_NAME \ --location KEY_RING_LOCATION
Para mais informações, consulte Criar um chaveiro.
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.
Crie um pool de identidade da carga de trabalho (WIP). O
location
do 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 provedores e pools de identidade da carga de trabalho.
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"
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:
- Codifique os bytes de hash usando a codificação Base64.
- Criptografe o hash codificado em Base64 usando sua DEK.
- Codifique a saída do processo de criptografia usando a codificação hexadecimal ou Base64.
- Use o valor codificado para o campo.
- Defina
encryption_info
eencoding
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.