Quatre étapes pour renforcer la sécurité d’Amazon EKS
Kamil Potrec
21 juillet 2021
0 minutes de lectureDans la première partie de cette série d’articles, nous avons exploré le déploiement d’Amazon EKS avec Terraform et examiné comment sécuriser la mise en œuvre initiale de RBAC ainsi que le service de métadonnées d’instance. Dans ce deuxième article, nous allons découvrir d’autres bonnes pratiques pour renforcer la sécurité d’Amazon EKS, notamment l’importance des rôles IAM dédiés à la livraison continue, d’une architecture multi-comptes pour isoler les clusters Amazon EKS et du chiffrement de vos secrets dans le plan de contrôle. Enfin, nous vous montrerons comment intégrer des outils d’analyse statique à vos pipelines de livraison continue afin de détecter ces problèmes avant qu’ils n’atteignent les environnements de production.
Suivre les personnes qui ont déployé le cluster
Le service Amazon EKS s’intègre au service Identity and Access Management afin d’authentifier les utilisateurs auprès du cluster. Les décisions d’autorisation sont prises par le modèle RBAC natif de Kubernetes. La configuration RBAC est associée aux identités IAM via aws-auth ConfigMap. Toutefois, une association particulière n’apparaît dans aucun fichier ni paramètre de configuration. L’entité IAM utilisée pour créer le cluster est automatiquement associée au groupe Kubernetes intégré system:masters. Ce comportement est bien documenté dans la documentation utilisateur. Il a néanmoins des conséquences importantes sur l’auditabilité des autorisations du cluster.
Pour illustrer l’impact de cette configuration, nous allons supprimer tous les Roles et les ClusterRoles de notre cluster de démonstration.
Amazon EKS utilise l’authentification par jeton via webhook pour s’intégrer à IAM. Nous pouvons consulter la configuration dans les arguments du serveur d’API.
AWS IAM dispose d’identifiants uniques qui peuvent être utilisés dans certains services afin d’éviter les erreurs de configuration liées à la réutilisation des noms. La documentation d’Amazon EKS ne précise pas clairement si l’autorisation system:masters est liée à l’identifiant unique de l’entité ou à son nom convivial. Pour vérifier si la suppression de l’entité d’origine révoque toutes les autorisations sur le cluster, nous avons supprimé le rôle temporaire, puis nous l’avons recréé.
Comme vous pouvez le constater, le nouveau rôle est complètement différent, comme l’indique le RoleId. Pourtant, le service d’authentification Amazon EKS utilise le nom convivial du rôle pour nous accorder les mêmes autorisations system:masters.
Pour atténuer efficacement ce problème, utilisez un système de déploiement centralisé, attribuez un rôle dédié aux déploiements et évitez à tout prix les identifiants personnels. Des outils comme aws-vault peuvent vous aider à gérer de manière sécurisée le passage d’un rôle à l’autre.
Voyons maintenant comment les nœuds s’authentifient auprès du plan de contrôle.
Séparer les clusters dans différents comptes
Amazon EKS exige que chaque nœud soit associé à un profil d’instance incluant les deux politiques suivantes : AmazonEKSWorkerNodePolicy et AmazonEC2ContainerRegistryReadOnly.
Par défaut, ces politiques accordent des privilèges sur toutes les ressources du compte AWS. Cela signifie qu’un pod compromis sur ce cluster pourra répertorier des informations sur toutes les ressources, tous les VPC, sous-réseaux et toutes les images du compte.
Le nœud Amazon EKS a également besoin d’une autre politique gérée, nommée AmazonEKS_CNI_Policy. Cette politique permet au nœud d’allouer des adresses IP et d’effectuer les opérations liées au réseau.
Cette politique permet à l’appelant de modifier la configuration réseau de n’importe quelle instance du compte. AWS recommande de l’associer directement au compte de service Kubernetes aws-node. Par défaut, le module Terraform associe cette politique au profil IAM. Vous pouvez modifier ce comportement en définissant l’attribut attach_worker_cni_policy sur false.
Chiffrez vos secrets
L’un des composants du plan de contrôle gérés par le service Amazon EKS est l’espace de stockage clé-valeur etcd. Le serveur d’API Kubernetes s’en sert pour stocker tous les objets et toutes les configurations. Par défaut, Kubernetes ne chiffre pas les données stockées dans cet espace. AWS est responsable de la sécurité des composants du plan de contrôle, mais nous pouvons également appliquer une stratégie de défense en profondeur pour mieux protéger nos données.
Le service AWS KMS est l’un des fournisseurs de chiffrement capables d’assurer le chiffrement par enveloppe des objets secrets stockés dans notre cluster. En définissant l’option `cluster_encryption_config`, nous pouvons spécifier une clé KMS qui servira à chiffrer des clés de chiffrement intermédiaires, elles-mêmes utilisées pour chiffrer des objets spécifiques. Cet article de blog d’AWS sur Amazon EKS présente clairement le fonctionnement sous-jacent. Dès lors, toute personne ayant accès à un cluster etcd ne pourra pas lire nos secrets sans également avoir accès à notre clé KMS. L’ensemble du processus est entièrement transparent pour l’utilisateur final.
Détecter les problèmes dans le pipeline de déploiement
L’infrastructure en tant que code nous permet de décrire de manière déclarative l’état souhaité du cluster Amazon EKS. Nous pouvons ainsi détecter statiquement certains de ces problèmes avant tout déploiement.
Dans Terraform, nous pouvons générer un plan de la configuration à déployer.
Ce plan peut être converti au format JSON afin de permettre l’analyse statique de tous les attributs.
Une fois la structure du plan Terraform comprise, nous pouvons utiliser Open Policy Agent et son langage déclaratif pour écrire des tests simples.
Vous pouvez essayer cet exemple simple dans un Rego Playground en ligne.
La rédaction de ces règles peut vite devenir fastidieuse. Elle nécessite d’analyser les structures de sortie de Terraform, d’analyser les fichiers, d’assurer la maintenance des bibliothèques et de présenter les résultats de manière pertinente. C’est là que des produits comme Snyk IaC peuvent vous aider. Voici un exemple d’analyse de sécurité réalisée sur notre déploiement par défaut.
Grâce à l’analyse IaC de Snyk, vous pouvez détecter les problèmes dans votre configuration Terraform avant le déploiement en production et garantir la sécurité de vos environnements de production. Créez gratuitement un compte sur https://app.snyk.io ! Vous pouvez également essayer l’outil de vérification du code gratuit de Snyk pour évaluer rapidement la sécurité de votre code.
Sécurisez votre infrastructure dès la source
Snyk automatise la sécurité et la conformité de l’IaC dans vos workflows, et détecte les ressources dont la configuration a dérivé ou qui sont manquantes.



