L'API Data Manager permet de chiffrer les données à l'aide des services de gestion de clés suivants :
La compatibilité avec certains cas d'utilisation varie selon le service de gestion de clés (KMS) :
| Catégorie | Cas d'utilisation | Google Cloud KMS | KMS AWS |
|---|---|---|---|
| Audiences | Envoyer des membres de l'audience | ||
| Événements | Conversions hors connexion ou suivi avancé des conversions pour les prospects | ||
| É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 |
Configurer Google Cloud KMS
Voici la procédure à 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 Cloud Key Management Service, cliquez sur Activer Cloud KMS.
Activer Cloud KMSPour définir votre projet dans votre environnement, utilisez la commande
gcloud config set. 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éer un trousseau de clés.
gcloud kms keyrings create KEY_RING_NAME \ --location KEY_RING_LOCATIONPour en savoir plus, consultez Créer un trousseau de clés.
Créez une clé dans le trousseau de clés. ROTATION_PERIOD indique l'intervalle de rotation de la clé, et NEXT_ROTATION_TIME indique la date et l'heure de la première rotation.
Par exemple, pour effectuer la rotation de la clé tous les 30 jours et 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 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 Fédération d'identité de charge de travail.
Créez un pool d'identités de charge de travail. Le
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 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és au fournisseur 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"Si vous souhaitez chiffrer les données d'événement pour les conversions hors connexion et le suivi avancé des conversions pour les prospects, accordez 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"
Accédez à la section Chiffrer les données.
Configurer AWS KMS
Voici comment configurer les ressources AWS KMS 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 du résultat d'une installation réussie :
aws-cli/2.31.12 Python/3.13.7 ...
Configurer un utilisateur AWS et se connecter
- Remplissez les conditions préalables 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 le résultat. Vous aurez besoin de ce nom de ressource Amazon (ARN) dans d'autres étapes.AWS_KEY_ARNFacultatif : Créez un alias de clé en utilisant le 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 construire des commandes de l'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 le résultat. Vous en aurez besoin dans d'autres étapes.
AWS_OIDC_PROVIDER_ARN
Créez 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 le résultat. Vous en aurez besoin dans 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 en lui attribuant le nom 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é Google Cloud ou AWS KMS. Vous envoyez la clé DEK chiffrée dans la requête.
Pour préparer les données de la demande de chiffrement, suivez les mêmes consignes de mise en forme et de hachage que 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é en Base64 à l'aide de votre clé 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 terminer la dernière étape, modifiez IngestAudienceMembersRequest ou 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 des champs chiffrés.
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 IngestAudienceMembersWithEncryption pour Java ou l'exemple de code ingest_audience_members_with_encryption pour Python.