Voici comment envoyer des données chiffrées dans les requêtes d'ingestion des membres d'audience.
Configurer l'interface de ligne de commande Google Cloud
Installez et initialisez l'interface de ligne de commande Google Cloud.
Pour vous assurer que vos composants
gcloud
sont à jour, exécutez la commande suivante.gcloud components update
Pour sélectionner ou créer un projet Google Cloud et activer le service Cloud Key Management Service, cliquez sur Activer Cloud KMS.
Pour 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
project
n'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 documentation de Key Management Service.
Créer un trousseau de clés.
gcloud kms keyrings create KEY_RING_NAME \ --location KEY_RING_LOCATION
Pour en savoir plus, consultez Créer un trousseau.
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 faire pivoter la clé tous les 30 jours et effectuer la première rotation en 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 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 documentation sur la fédération d'identité de charge de travail.
Créez un pool d'identités de charge de travail (WIP). La valeur
location
du 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 pool 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 && ['[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://confidentialcomputing.googleapis.com" \ --allowed-audiences="https://sts.googleapis.com"
Accordez le rôle de déchiffreur de clé au fournisseur du pool 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"
Chiffrer des données
Le chiffrement dans l'API Data Manager nécessite une clé de chiffrement de données (DEK). Une clé de chiffrement des données 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 KMS. Vous envoyez la DEK chiffrée dans la requête.
Pour préparer les données dans la requête de 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 que les données de chaque champ sont mises en forme et hachées, chiffrez la valeur hachée en procédant comme suit:
- Encodez les octets du 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_info
etencoding
sur la requête.
Pour effectuer la dernière étape, modifiez IngestAudienceMembersRequest
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 de requête 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.