Protéger vos données avec des clés CMEK

Vous pouvez utiliser les clés de chiffrement gérées par le client (CMEK, customer-managed encryption keys) Cloud Key Management Service pour protéger Cloud Functions et les données au repos associées. Ces clés sont créées et gérées via Cloud KMS et stockées sous forme de clés logicielles, dans un cluster HSM ou en externe.

Le déploiement d'une fonction avec une CMEK protège les données qui lui sont associées en utilisant une clé de chiffrement que vous contrôlez entièrement. Ce type de chiffrement vous permet de répondre aux exigences de conformité de certains secteurs, tels que les services financiers. Étant donné que la clé vous appartient et n'est pas contrôlée par Google, personne (même pas vous) ne peut accéder aux données protégées par ces clés de chiffrement lorsque ces dernières sont désactivées ou détruites.

Les types de données Cloud Functions suivants sont chiffrés lors de l'utilisation d'une CMEK :

  • Le code source de la fonction importé pour le déploiement et stocké par Google dans Cloud Storage, utilisé dans le processus de compilation.
  • Les résultats du processus de compilation de la fonction, y compris les éléments suivants :
    • L'image de conteneur créée à partir du code source de votre fonction.
    • Chaque instance de la fonction qui est déployée.
  • Données au repos pour les canaux internes de transport d'événements (1re génération uniquement).

Le processus de compilation de la fonction est protégé par une clé éphémère générée de manière unique pour chaque compilation. Pour en savoir plus, consultez la page Conformité CMEK dans Cloud Build. Notez également les points suivants :

  • Les métadonnées des fichiers, telles que les chemins d'accès au système de fichiers ou les horodatages de modification, ne sont pas chiffrées.

  • Si une clé est désactivée, l'image de conteneur ne peut pas être déployée et les nouvelles instances ne peuvent pas démarrer.

  • La protection CMEK de Cloud Functions ne s'applique qu'aux ressources Cloud Functions gérées par Google. Vous êtes responsable de la protection des données et des ressources que vous gérez, telles que vos dépôts de code source, les canaux d'événements qui résident dans le projet client (2e génération uniquement), ou tous les services utilisés par vos fonctions.

La configuration de CMEK pour Cloud Functions implique les tâches suivantes :

  • Autoriser les comptes de service nécessaires à accéder à la clé :

    • Pour toutes les fonctions, vous devez autoriser les comptes de service Cloud Functions, Artifact Registry et Cloud Storage à accéder à la clé.

    • Pour les fonctions Cloud Functions de 2e génération basées sur des événements, vous devez également terminer la configuration de CMEK pour Cloud Run et Eventarc.

  • Créer un dépôt Artifact Registry protégé par CMEK pour stocker les images de votre fonction.

  • Activer le chiffrement CMEK sur votre fonction.

  • Vous pouvez éventuellement activer les règles d'administration CMEK pour forcer toutes les nouvelles fonctions à être compatibles avec CMEK.

Ces fichiers sont décrits plus en détail ci-dessous.

Avant de commencer

  1. Créez une clé à région unique à utiliser pour chiffrer vos fonctions. Pour apprendre à créer une clé, consultez la page Créer des clés de chiffrement symétriques.

  2. Créez un dépôt Artifact Registry sur lequel CMEK est activé. Vous devez utiliser la même clé pour le dépôt Artifact Registry que lorsque vous activez CMEK pour une fonction.

  3. Pour les fonctions de 2e génération basées sur les événements, suivez les étapes de configuration supplémentaires décrites dans la section Activer le chiffrement CMEK pour un canal Google.

Accorder à la clé l'accès aux comptes de service

Pour toutes les fonctions, vous devez accorder aux comptes de service suivants l'accès à la clé :

  • Agent de service Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com)

  • Agent de service Artifact Registry (service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com)

  • Agent de service Cloud Storage (service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com)

Pour la 2e génération uniquement, vous devez également accorder l'accès à la clé aux comptes de service suivants :

  • Agent de service Cloud Run (service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com)

  • Agent de service Eventarc (service-PROJECT_NUMBER@gcp-sa-eventarc.iam.gserviceaccount.com)

Pour permettre à ces comptes de service d'accéder à la clé, ajoutez chaque compte de service en tant que compte principal de la clé, puis attribuez-lui le rôle Cloud KMS CryptoKey Encrypter/Decrypter :

