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

Cette page fournit des informations supplémentaires sur la protection de vos données avec des clés de chiffrement gérées par le client (CMEK) pour les fonctions créées à l'aide de commandes gcloud functions ou de l'API Cloud Functions v2.

Pour une description détaillée de CMEK, y compris la configuration manuelle, l'utilisation d'Autokey et le test de la protection CMEK, consultez la documentation Cloud Run.

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.

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)

  • 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 Google Cloud console:
    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, exécutez la commande suivante:

gcloud functions deploy FUNCTION \
    --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. Vous pouvez éventuellement activer les règles d'administration CMEK pour forcer toutes les nouvelles fonctions à être compatibles avec CMEK.

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é.