Par défaut, Cloud Run chiffre les contenus client au repos. Cloud Run gère 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 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 Cloud Run est semblable à l'utilisation 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).
Vous devez tenir compte des points suivants :
- Les métadonnées des fichiers, telles que le chemin d'accès, ne sont pas chiffrées.
- Les métadonnées du service Cloud Run, telles que les variables de nom ou d'environnement, ne sont pas chiffrées à l'aide de la clé fournie, mais avec une clé appartenant à Google et gérée par Google.
- Lors de l'exécution, la mémoire et le contenu des fichiers ne sont pas chiffrés.
- Si une clé CMEK est désactivée, les nouvelles instances de révisions Cloud Run existantes qui utilisent cette clé ne démarrent pas.
- Si une clé CMEK est désactivée, le déploiement d'une nouvelle révision Cloud Run échouera, sauf si une nouvelle clé valide est utilisée.
Quotas Cloud KMS et Cloud Run
Vous pouvez définir votre CMEK sur l'un des niveaux de protection disponibles pour indiquer comment les opérations de chiffrement sont effectuées. Lorsque vous utilisez des clés de chiffrement gérées par le client (CMEK) dans Cloud Run, vos projets peuvent consommer des quotas de requêtes de chiffrement Cloud KMS. Par exemple, les dépôts chiffrés avec CMEK peuvent utiliser ces quotas pour chaque importation ou téléchargement.
Les opérations de chiffrement et de déchiffrement utilisant des clés CMEK affectent les quotas de Cloud KMS de différentes manières :
- Pour les clés logicielles CMEK générées dans Cloud KMS, aucun quota Cloud KMS n'est consommé.
- Pour les clés CMEK matérielles (parfois appelées clés Cloud HSM), les opérations de chiffrement et de déchiffrement sont décomptées des quotas Cloud HSM dans le projet qui contient la clé.
- Pour les clés CMEK externes (parfois appelées clés Cloud EKM), les opérations de chiffrement et de déchiffrement sont décomptées des quotas Cloud EKM dans le projet qui contient la clé.
Pour en savoir plus, consultez la page Quotas Cloud KMS.
Impact de la fonctionnalité CMEK sur le comportement de l'autoscaling
Le comportement d'autoscaling attendu pour votre service Cloud Run peut être affecté lorsque vous utilisez des clés de chiffrement gérées par le client. Par exemple, la latence de démarrage des nouvelles instances peut augmenter en raison des délais de communication avec les systèmes de gestion de clés externes pour les opérations de clés.
Le tableau suivant montre les changements de comportement possibles liés à l'utilisation de la fonctionnalité CMEK :
Opération CMEK | Comportement d'autoscaling |
---|---|
Clé désactivée/détruite/révoquée | Les nouvelles instances ne démarrent pas. |
Impossible de contacter le gestionnaire de clés externe | Si la requête de clé peut être relancée, aucune instance n'est arrêtée lors des nouvelles tentatives et aucune nouvelle instance ne démarre. Le scaling horizontal peut prendre plus de temps que prévu. Si la requête de clé ne peut pas être relancée, aucune nouvelle instance n'est démarrée et les instances en cours d'exécution sont arrêtées après un délai d'attente. |
Quota KMS dépassé | Si ce quota est dépassé, des erreurs RESOURCE_EXHAUSTED sont consignées et les nouvelles instances ne démarrent pas. Pour résoudre ce problème, vous pouvez demander un quota supplémentaire. |
Avant de commencer
Autoriser Cloud Run à accéder à une clé
Pour utiliser CMEK pour Cloud Run, procédez comme suit :
Configurez Artifact Registry pour utiliser CMEK.
En utilisant le guide de démarrage rapide pour Docker d'Artifact Registry comme référence, créez un dépôt Docker pour y transférer une image.
Utilisez une clé symétrique Cloud KMS existante ou créez une clé symétrique.
Pour autoriser Cloud Run à accéder à la clé, accordez à l'agent de service Cloud Run le rôle Chiffreur/Déchiffreur de CryptoKeys Cloud KMS :
Console
Accédez à la page Clés de chiffrement.
Cliquez sur le trousseau de clés pour ouvrir la page de la liste des clés.
Sélectionnez la clé, puis cliquez sur Ajouter une entité principale dans l'onglet des autorisations situé à droite.
Dans le champ Nouvelles entités principales, copiez l'adresse e-mail de l'agent de service Cloud Run. Elle porte le suffixe suivant :
PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com.
Dans le champ Sélectionner un rôle, sélectionnez Chiffreur/Déchiffreur de CryptoKeys Cloud KMS.
Cliquez sur Enregistrer.
gcloud
Exécutez la commande
gcloud kms
suivante :gcloud kms keys add-iam-policy-binding KEY_NAME \ --keyring=KEYRING \ --location=LOCATION) \ --member serviceAccount:PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com \ --role='roles/cloudkms.cryptoKeyEncrypterDecrypter'
Remplacer
- KEY_NAME par le nom de votre clé.
- KEYRING par le nom de votre trousseau de clés.
- LOCATION par le nom de votre région.
- PROJECT_NUMBER par le numéro du projet dans lequel vous souhaitez déployer le service Cloud Run.
Vous devez disposer des autorisations nécessaires pour administrer les ressources Cloud KMS du projet Google Cloud afin d'accorder le rôle IAM
roles/cloudkms.cryptoKeyEncrypterDecrypter
. Seuls les membres IAM dotés du rôle de propriétaire (roles/owner
) ou d'administrateur Cloud KMS (roles/cloudkms.admin
) peuvent accorder ou révoquer l'accès aux ressources Cloud KMS.
Configurer le chiffrement CMEK pour un service Cloud Run
Tout changement de configuration entraîne la création d'une révision. Les révisions ultérieures obtiennent aussi automatiquement le même paramètre de configuration, à moins que vous ne le mettiez explicitement à jour.
Console
Dans la console Google Cloud, accédez à Cloud Run :
Cliquez sur Déployer un conteneur et sélectionnez Service pour configurer un nouveau service. Si vous configurez un service existant, cliquez sur celui-ci puis sur Modifier et déployer la nouvelle révision.
Si vous configurez un nouveau service, remplissez la page initiale des paramètres du service, puis cliquez sur Conteneur(s), volumes, mise en réseau et sécurité pour développer la page de configuration du service.
Cliquez sur l'onglet Sécurité.
- Sous Chiffrement :
- Sélectionnez Clé de chiffrement gérée par le client (CMEK).
- Dans le menu Sélectionner une clé gérée par le client, choisissez l'une des options suivantes :
Sélectionnez Changer de projet si vous devez utiliser une clé provenant d'un autre projet. Vous pouvez référencer une clé d'un autre projet si le compte de service de votre projet peut accéder à la clé pour les opérations de chiffrement et de déchiffrement.
Sélectionnez Saisir la clé manuellement pour saisir le secret d'un projet, au format suivant :
projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME
.- Accédez à la page Clés de chiffrement.
- Cliquez sur le trousseau de clés.
- Sélectionnez le nom du trousseau de clés choisi, puis cliquez sur Actions.
- Sélectionnez Copier le nom de la ressource dans le menu et collez-le dans le champ Nom de ressource de la clé à l'étape précédente.
- Dans le menu du Action en cas de révocation de clé, choisissez l'une des options suivantes :
Empêcher la nouvelle instance de conteneur : aucune nouvelle instance ne démarre après la révocation de la clé CMEK.
Arrêter dès que possible : aucune nouvelle instance ne démarre et les instances existantes s'arrêtent après la révocation de la clé CMEK.
Délai d'arrêt personnalisé : spécifiez le nombre d'heures avant l'arrêt du service.
Pour copier et coller le nom de la ressource d'un autre projet auquel vous avez accès, procédez comme suit :
- Sous Chiffrement :
Cliquez sur Créer ou Déployer.
gcloud
Pour définir une clé sur un service, utilisez l'une des commandes suivantes :
gcloud run deploy SERVICE \ --image IMAGE_URL \ --key KEY \ --post-key-revocation-action-type KEY_REVOCATION_ACTION --encryption-key-shutdown-hours SHUTDOWN_HOURS
gcloud run services update SERVICE --key KEY --post-key-revocation-action-type KEY_REVOCATION_ACTION --encryption-key-shutdown-hours SHUTDOWN_HOURS
Remplacer
- SERVICE par le nom de votre service.
- IMAGE_URL par une référence à l'image de conteneur, par exemple
us-docker.pkg.dev/cloudrun/container/hello:latest
. Si vous utilisez Artifact Registry, le dépôt REPO_NAME doit déjà être créé. L'URL se présente sous la forme suivante :LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
- KEY par le nom complet de la clé, au format suivant :
projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME
. - KEY_REVOCATION_ACTION par
shut-down
ouprevent-new
, en fonction de vos préférences de révocation de clé. - SHUTDOWN_HOURS par le délai d'arrêt avant la fermeture du service après la révocation.
YAML
Si vous créez un service, ignorez cette étape. Si vous mettez à jour un service existant, téléchargez sa configuration YAML :
gcloud run services describe SERVICE --format export > service.yaml
Mettez à jour les annotations CMEK suivantes avec les valeurs souhaitées :
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/encryption-key: projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME run.googleapis.com/post-key-revocation-action-type: KEY_REVOCATION_ACTION run.googleapis.com/encryption-key-shutdown-hours: SHUTDOWN_HOURS name: REVISION
Remplacer
- SERVICE par le nom de votre service Cloud Run ;
- PROJECT_NAME par le nom du projet dans lequel la clé a été créée.
- LOCATION par l'emplacement dans lequel la clé a été créée. Doit correspondre à l'emplacement du service Cloud Run.
- KEYRING_NAME par le nom du trousseau de clés.
- KEY_NAME par le nom de la clé.
- KEY_REVOCATION_ACTION par
shut-down
ouprevent-new
, en fonction de vos préférences de révocation de clé. - SHUTDOWN_HOURS par le délai d'arrêt avant la fermeture du service après la révocation.
- REVISION par un nouveau nom de révision ou supprimez-le (le cas échéant). Si vous indiquez un nouveau nom de révision, il doit répondre aux critères suivants :
- Commencer par
SERVICE-
- Ne contenir que des lettres minuscules, des chiffres et
-
- Ne pas se terminer par
-
- Ne pas dépasser 63 caractères
- Commencer par
Remplacez la configuration du service en utilisant la commande suivante :
gcloud run services replace service.yaml
Afficher les paramètres de sécurité
Pour afficher les paramètres actuels de sécurité pour votre service Cloud Run, procédez comme suit :
Console
Dans la console Google Cloud, accédez à Cloud Run :
Cliquez sur le service qui vous intéresse pour ouvrir la page Informations sur le service.
Cliquez sur l'onglet Révisions.
Dans le panneau de détails situé à droite, le paramètre de sécurité est répertorié sous l'onglet Sécurité.
gcloud
Exécutez la commande suivante :
gcloud run services describe SERVICE
Recherchez le paramètre de sécurité dans la configuration renvoyée.
Tester la révocation des CMEK
Exécutez la commande suivante pour vérifier que le service est accessible :
curl SERVICE_URL
Remplacez SERVICE_URL par l'URL du service. Vous pouvez la trouver dans l'interface utilisateur de la console après le déploiement : l'URL du conteneur s'affiche à côté du texte URL :.
Attendez que s'écoule le délai que vous avez spécifié pour SHUTDOWN_HOURS. Si vous ne l'avez pas spécifié, réactivez votre clé, puis modifiez ou redéployez votre service en définissant la valeur sur le minimum d'une heure.
Après avoir attendu la durée spécifiée pour SHUTDOWN_HOURS, exécutez à nouveau la commande suivante et vérifiez que le service n'est plus accessible :
curl SERVICE_URL
Comprendre les journaux d'audit et les messages d'erreur
Si vous êtes responsable de la surveillance des journaux d'audit, l'une de vos tâches peut consister à vérifier les opérations CMEK dans votre service Cloud Run. Dans ce cas, vous devez comprendre les journaux d'audit associés.
Si vous êtes responsable du traitement et de la correction des erreurs d'exécution pour votre service Cloud Run, vous devrez peut-être résoudre les erreurs CMEK consignées lors du fonctionnement du service Cloud Run.
Les sections suivantes fournissent les informations nécessaires pour effectuer les tâches ci-dessus.
Journaux d'audit
Les journaux d'audit KMS fournissent une piste d'audit pour chaque opération effectuée avec une clé. Pour les services Cloud Run sur lesquels l'option CMEK est activée, Cloud Run ajoute un contexte d'appelant spécifique à Cloud Run qui détaille la raison pour laquelle le système a accédé à la clé client. Le tableau suivant répertorie les contextes que vous pouvez rencontrer dans les journaux d'audit :
Motif de l'accès à la clé | Description |
---|---|
Decrypting CMEK-encrypted layer during container clone start. |
Consigné chaque fois qu'une nouvelle instance est démarrée. |
Encrypting a newly created data-encryption-key w/ the customer-managed-encryption-key. |
Consigné lors du déploiement d'un service avec CMEK, lorsque la clé CMEK est encapsulée par une clé KMS. |
Decrypting an existing encrypted data-encryption-key, under the same customer-managed-encryption-key, to be used to encrypt container contents. |
Consigné au démarrage d'une nouvelle instance, ce qui nécessite un déchiffrement de l'image. |
Performing an encrypt operation on dummy data to check the customer-managed-encryption-key status and access. |
Consigné chaque fois qu'une vérification de validation est effectuée sur la clé, ce qui arrive régulièrement. |
Performing a decrypt operation on dummy data to check the customer-managed-encryption-key status and access. |
Consigné chaque fois qu'une vérification de validation est effectuée sur la clé, ce qui arrive régulièrement. |
Pour en savoir plus sur le format et le contenu des journaux d'audit, consultez la page Journaux d'audit KMS.
Messages d'erreur
Notez que les messages d'erreur fournis par un gestionnaire de clés externe sont directement transmis aux journaux Cloud Run de votre service.
Le tableau suivant répertorie les messages d'erreur liés aux CMEK que vous pouvez rencontrer, accompagnés de descriptions et de solutions possibles.
Message | Description |
---|---|
User's service account does not have CMEK decrypter permission. Service account: %s |
Solution : Autorisez le service à accéder à la clé. |
User's KMS operation quota has been exceeded. CMEK key: %s |
Le service avec CMEK a dépassé les quotas KMS. Solution : Demandez un quota KMS plus élevé |
User's CMEK key has been disabled. CMEK key: %s |
La clé CMEK a été révoquée. Solution : Modifiez la clé CMEK du service et redéployez-le. |
User's CMEK key has been destroyed. CMEK key: %s |
La clé CMEK a été supprimée. Solution : Modifiez la clé CMEK du service et redéployez-le. |
User's CMEK key has been scheduled for deletion. CMEK Key: %s |
La suppression de la clé CMEK a été programmée. Solution : Modifiez la clé CMEK du service et redéployez-le. |
Étape suivante
- En savoir plus sur les autorisations et rôles dans Cloud KMS.
- Créez une clé.
- Journaux d'audit