Qu'est-ce que cette certification ?

La Certified Kubernetes Security Specialist ou CKS est la dernière certification à ce jour pour Kubernetes, elle a pour but d'évaluer vos connaissances sur la mise en place d'un cluster et l'ensemble des bonnes pratiques, aussi bien au niveau de l'infrastructure que les objets Kubernetes, avec plusieurs grands thèmes fortement liés à la sécurité.

Cette certification est pour moi la plus dure des trois, aussi bien par les domaines couverts, mais aussi par le temps assez restreint pour terminer l'ensemble des exercices. Par exemple, j'ai pu terminer l'ensemble des exercices (15 questions) sans forcément tous les tester alors qu'il ne me restait environ que cinq petites minutes. Coriace non ?

Pour réussir l'examen, vous devez avoir un taux de réussite de 67 % sur 15 à 20 questions.

Pour ceux qui ont l'habitude de se tester sur killer.sh, j'ai trouvé la certification assez proche du niveau de ce simulateur. Même si killer.sh creuse beaucoup plus certaines parties, je vous recommanderai d'avoir un "high score" pour passer l'examen sereinement.

Connaissances requises

Comme les certifications précédentes, plusieurs domaines sont évalués avec un poids associé qui représente la part de ce domaine dans l'examen.

  • Cluster setup (10%) : Mettre en place des NetworkPolicy, utiliser kube-bench pour sécuriser l'ensemble des composants d'un cluster ;
  • Cluster Hardening (15%) : Modifier l'accès à l'API, mettre en place le RBAC au niveau cluster et utilisateurs, gestion des services accounts ainsi que la mise à jour du cluster ;
  • System Hardening (15%) : Utilisation de seccomp ou AppArmor pour restreindre l'exécution d'un conteneur ;
  • Minimize Microservice Vulnerabilities (20%) : Utiliser Open Policy Agent (OPA) pour implémenter des règles de contrôle au sein d'un cluster, gérer les Secrets et les monter au sein d'un Pod, mettre en place une RuntimeClass avec gvisor et savoir créer un conteneur proxy au sein d'un pod pour implémenter le mTLS ;
  • Supply Chain Security (20%) : Connaître les bonnes pratiques à mettre en oeuvre au sein d'un Dockerfile, mettre en place un ImagePolicyWebhook pour la vérification des images, scanner des images afin de repérer les dernières failles critiques avec trivy ;
  • Monitoring, Logging and Runtime Security (20%) : Savoir identifier un processus qui s'exécute dans un conteneur, rendre un conteneur immuable, savoir utiliser falco pour détecter les comportements suspects de conteneurs et implémenter de nouvelles règles.

La difficulté de cette certification réside aussi dans le fait qu'il y a beaucoup d'outils tiers à savoir manipuler. Par exemple, vous aurez besoin de trivy pour analyser vos images et savoir ou non si celle-ci contient des failles de sécurité. Lors de l'examen vous avez le droit d'ouvrir un onglet additionnel avec la documentation de l'outil en question.

Inutile de préciser aussi que les domaines couverts par la CKAD et CKA vous seront toujours utiles dans l'ensemble des exercices de l'examen.

Ce que j'ai utilisé

Si vous souhaitez passer cette certification, je ne peux que vous conseiller ce cours Udemy par Kim Wüstkamp (le créateur de killer.sh) : Kubernetes CKS 2021 Complete Course - Theory - Practice. Il vous aidera à balayer l'ensemble des chapitres de l'examen tout en vous faisant pratiquer sur un cluster Kubeadm à installer chez vous.

Une fois que vous avez terminé ce cours, il est recommandé de s'entrainer (encore une fois) sur le simulateur killer.sh afin d'évaluer votre niveau. Comme pour les CKAD ou CKA, vous avez le droit à deux tentatives en achetant votre examen.

N'hésitez pas à refaire les exercices, ainsi que les questions bonus pour couvrir un maximum de domaines. Comme dit plus haut, l'examen final est une vraie course de rapidité, il vous faudra savoir résoudre les exercices sans perdre votre temps !

Les commandes à retenir

Le but de cette partie est de lister l'ensemble des commandes à garder en tête pour gagner en rapidité lors de l'examen final.

N'hésitez pas à lire les articles sur la CKAD et CKA qui contiennent aussi plein de petites astuces qui ne seront pas reprises ici.

