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'erreurpopeye_linter_tally_total: Compteurs par linterpopeye_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 :
| Code | Sévérité | Description |
|---|---|---|
| 100 | Error | Namespace inactif |
| 102 | Error | Container sans resource limits |
| 105 | Warn | Image avec tag latest |
| 106 | Info | Namespace sans labels |
| 206 | Warn | ServiceAccount inutilisé |
| 300 | Error | Secret non référencé |
| 400 | Error | RBAC 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
- Commencez avec un scan complet sans exclusions pour avoir une baseline
- Créez votre spinach.yaml progressivement en fonction de votre contexte
- Automatisez les scans réguliers (quotidien ou au minimum hebdomadaire)
- Trackez le score Popeye dans le temps pour mesurer l'amélioration
- Combinez avec d'autres outils : Popeye + Trivy + Falco = stack de sécurité solide
Alternatives et Comparaison
| Outil | Type | Focus Principal | Quand l'Utiliser |
|---|---|---|---|
| Popeye | Linting Runtime | Best practices & config | Audit continu du cluster en prod |
| KubeLinter | Linting Statique | YAML validation | Pre-commit, PR reviews |
| Checkov | Policy as Code | IaC security | Scan IaC (Terraform, K8s manifests) |
| Polaris | Dashboard Web | Config validation | Vue d'ensemble graphique |
| Kubescape | Security posture | NSA/CISA guidelines | Compliance 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 :
- 🌐 Site web : popeyecli.io
- 🐙 GitHub : derailed/popeye
- 📖 Documentation des codes d'erreur : popeyecli.io/docs/codes
Prochaines étapes :
- Installez Popeye sur votre poste
- Lancez un premier scan sur un cluster de dev
- Créez votre fichier spinach.yaml adapté à votre contexte
- Intégrez-le dans votre pipeline CI/CD
- 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