Introduction

La plateforme Kubernetes permet de déployer des applications facilement. Cependant, pour sécuriser une application déployée sur un Kubernetes, il est nécessaire de réaliser quelques configurations supplémentaires.

Dans cet article, nous allons voir quelles sont les bonnes pratiques de déploiement des applications sur un cluster Kubernetes EKS.

IAM role and services accounts

Lorsque l'on déploie des applications sur un cluster Kubernetes EKS, on peut avoir accès à différents informations telles que :

Dans ces cas là, nous allons avoir besoin de s'authentifier auprès d'AWS pour pouvoir accéder à ces services. Nous pourrions ajouter les informations de connexion via des secrets Kubernetes et automatiser l'accès à ces configurations ou mots de passes au lancement du Pod (avec un script shell par exemple). Cependant, cela ne serait pas la manière la plus sécurisée d'accéder et d'utiliser les configurations.

À la place, nous allons mettre en place le schéma ci-dessous :

secrets-driver.png

Dans ce schéma on peut voir :

  1. Nous déployons une application dans le namespace application

  2. Lors du déploiement nous définissons un secret et une resource customisée nommée SecretProviderClass (ajouté lors que l'on installe le CSI driver). Cette resource customisée définit quel secret (hébergé sur l'AWS secret Manager) nous voulons avoir.

    Cette ressource va utiliser un service account Kubernetes pour accéder au secret. En background, ce service account a les roles IAM d'accès à un role IAM.

  3. Précédemment, une policy IAM a été attachée à ce role IAM permettant à celui-ci d'accéder au ressources AWS nécessaires (par exemple un secret dans le service managé AWS Secrets Manager).