Résoudre les problèmes liés au 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 mise à jour

Lorsque vous mettez à jour la configuration de chiffrement du chiffrement des secrets au niveau de la couche application, GKE doit réécrire tous les objets Secret dans le cluster Kubernetes. GKE s'assure ainsi que tous les secrets sont chiffrés par la nouvelle clé Cloud KMS ou qu'ils sont écrits non chiffrés si vous choisissez cette configuration.

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

  • Le plan de contrôle Kubernetes est temporairement indisponible pendant la mise à jour.
  • Un paramètre AdmissionWebhook défini 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.

Tant que l'opération de mise à jour n'est pas terminée, n'interagissez pas avec les clés Cloud KMS mises à jour ni avec les clés Cloud KMS précédentes.

Champs de débogage

Les nouveaux clusters GKE exécutant la version 1.29 ou ultérieure contiennent des champs supplémentaires qui vous aident à suivre les mises à jour de Cluster.DatabaseEncryption et vous aident à récupérer après é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 du 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 mise à jour la plus récente. 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.

Reportez-vous au champ LastOperationErrors pour plus d'informations.

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 affichée dans DatabaseEncryption.KeyName. Il s'agit généralement de la seule clé utilisée par le cluster.

Toutefois, 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 un échec de mise à jour

Pour récupérer un échec de mise à jour, procédez comme suit :

  1. Examinez le message d'erreur et corrigez les problèmes indiqués.
  2. Effectuez une nouvelle tentative de mise à jour en exécutant la commande ayant échoué, par exemple gcloud container clusters update ... --database-encryption-key. Nous vous recommandons d'effectuer une nouvelle tentative avec la même requête de mise à jour que celle que vous avez émise à l'origine ou de rétablir le cluster à son état précédent. GKE peut ne pas être en mesure de passer à un autre état de clé ou de chiffrement s'il ne parvient 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 fait référence à une ou plusieurs clés Cloud KMS, examinez la configuration de vos clés 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 de clés.