Chiffrer les données utilisateur

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

  1. Installez et initialisez l'interface de ligne de commande Google Cloud.

  2. Pour sélectionner ou créer un projet Google Cloud et activer le Cloud Key Management Service, cliquez sur Activer Cloud KMS.

    Activer Cloud KMS
  3. Pour définir votre projet dans votre environnement, utilisez la gcloud config set commande. Pour vérifier si le projet est déjà défini dans votre environnement, exécutez gcloud config list.

    Si aucun project n'est défini ou si vous souhaitez utiliser un autre projet pour votre clé, exécutez gcloud 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.

  1. Créez un trousseau de clés.

    gcloud kms keyrings create KEY_RING_NAME \
        --location KEY_RING_LOCATION
    

    Pour en savoir plus, consultez la page Créer un trousseau de clés.

  2. 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 30d et 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.

  1. Créez un pool d'identités de charge de travail. L'élément location du pool doit être global.

    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.

  2. Créez un fournisseur de pools d'identités de charge de travail. L'argument --attribute-condition vé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"
    
  3. 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"
    
  4. 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

  1. Installez l'interface de ligne de commande AWS.
  2. Exécutez la commande suivante pour vérifier l'installation :

    aws --version
    

    Voici 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

  1. Respectez les prérequis pour utiliser l'interface de ligne de commande AWS.
  2. Connectez-vous à une session IAM Identity Center.

Créer une clé

  1. 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 Arn sous KeyMetadata dans la sortie. Vous aurez besoin de ce nom de ressource Amazon (ARN) à d'autres étapes.

    AWS_KEY_ARN
    
  2. Facultatif : 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_ARN
    

    Un 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

  1. Créez un fichier JSON nommé kms-decrypt-policy.json avec le contenu suivant :

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "kms:Decrypt",
          "Resource": "AWS_KEY_ARN"
        }
      ]
    }
    
  2. 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.json
    

    Notez 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

  1. Créez un fichier JSON nommé role-trust-policy.json avec 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*"
                    }
                }
            }
        ]
    }
    
  2. 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.json
    
  3. Associez 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 :

  1. Encodez les octets de hachage à l'aide de l'encodage Base64.
  2. Chiffrez le hachage encodé au format Base64 à l'aide de votre DEK.
  3. Encodez la sortie du processus de chiffrement à l'aide de l'encodage hexadécimal ou Base64.
  4. Utilisez la valeur encodée pour le champ.
  5. Définissez encryption_info et encoding dans 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 encoding sur 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.