Popeye CLI Part 2

Configuration Avancée : Le Fichier Spinach 🥬

Pour affiner les règles de scan selon votre contexte, Popeye utilise un fichier de configuration appelé "spinach" (clin d'œil à Popeye et ses épinards 😄).

Exemple de Configuration

# spinach.yaml
popeye:
# Seuils de performance
allocations:
cpu:
underPercUtilization: 200 # Alerte si sous-utilisé > 200%
overPercUtilization: 50 # Alerte si sur-utilisé > 50%
memory:
underPercUtilization: 200
overPercUtilization: 50

# Exclusions globales
excludes:
global:
# Exclure tous les namespaces système
fqns: [rx:^kube-]

# Exclure par labels
labels:
managed-by: [helm, argocd]

# Ignorer certains codes d'erreur
codes: ["206", "rx:^41"]

# Configuration par linter
linters:
pods:
instances:
# Ignorer les checks 102 et 105 pour les pods avec app=monitoring
- labels:
app: [monitoring]
codes: [102, 105]

secrets:
instances:
# Ne pas scanner les secrets dans dev
- fqns: [rx:^dev-]

# Registres autorisés
registries:
- gcr.io
- quay.io
- ghcr.io

# Redéfinir la sévérité de certains codes
overrides:
- code: 206
severity: 1 # Info au lieu de Warning

# Utiliser votre config personnalisée
popeye -f spinach.yaml

Intégration DevSecOps : Automatiser les Audits

1. Intégration dans les Pipelines CI/CD

GitHub Actions

name: Kubernetes Security Scan
on:
schedule:
- cron: '0 2 * * *' # Tous les jours à 2h du matin
workflow_dispatch:

jobs:
popeye-scan:
runs-on: ubuntu-latest
steps:
- name: Install Popeye
run: |
wget https://github.com/derailed/popeye/releases/latest/download/popeye_linux_amd64.tar.gz
tar -xzf popeye_linux_amd64.tar.gz
chmod +x popeye

- name: Configure kubectl
uses: azure/k8s-set-context@v1
with:
kubeconfig: ${{ secrets.KUBE_CONFIG }}

- name: Run Popeye
run: |
./popeye -o json --save --output-file report.json --force-exit-zero

- name: Upload Report
uses: actions/upload-artifact@v3
with:
name: popeye-report
path: report.json

- name: Check Critical Issues
run: |
# Parser le rapport et alerter si issues critiques
critical_count=$(jq '.popeye.sanitizers[].issues[] | select(.level==3)' report.json | wc -l)
if [ $critical_count -gt 0 ]; then
echo "❌ $critical_count critical issues found!"
exit 1
fi

2. Déploiement en CronJob Kubernetes

Popeye peut tourner directement dans votre cluster pour des audits réguliers :

apiVersion: batch/v1
kind: CronJob
metadata:
name: popeye-audit
namespace: security
spec:
schedule: "0 */6 * * *" # Toutes les 6 heures
concurrencyPolicy: Forbid
jobTemplate:
spec:
template:
spec:
serviceAccountName: popeye
restartPolicy: Never
containers:
- name: popeye
image: quay.io/derailed/popeye:v0.21.0
args:
- -o
- json
- --save
- --force-exit-zero
resources:
limits:
cpu: 500m
memory: 256Mi
volumeMounts:
- name: reports
mountPath: /tmp
volumes:
- name: reports
persistentVolumeClaim:
claimName: popeye-reports

RBAC Nécessaire : Popeye a besoin de droits de lecture sur les ressources qu'il scanne. Voici le ClusterRole minimal :

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: popeye-reader
rules:
- apiGroups: ["*"]
resources:
- nodes
- namespaces
- pods
- services
- deployments
- statefulsets
- configmaps
- secrets
- serviceaccounts
- roles
- rolebindings
- clusterroles
- clusterrolebindings
- networkpolicies
- ingresses
verbs: ["get", "list"]
- apiGroups: ["metrics.k8s.io"]
resources: ["nodes", "pods"]
verbs: ["get", "list"]

3. Monitoring avec Prometheus + Grafana

Popeye peut exporter ses métriques vers Prometheus via un pushgateway :

popeye --push-gtwy-url http://prometheus-pushgateway:9091

Métriques exportées :

  • popeye_severity_total : Compteurs par niveau de sévérité
  • popeye_code_total : Compteurs par code d'erreur
  • popeye_linter_tally_total : Compteurs par linter
  • popeye_cluster_score : Score global du cluster (0-100)

Un dashboard Grafana exemple est disponible dans le repo officiel.

Interpréter les Résultats : Les Codes d'Erreur

Popeye utilise un système de codes numérotés pour catégoriser les issues. Exemples :

CodeSévéritéDescription
100ErrorNamespace inactif
102ErrorContainer sans resource limits
105WarnImage avec tag latest
106InfoNamespace sans labels
206WarnServiceAccount inutilisé
300ErrorSecret non référencé
400ErrorRBAC ClusterRole non utilisé

Code couleur dans le terminal :

  • Vert (OK) : Aucun problème détecté
  • 🔊 Bleu (Info) : Information à noter
  • 😱 Jaune (Warning) : Problème potentiel à investiguer
  • 💥 Rouge (Error) : Action requise immédiatement

Cas d'Usage Réels : Quand Utiliser Popeye

1. Audit de Sécurité Avant Production

# Scanner le cluster de staging avant la MEP
popeye -n staging -f security-focused-spinach.yaml -o html --save

2. Optimisation des Coûts Cloud

En détectant les ressources sur-allouées ou inutilisées, Popeye vous aide à réduire vos factures :

  • Pods avec des limites CPU/RAM excessives
  • PersistentVolumes non attachés
  • LoadBalancers orphelins

3. Compliance et Gouvernance

Intégrez Popeye dans vos processus de compliance pour garantir que tous les clusters respectent vos standards :

  • Registries d'images autorisés uniquement
  • NetworkPolicies présentes dans tous les namespaces sensibles
  • PSP ou Pod Security Standards appliqués

4. Onboarding et Formation

Pour les équipes qui débutent avec Kubernetes, Popeye sert de guide pédagogique en pointant les mauvaises pratiques en temps réel.

Limitations et Considérations

Ce que Popeye NE fait PAS

  • Analyse de vulnérabilités d'images : Pour ça, utilisez Trivy ou Grype
  • Runtime security : Pas de détection d'anomalies comportementales (voir Falco)
  • Policy enforcement : Popeye ne bloque pas les déploiements (utilisez OPA/Gatekeeper)
  • Modification de ressources : 100% read-only

Bonnes Pratiques d'Utilisation

  1. Commencez avec un scan complet sans exclusions pour avoir une baseline
  2. Créez votre spinach.yaml progressivement en fonction de votre contexte
  3. Automatisez les scans réguliers (quotidien ou au minimum hebdomadaire)
  4. Trackez le score Popeye dans le temps pour mesurer l'amélioration
  5. Combinez avec d'autres outils : Popeye + Trivy + Falco = stack de sécurité solide

Alternatives et Comparaison

OutilTypeFocus PrincipalQuand l'Utiliser
PopeyeLinting RuntimeBest practices & configAudit continu du cluster en prod
KubeLinterLinting StatiqueYAML validationPre-commit, PR reviews
CheckovPolicy as CodeIaC securityScan IaC (Terraform, K8s manifests)
PolarisDashboard WebConfig validationVue d'ensemble graphique
KubescapeSecurity postureNSA/CISA guidelinesCompliance frameworks

Verdict : Popeye excelle dans l'analyse en continu de clusters en production. Pour une approche defense-in-depth, combinez-le avec :

  • Pre-deployment : KubeLinter ou Checkov
  • Runtime : Popeye pour la config, Falco pour les comportements
  • Image scanning : Trivy intégré dans vos pipelines

Conclusion : Un Outil, Zéro Excuses

Popeye CLI élimine l'excuse "on n'a pas le temps de vérifier les configs Kubernetes". Installation en 2 minutes, scan en quelques secondes, et vous obtenez un rapport actionnable sur l'état réel de votre cluster.

Dans une approche DevSecOps mature, l'automatisation de l'audit est non-négociable. Popeye vous permet de :

  • ✅ Détecter les misconfigurations avant qu'elles ne deviennent des incidents
  • ✅ Maintenir un niveau de qualité constant malgré la vélocité des déploiements
  • ✅ Éduquer les équipes via des feedback loops rapides
  • ✅ Réduire la dette technique et les coûts d'infrastructure

Pour Aller Plus Loin

Ressources officielles :

Prochaines étapes :

  1. Installez Popeye sur votre poste
  2. Lancez un premier scan sur un cluster de dev
  3. Créez votre fichier spinach.yaml adapté à votre contexte
  4. Intégrez-le dans votre pipeline CI/CD
  5. Configurez des alertes sur les métriques Prometheus

Une question, un retour d'expérience ou besoin d'aide pour intégrer Popeye dans votre stack DevSecOps ? N'hésitez pas à me contacter ou à partager cet article avec vos collègues SRE et DevOps ! 🚀

La Partie 1 ici

Leave a Comment