Pour envoyer des données chiffrées :
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 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 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 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
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. Le
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 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"
Attribuez 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 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 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_info
etencoding
dans 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
encoding
sur l'encodage utilisé pour encoder les valeurs des champs chiffrés.
Voici un extrait d'une 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.