Console

  1. Accédez à la page Cloud Key Management Service dans Google Cloud Console :
    Accéder à la page Cloud KMS

  2. Cliquez sur le nom du trousseau contenant la clé souhaitée.

  3. Cliquez sur le nom de la clé pour afficher ses détails.

  4. Dans l'onglet Autorisations, cliquez sur Accorder l'accès.

  5. Dans le champ Nouveaux comptes principaux, saisissez les adresses e-mail des trois comptes de service ci-dessus pour leur accorder des autorisations tous à la fois.

  6. Dans le menu déroulant Sélectionner un rôle, sélectionnez Chiffreur/Déchiffreur de clés cryptographiques Cloud KMS.

  7. Cliquez sur Enregistrer.

gcloud

Pour chaque compte de service ci-dessus, exécutez la commande suivante :

gcloud kms keys add-iam-policy-binding KEY \
--keyring KEY_RING \
--location LOCATION \
--member serviceAccount:SERVICE_AGENT_EMAIL \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter

Remplacez les éléments suivants :

  • KEY : nom de la clé. Exemple :my-key

  • KEY_RING : nom du trousseau de clés. Exemple : my-keyring.

  • LOCATION : emplacement de la clé. Exemple : us-central1.

  • SERVICE_AGENT_EMAIL : adresse e-mail du compte de service.

Activer CMEK pour une fonction

Après avoir configuré un dépôt Artifact Registry avec CMEK activé et accordé à Cloud Functions l'accès à votre clé, vous êtes prêt à activer CMEK pour votre fonction.

Pour activer CMEK pour une fonction, procédez comme suit :

Console

  1. Accédez à la page Cloud Functions dans Google Cloud Console :
    Accéder à la page Cloud Functions

  2. Cliquez sur le nom de la fonction sur laquelle vous souhaitez activer CMEK.

  3. Cliquez sur Modifier.

  4. Cliquez sur Exécution, compilation... pour développer les options de configuration avancées.

  5. Sélectionnez l'onglet Sécurité et dépôt d'images.

  6. Dans la section Chiffrement, sélectionnez Clé de chiffrement gérée par le client (CMEK).

  7. Sélectionnez la clé que vous avez choisie dans la liste déroulante.

  8. Sous Emplacement des conteneurs, sélectionnez Artifact Registry géré par le client.

  9. Dans le menu déroulant Artifact Registry, sélectionnez le dépôt protégé par CMEK.

  10. Cliquez sur Next (Suivant).

  11. Cliquez sur Déployer.

gcloud

Exécutez la commande suivante :

gcloud functions deploy FUNCTION \
[--gen2] \
--kms-key=KEY \
--docker-repository=REPOSITORY \
--source=YOUR_SOURCE_LOCATION
FLAGS...

Remplacez les éléments suivants :

  • FUNCTION : nom de la fonction sur laquelle activer CMEK. Exemple :cmek-function

  • KEY : nom complet de la clé, au format suivant : projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME.

  • REPOSITORY : nom complet du dépôt Artifact Registry, au format suivant : projects/PROJECT_NAME/locations/LOCATION/repositories/REPOSITORY.

  • YOUR_SOURCE_LOCATION : lorsque vous activez CMEK pour une fonction préexistante, assurez-vous que le code source prévu est redéployé en spécifiant explicitement ce paramètre.

  • FLAGS... : options supplémentaires pouvant être nécessaires pour déployer votre fonction, en particulier pour les déploiements Pour en savoir plus, consultez la page Déployer une fonction Cloud.

CMEK est activé pour la fonction.

Notez que Cloud Functions utilise toujours la version principale d'une clé à des fins de protection CMEK. Vous ne pouvez pas spécifier une version de clé particulière à utiliser lorsque vous activez CMEK pour vos fonctions.

Si une clé est détruite ou désactivée, ou si les autorisations requises sur cette clé sont révoquées, les instances actives des fonctions protégées par cette clé ne sont pas arrêtées. Les exécutions de fonction déjà en cours continueront d'être exécutées, mais les nouvelles exécutions échoueront tant que Cloud Functions n'aura pas accès à la clé.

Tester la protection CMEK

Pour vérifier que la protection CMEK fonctionne, vous pouvez désactiver la clé que vous avez utilisée pour activer pour une fonction, puis essayer de déclencher la fonction :

  1. Désactivez la clé utilisée pour protéger votre fonction.

  2. Essayez d'afficher le code source associé à cette fonction. La tentative doit échouer.

  3. Essayez de déclencher la fonction protégée par CMEK. La tentative doit échouer.

  4. Après avoir vérifié que la protection CMEK fonctionne, activez la clé.

La protection CMEK de la fonction est maintenant confirmée.

Étape suivante