NetworkPolicy

Pour ce qui est des NetworkPolicy, je vous conseille de vous baser sur le squelette de la documentation qui permet de résoudre les différents cas d'usage (ipBlock, namespaceSelector, podSelector).

Généralement, il vous sera demandé de faire une règle qui interdit les flux aussi bien ingress que egress, rien de plus simple, la documentation fournit un exemple déjà tout préparé.

kube-bench

Si vous devez sécuriser votre cluster, il vous sera demandé d'utiliser la commande kube-bench qui va vous faire des recommandations sur les manoeuvres à effectuer sur différents composants du cluster.

Généralement, on vous demande de résoudre quelques règles sur le master ou un worker spécifique avec le numéro de la règle (par exemple 1.1.2).

Pour cela, vous pouvez faire (dans le cas du master) :

kube-bench master | grep "1.1.2" -A10 # 1.1.2 est la règle à rechercher

kube-bench va alors charger les règles du master et le grep va récupérer la règle ainsi que la solution pour obtenir "PASS".

AppArmor

La documentation Kubernetes contient l'ensemble des informations nécessaires à la mise en place d'AppArmor sur un Pod. Néanmoins, quelques commandes pratiques :

# Sur le worker
# Charger un profil
mv <mon_profil> /etc/apparmor.d/
apparmor_parser -q /etc/apparmor.d/<mon_profil>

# Vérifier que le profil est bien chargé
cat /sys/kernel/security/apparmor/profiles

Et voici l'annotation à mettre au niveau du Pod, faites très attention surtout si vous faites un Deployment !

container.apparmor.security.beta.kubernetes.io/<mon_conteneur>: <mon_profil>

Trivy

Trivy est un outil open source qui permet de scanner les images et de fournir un tableau avec les failles de sécurité avec leur criticité.

On vous demandera lors de l'examen de regarder si les images contiennent ou non certaines failles de sécurité ou un numéro spécifique, pour cela, cette commande peut s'avérer utile :

trivy i <mon_image> | grep <numéro_faille_de_sécurité>

Falco

Lorsque Falco est installé sur la machine et se sera probablement le cas lors de l'examen, il écrit dans le fichier /var/log/syslog, à vous d'utiliser la commande grep pour récupérer les informations souhaitées.

Si vous devez modifier les messages associés au règles par défaut de Falco, vous pouvez retrouver via ce lien l'ensemble des paramètres à utiliser. Vous pouvez retrouver les différents paramètres un peu plus loin dans la documentation.

Audit

La documentation Kubernetes donne un très bon exemple de fichier de configuration d'audit, vous pouvez vous en inspirer et l'adapter à votre convenance.

N'oubliez pas le paramètre --audit-policy-file avec l'endroit où se trouve votre fichier au niveau du kube-apiserver ainsi que le montage de volume pour votre fichier de configuration. Enfin redémarrez le kube-apiserver pour que la configuration soit prise en compte.

ImagePolicyWebhook

La mise en place de ImagePolicyWebhook au sein du kube-apiserver est bien expliqué dans cette partie de la documentation en se basant sur le squelette ci-dessous :

apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
- name: ImagePolicyWebhook
  configuration:
    imagePolicy:
      kubeConfigFile: <path-to-kubeconfig-file>
      allowTTL: 50
      denyTTL: 50
      retryBackoff: 500
      defaultAllow: true # Mettre à false pour tester la bonne mise en place de l'ImagePolicyWebhook

Comme pour l'audit, il faut vérifier que ce fichier est bien monté au niveau d'un volume du kube-apiserver, mettre le paramètre --admission-control-config-file, et en plus, ajouter ImagePolicyWebhook dans les admission-plugins. N'oubliez pas de redémarrer le kube-apiserver.

La CKS, la certification le plus difficile ?

La CKS comme dit plus haut est un condensé en terme de difficulté des deux premiers examens (CKAD et CKS), son périmètre est très large et le temps est vraiment très très précieux !

Entraînez-vous, essayez d'avoir de bons réflexes avec la documentation pour savoir où chercher, mais surtout, ne paniquez pas ! Si une question se révèle trop difficile ou que vos tests ne fonctionnent pas, mettez-la de côté et essayez d'y revenir un peu plus tard s'il vous reste du temps.

Et comme toujours, bonne chance à celles et ceux qui souhaitent passer cette certification ! :-)