Aller au contenu

La sécurité Kubernetes, c'est facile avec l'operateur Trivy

La sécurité informatique est cruciale, en particulier dans les infrastructures Kubernetes. Voyons ensemble comment Trivy, un outil open-source, et sa version "Operator" permettent de démarrer rapidement et facilement.

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.
Vue d'ensemble du déploiement de Trivy Operator - Source: Trivy Operator Documentation

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.

Le résultat d'une commande Kubectl pour récupérer les données de rapport de vulnérabilité indiquant les nombre et les niveau de criticité des vulnérabilité

Mais également avec des outils comme K9s, ou KubeLens.

La visibilité des alertes en utilisant l'outil k9s

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 :

serviceMonitor:
  # enabled determines whether a serviceMonitor should be deployed
  enabled: true

Ajout de l'activation du service monitor dans le chart Helm de Trivy

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.

Exemple d'utilisation du dashboard grafana pour trivy. Source: Grafana dashboards

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é.

Dernier