Résoudre les problèmes de chiffrement des secrets au niveau de la couche d'application


Cette page explique comment résoudre les problèmes liés au chiffrement des secrets au niveau de la couche d'application dans Google Kubernetes Engine (GKE).

Échec de la mise à jour

Lorsque vous mettez à jour la configuration du chiffrement des secrets au niveau de la couche d'application, GKE doit réécrire tous les objets Secret du cluster Kubernetes. GKE effectue cette opération pour s'assurer que tous les secrets sont chiffrés par la nouvelle clé Cloud KMS ou écrits de manière non chiffrée si c'est ce que vous configurez.

Cette opération de mise à jour peut échouer pour l'une des conditions suivantes:

  • Le plan de contrôle Kubernetes est temporairement indisponible pendant la mise à jour.
  • Une règle AdmissionWebhook définie par l'utilisateur empêche GKE de mettre à jour les objets Secret.
  • La clé Cloud KMS mise à jour ou précédente est désactivée avant la fin de l'opération de mise à jour.

N'interagissez pas avec les clés Cloud KMS mises à jour ou précédentes tant que l'opération de mise à jour n'a pas abouti.

Champs de débogage

Les nouveaux clusters GKE exécutant les versions 1.29 et ultérieures contiennent des champs supplémentaires qui vous aident à suivre les mises à jour de Cluster.DatabaseEncryption et à récupérer en cas d'échec.

Les étapes suivantes ne s'appliquent qu'aux clusters dans lesquels le champ DatabaseEncryption.CurrentState n'est pas vide. Si le champ CurrentState est vide, la fonctionnalité n'est pas encore activée sur cette version de cluster.

Les limites suivantes s'appliquent à ces champs :

  • Elles sont exclusivement en sortie, ce qui signifie que vous ne pouvez pas les définir lors des requêtes de création ou de mise à jour du cluster.

Champ CurrentState

Vous pouvez inspecter l'état actuel d'une opération de mise à jour DatabaseEncryption en examinant le champ CurrentState dans Cluster.DatabaseEncryption.

Valeur de CurrentState Description

CURRENT_STATE_ENCRYPTED

CURRENT_STATE_DECRYPTED

La dernière opération de mise à jour a réussi. Aucune autre action de votre part n'est requise. Vous pouvez supprimer toutes les clés précédemment utilisées.

CURRENT_STATE_ENCRYPTION_PENDING

CURRENT_STATE_DECRYPTION_PENDING

La mise à jour est en cours.

CURRENT_STATE_ENCRYPTION_ERROR

CURRENT_STATE_DECRYPTION_ERROR

Une erreur s'est produite lors de la dernière mise à jour. Ne désactivez ou ne détruisez pas les clés Cloud KMS précédemment utilisées, car elles pourraient encore être utilisées par GKE.

Pour en savoir plus, reportez-vous au champ LastOperationErrors.

Champ LastOperationErrors

Lorsqu'une opération de mise à jour échoue, l'erreur sous-jacente du plan de contrôle GKE s'affiche dans le résultat de gcloud container clusters update.

Les messages d'erreur des deux dernières opérations de mise à jour ayant échoué sont également disponibles dans Cluster.DatabaseEncryption.LastOperationErrors.

Champ DecryptionKeys

La clé Cloud KMS utilisée pour les nouvelles opérations de chiffrement est indiquée dans DatabaseEncryption.KeyName. Il s'agit généralement de la seule clé utilisée par le cluster.

Cependant, DatabaseEncryption.DecryptionKeys contient des clés supplémentaires qui sont également utilisées par le cluster si une mise à jour est en cours ou après un échec.

Récupération après échec d'une mise à jour

Pour récupérer une mise à jour ayant échoué, procédez comme suit:

  1. Examinez le message d'erreur et résolvez les problèmes signalés.
  2. Réessayez d'exécuter la requête de mise à jour en exécutant la commande ayant échoué, telle que gcloud container clusters update ... --database-encryption-key. Nous vous recommandons d'effectuer une nouvelle tentative avec la requête de mise à jour initiale ou de rétablir l'état précédent du cluster. GKE risque de ne pas pouvoir passer à un autre état de clé ou de chiffrement s'il ne peut pas lire un ou plusieurs secrets.

Les sections suivantes répertorient les raisons les plus courantes des erreurs.

Erreur de clé Cloud KMS

Si le message d'erreur contient une référence à une ou plusieurs clés Cloud KMS, examinez la configuration de votre clé Cloud KMS pour vous assurer que les versions de clé appropriées sont utilisables.

Par exemple, si l'erreur indique qu'une clé Cloud KMS a été désactivée ou détruite, réactivez la clé ou la version de clé.

Impossible de mettre à jour le secret

L'erreur suivante peut se produire si l'API Kubernetes a refusé la requête de mise à jour en raison d'un webhook d'admission:

error admission webhook WEBHOOK_NAME denied the request

Pour résoudre cette erreur, supprimez le webhook ou modifiez-le afin que GKE puisse mettre à jour les secrets dans tous les espaces de noms lors des mises à jour des clés.