L'API Data Manager est compatible avec le chiffrement des données à l'aide des services de gestion des clés suivants :
La compatibilité avec certains cas d'utilisation varie en fonction du service de gestion des clés (KMS) :
| Catégorie | Cas d'utilisation | Google Cloud KMS | KMS AWS |
|---|---|---|---|
| Audiences | Envoyer des membres d'audience | ||
| Événements | Conversions hors connexion ou suivi avancé des conversions pour les prospects | ||
| Événements | Conversions de ventes en magasin Google Ads | ||
| Événements | Événements envoyés en tant que source de données supplémentaire à une destination Google Ads | ||
| Événements | Événements envoyés en tant que source de données supplémentaire à une destination Google Analytics destination |
Configurer Google Cloud KMS
Voici les étapes à suivre pour configurer les ressources Google Cloud KMS pour le chiffrement.
Configurer l'interface de ligne de commande Google Cloud
Installez et initialisez l'interface de ligne de commande Google Cloud.
Pour sélectionner ou créer un projet Google Cloud et activer le Cloud Key Management Service, cliquez sur Activer Cloud KMS.
Activer Cloud KMSPour définir votre projet dans votre environnement, utilisez la
gcloud config setcommande. Pour vérifier si le projet est déjà défini dans votre environnement, exécutezgcloud config list.Si aucun
projectn'est défini ou si vous souhaitez utiliser un autre projet pour votre clé, exécutezgcloud config set:gcloud config set project PROJECT_ID
Créer une clé
Pour en savoir plus, consultez la présentation de Cloud Key Management Service.
Créez un trousseau de clés.
gcloud kms keyrings create KEY_RING_NAME \ --location KEY_RING_LOCATIONPour en savoir plus, consultez la page Créer un trousseau de clés.
Créez une clé dans le trousseau de clés. Le ROTATION_PERIOD indique l' intervalle de rotation de la clé, et le NEXT_ROTATION_TIME indique la date et l'heure auxquelles la première rotation doit avoir lieu.
Par exemple, pour faire pivoter la clé tous les 30 jours et effectuer la première rotation dans une semaine, définissez ROTATION_PERIOD sur
30det NEXT_ROTATION_TIME sur$(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"Pour en savoir plus, consultez la page Créer une clé.
Créer un fournisseur de pools d'identités de charge de travail
Cette section présente brièvement la fédération d'identité de charge de travail. Pour en savoir plus, consultez la page Fédération d'identité de charge de travail.
Créez un pool d'identités de charge de travail. L'élément
locationdu pool doit êtreglobal.gcloud iam workload-identity-pools create WIP_ID \ --location=global \ --display-name="WIP_DISPLAY_NAME" \ --description="WIP_DESCRIPTION"Pour en savoir plus, consultez la page Gérer les pools d'identités de charge de travail et leurs fournisseurs.
Créez un fournisseur de pools d'identités de charge de travail. L'argument
--attribute-conditionvérifie que l'appelant est un compte de service de mise en correspondance confidentielle.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"Attribuez le rôle de déchiffreur de clé au fournisseur de pools d'identités de charge de travail.
# 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"Si vous souhaitez chiffrer les données d'événement pour les conversions hors connexion et le suivi avancé des conversions pour les prospects, attribuez le rôle de déchiffreur de clé au compte de service 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"
Passez à la section Chiffrer des données.
Configurer KMS AWS
Voici les étapes à suivre pour configurer les ressources KMS AWS pour le chiffrement.
Configurer l'interface de ligne de commande AWS
- Installez l'interface de ligne de commande AWS.
Exécutez la commande suivante pour vérifier l'installation :
aws --versionVoici un extrait de la sortie pour une installation réussie :
aws-cli/2.31.12 Python/3.13.7 ...
Configurer un utilisateur AWS et se connecter
- Respectez les prérequis pour utiliser l'interface de ligne de commande AWS.
- Connectez-vous à une session IAM Identity Center.
Créer une clé
Créez une clé KMS symétrique (KEK).
aws kms create-key \ --key-usage ENCRYPT_DECRYPT \ --key-spec SYMMETRIC_DEFAULT \ --description "KEK for Confidential Matching Data Encryption"Notez l'élément
ArnsousKeyMetadatadans la sortie. Vous aurez besoin de ce nom de ressource Amazon (ARN) à d'autres étapes.AWS_KEY_ARNFacultatif : Créez un alias de clé à l'aide du nom d'alias de votre choix.
aws kms create-alias \ --alias-name "alias/AWS_KEY_ALIAS" \ --target-key-id AWS_KEY_ARNUn alias n'est pas obligatoire, mais il est utile pour créer des commandes d'interface de ligne de commande AWS. Par exemple, vous pouvez récupérer l'ARN de la clé à l'aide de l'alias :
aws kms describe-key --key-id "alias/AWS_KEY_ALIAS" \ --query 'KeyMetadata.Arn' \ --output text
Créer un fournisseur d'identité OpenID Connect
Créez un fournisseur d'identité OpenID Connect (OIDC). Vous n'avez besoin d'effectuer cette étape qu'une seule fois par compte AWS.
aws iam create-open-id-connect-provider \
--url https://confidentialcomputing.googleapis.com \
--client-id-list AUDIENCE \
--thumbprint-list "08745487e891c19e3078c1f2a07e452950ef36f6"
Notez l'ARN du fournisseur OIDC dans la sortie. Vous en aurez besoin à d'autres étapes.
AWS_OIDC_PROVIDER_ARN
Créer une stratégie IAM
Créez un fichier JSON nommé
kms-decrypt-policy.jsonavec le contenu suivant :{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "AWS_KEY_ARN" } ] }Créez une stratégie IAM à l'aide du fichier JSON et d'un nom de stratégie de votre choix.
aws iam create-policy \ --policy-name "AWS_POLICY_NAME" \ --policy-document file://kms-decrypt-policy.jsonNotez l'ARN de la stratégie IAM dans la sortie. Vous en aurez besoin à d'autres étapes.
AWS_IAM_POLICY_ARN
Créer et associer un rôle IAM
Créez un fichier JSON nommé
role-trust-policy.jsonavec le contenu suivant et l'ARN du fournisseur OIDC de l'étape précédente :{ "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*" } } } ] }Créez un rôle IAM avec un nom de rôle de votre choix.
aws iam create-role \ --role-name "AWS_IAM_ROLE_NAME" \ --assume-role-policy-document file://role-trust-policy.jsonAssociez la stratégie de rôle à la stratégie IAM.
aws iam attach-role-policy \ --role-name "AWS_IAM_ROLE_NAME" \ --policy-arn "AWS_IAM_POLICY_ARN"
Chiffrer des données
Le chiffrement dans l'API Data Manager nécessite une clé de chiffrement des données (DEK). Une DEK est une clé symétrique que vous utilisez pour chiffrer des données. Votre DEK est chiffrée à l'aide de votre clé de chiffrement de clé (KEK) Google Cloud ou AWS KMS. Vous envoyez la DEK chiffrée, l'URI KEK et le fournisseur de pools d'identités de charge de travail dans le cadre de la requête.
Pour préparer les données de la requête au chiffrement, suivez les mêmes consignes de mise en forme et de hachage que celles que vous utiliseriez pour les données non chiffrées.
Ne chiffrez pas les valeurs non hachées. Par exemple, le region_code ou le postal_code
d'un AddressInfo.
Une fois les données de chaque champ mises en forme et hachées, chiffrez la valeur hachée en procédant comme suit :
- Encodez les octets de hachage à l'aide de l'encodage Base64.
- Chiffrez le hachage encodé au format Base64 à l'aide de votre DEK.
- Encodez la sortie du processus de chiffrement à l'aide de l'encodage hexadécimal ou Base64.
- Utilisez la valeur encodée pour le champ.
- Définissez
encryption_infoetencodingdans la requête.
Pour effectuer la dernière étape, modifiez les
IngestAudienceMembersRequest ou les
IngestEventsRequest
pour indiquer que vous avez chiffré
vos données :
- Définissez le champ
encryption_info. - Définissez le champ
encodingsur l'encodage utilisé pour encoder les valeurs de champ chiffrées.
Voici un extrait d'une requête utilisant une clé Google Cloud KMS et avec les champs de chiffrement et d'encodage définis :
{
...
"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"
}
Pour utiliser la bibliothèque et les utilitaires de l'API Data Manager afin de créer et d'envoyer une requête, consultez l'exemple de code IngestAudienceMembers pour Java ou l'exemple de code ingest_audience_members pour Python.
Vérifier les diagnostics pour les problèmes de chiffrement
Après avoir importé des données chiffrées, utilisez les diagnostics pour vérifier
si des avertissements liés au chiffrement s'affichent, tels que
PROCESSING_WARNING_REASON_KEK_PERMISSION_DENIED ou
PROCESSING_WARNING_REASON_DEK_DECRYPTION_ERROR. Résolvez les avertissements dans les diagnostics, renvoyez les requêtes et vérifiez que les diagnostics ne renvoient plus d'avertissements après vos modifications.