La sécurité est essentielle dans toute infrastructure informatique. Dans un environnement Kubernetes, la sécurité est encore plus importante. On peut y retrouver différents types d'application, développées par différentes équipes, et il devient essentiel de pouvoir gérer la sécurité de manière globale.
Trivy est un outil open-source populaire qui est souvent cité comme référence pour scanner les vulnérabilités des images de conteneur. L'outil évolue vite et est également capable de faire des vérifications de conformité sur des fichiers de déploiement (Manifestes Kubernetes, fichier terraform, etc...).
Il y a différentes façons d'utiliser Trivy. Dans cet article, je vous propose de présenter la version "Operator" de Trivy, à installer dans vos clusters. Cette version vous permettra d'avoir une visualisation globale de la sécurité de votre cluster et de la suivre dans le temps.
Installation
Pour installer Trivy, un chart Helm est fourni par Aqua Security, permettant une installation rapide et facile
helm repo add aqua https://aquasecurity.github.io/helm-charts/
helm install trivy-operator aqua/trivy-operator \
--namespace trivy-system \
--create-namespace \
--version 0.19.1
Une fois installé, l'opérateur va directement lancer un scan de votre cluster. A date, voici la liste des scans qui sont lancés par Trivy:
-
Vulnerability Scans: Scan des vulnérabilités dans les pods déployés dans le cluster.
-
ConfigAudit Scans: Audits de configuration automatisés pour les ressources Kubernetes avec des règles prédéfinies ou des politiques personnalisées Open Policy Agent (OPA).
-
Exposed Secret Scans: Scans de la présence de secrets dans les images de conteneur utilisés avec les emplacements des secrets exposés.
-
RBAC scans: Les scans de contrôle d'accès basés sur les rôles (RBAC) fournissent des informations détaillées sur les droits d'accès des différentes ressources installées.
-
K8s core component infra assessment scan: Analyse des paramètres et de la configuration des composants d'infrastructure de base de Kubernetes (etcd, apiserver, scheduler, controller-manager, etc.).
-
k8s outdated api validation: Une vérification configaudit validera si l'API de ressources a été abandonnée et est prévue pour être supprimée.
-
Rapports de conformité:
- Un rapport technique de cybersécurité NSA, CISA Kubernetes Hardening Guidance v1.1 est produit.
- Un rapport technique de cybersécurité CIS Kubernetes Benchmark v1.23 est produit.
- Standards de sécurité Kubernetes pss-baseline et pss-restricted.
Analyse des rapports
Ce qui est intéressant avec Trivy, c'est que les rapports produits se retrouvent dans le cluster sous forme de CRD déployés à côté de vos déploiements Kubernetes.
Il est donc possible de les consulter directement avec vos outils Kubernetes favoris, par exemple, avec Kubectl.
Mais également avec des outils comme K9s, ou KubeLens.
La description de chacune des ressources vous permettra d'avoir plus de détails sur les différentes vulnérabilités remontées, par exemple, pour un déploiement particulier, j'obtiens ce rapport :
Name: daemonset-fluent-bit-fluent-bit
Namespace: default
Labels: [...]
API Version: aquasecurity.github.io/v1alpha1
Kind: VulnerabilityReport
Metadata:
[...]
Report:
Artifact:
Digest: sha256:cd5b76149224aed3f832d34c7020410b3bc49d4b64fd0acb45f6b11c163f2992
Repository: fluent/fluent-bit
Tag: 2.2.0
Os:
Family: debian
Name: 11.8
Registry:
Server: cr.fluentbit.io
Scanner:
Name: Trivy
Vendor: Aqua Security
Version: 0.47.0
Summary:
Critical Count: 1
High Count: 6
Low Count: 27
Medium Count: 10
None Count: 0
Unknown Count: 0
Update Timestamp: 2023-12-06T12:40:08Z
Vulnerabilities:
Fixed Version:
Installed Version: 10.2.1-6
Last Modified Date: 2023-09-14T20:01:00Z
Links:
Primary Link: https://avd.aquasec.com/nvd/cve-2023-4039
Published Date: 2023-09-13T09:15:00Z
Resource: libatomic1
Score: 4.8
Severity: MEDIUM
Target:
Title: gcc: -fstack-protector fails to guard dynamic stack allocations on ARM64
Vulnerability ID: CVE-2023-4039
[...]
Events: <none>
Ce que je trouve particulièrement intéressant dans cette approche est qu'elle permet aux équipes opérationnelles de pouvoir facilement avoir la visibilité de l'état de la sécurité de leur déploiement, sans avoir besoin d'apprendre de nouveaux outils ou de naviguer dans différentes interfaces.
Vision globale et suivi de la sécurité
Mais quand il s'agit de sécurité, il est aussi nécessaire de pouvoir faire un suivi plus global et un suivi dans le temps de notre niveau de sécurité. C'est pourquoi je vous propose maintenant de voir l'intégration de l'opérateur avec Prometheus et Grafana.
Pour activer cette intégration avec Prometheus, le chart Helm propose la configuration du monitoring via la notion de "ServiceMonitor" qui peut être activée en changeant une value de votre chart Helm, comme suit :
Une fois activée, vous pourrez retrouver l'ensemble des métriques de Trivy directement dans votre installation de Prometheus. Voici quelques exemples de requêtes utilisables :
# Ensemble des vulnérabilité présentes dans les images déployées au sein du cluster
sum(trivy_image_vulnerabilities)
# Nombre d'erreurs de configuration au sein de votre cluster présentant un risque de sécurité
sum(trivy_resource_configaudits)
Il existe également un tableau de bord Grafana qui vous permettra directement de reprendre l'ensemble des données remontées par Trivy, accessible ici.
Si vous utilisez Prometheus et Grafana, il y a de fortes chances que vous utilisiez également AlertManager qui vous permet d'envoyer des notifications d'alertes en fonction de vos différentes métriques. Étant donné que Trivy va venir alimenter vos métriques Prometheus, il sera alors aisé pour vous de mettre en place de l'alerting basé sur l'évolution des métriques de sécurité.
Conclusion
Trivy est un outil puissant et complet qui permet de garantir la sécurité des conteneurs Kubernetes. L'intégration de l'opérateur Trivy avec Prometheus et Grafana permet d'obtenir une visibilité globale et un suivi dans le temps de la sécurité de votre cluster. Sa principale force est la mise en place très rapide en utilisant des outils natifs de l'éco-système Kubernetes que vous utilisez probablement déjà.
Comme vous l'avez vu, démarrer avec la mise en place de Trivy et facile et rapide. Mais ce n'est qu'une première étape dans la gestion de la sécurité d'un cluster Kubernetes. Il vous faudra ensuite prendre le temps d'analyser, prioriser et remédier aux différentes anomalies qui ont été remontées.
De plus Trivy permet également une personnalisation poussée des analyses, et vous devrez probablement passer par cette étape pour adapter les résultats à votre politique de sécurité.