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

Par défaut, les fonctions Cloud Run chiffrent le contenu client au repos. Les fonctions Cloud Run gèrent le chiffrement sans intervention de votre part. Cette option est appelée chiffrement par défaut de Google.

Si vous souhaitez contrôler vos clés de chiffrement, vous pouvez utiliser des clés de chiffrement gérées par le client (CMEK) dans Cloud KMS avec des services bénéficiant d'une intégration des CMEK, y compris les fonctions Cloud Run. L'utilisation de clés Cloud KMS vous permet de contrôler leur niveau de protection, leur emplacement, leur calendrier de rotation, leurs autorisations d'utilisation et d'accès, ainsi que leurs limites cryptographiques. Cloud KMS vous permet également de consulter les journaux d'audit et de contrôler les cycles de vie des clés. Au lieu de laisser Google posséder et gérer les clés de chiffrement de clés (KEK) symétriques qui protègent vos données, c'est vous qui vous chargez de cette tâche dans Cloud KMS.

Une fois que vous avez configuré vos ressources avec des clés CMEK, l'accès à vos ressources de fonctions Cloud Run est semblable à celui du chiffrement par défaut de Google. Pour en savoir plus sur les options de chiffrement, consultez Clés de chiffrement gérées par le client (CMEK).

Les types de données de fonctions Cloud Run 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.

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 Run Functions ne s'applique qu'aux ressources Cloud Run 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 ou tout service utilisé par votre fonctions.

La configuration de CMEK pour Cloud Run 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 Run Functions, Artifact Registry et Cloud Storage à accéder à la clé.

    • Pour les fonctions Cloud Run 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 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 Run 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)

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 la console Google Cloud :
    Accéder à la page Cloud KMS

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

  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 évoqués plus tôt pour leur accorder des autorisations tous à la fois.

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

  7. Cliquez sur Enregistrer.

gcloud

Pour chaque compte de service mentionné précédemment, 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 Run 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 Run Functions dans la console Google Cloud :
    Accéder à la page Cloud Run 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 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 Déployer une fonction Cloud Run.

CMEK est activé pour la fonction.

Notez que Cloud Run 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 Run 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