Aller au contenu
Sécurité medium

Prowler : audit de sécurité cloud multi-providers

20 min de lecture

Prowler scanne vos environnements cloud et identifie les écarts de sécurité en quelques minutes. Avec 570 contrôles AWS, 165 Azure, 99 GCP et 83 Kubernetes (version 5.17), il vérifie automatiquement la conformité aux standards CIS, NIST, PCI-DSS, SOC2 et bien d'autres.

  • Scanner un environnement cloud : lancer un audit AWS, Azure, GCP ou Kubernetes
  • Vérifier la conformité : utiliser les frameworks CIS, NIST, PCI-DSS
  • Analyser les résultats : comprendre et exploiter les rapports générés
  • Automatiser : intégrer Prowler dans vos pipelines CI/CD

Prowler est un outil open source de CSPM (Cloud Security Posture Management) qui audite automatiquement la sécurité de vos environnements cloud. Développé initialement pour AWS, il supporte maintenant plusieurs providers.

Architecture Prowler avec ses providers et frameworks de conformité

La colonne qui compte au démarrage est Checks : c'est le volume de contrôles que Prowler exécute par défaut sur ce provider, donc l'ordre de grandeur du temps de scan et du bruit à trier. AWS est le plus mature avec 570 contrôles, les autres providers montent en couverture à chaque version. Les valeurs ci-dessous correspondent à Prowler 5.17 ; elles augmentent à chaque release, vérifiez avec prowler <provider> --list-checks.

ProviderChecksFrameworksCas d'usage
AWS57040Comptes AWS, organisations
Azure16516Subscriptions Azure
GCP9914Projets Google Cloud
Kubernetes837Clusters K8s (minikube, EKS, AKS, GKE)
GitHub20-Repos, organisations
M36570-Microsoft 365, Exchange

Prowler vérifie la conformité à de nombreux standards :

FrameworkDescriptionProviders
CIS BenchmarksBonnes pratiques de sécurité par le CISAWS, Azure, GCP, K8s
NIST 800-53Standard fédéral américain (rev. 4 et 5)AWS, Azure, GCP
PCI-DSSSécurité des données de paiement (v3.2.1 et v4.0)AWS, Azure, GCP, K8s
SOC2Contrôles pour les fournisseurs de servicesAWS, Azure, GCP
HIPAAProtection des données de santéAWS, GCP
GDPRRèglement européen sur les donnéesAWS
ISO 27001Management de la sécurité (2013 et 2022)AWS, Azure, GCP, K8s
MITRE ATT&CKMapping des techniques d'attaqueAWS, Azure, GCP

Prowler s'installe via pip (Python ≥ 3.9) ou Docker.

Fenêtre de terminal
# Installation avec pipx (isolé)
pipx install prowler
# Ou avec pip
pip install prowler

Vérifiez l'installation :

Fenêtre de terminal
prowler -v
Sortie attendue
Prowler 5.17.0

Prowler utilise vos credentials AWS existants (profil configuré, variables d'environnement ou rôle IAM).

Fenêtre de terminal
# Vérifier vos credentials
aws sts get-caller-identity
Fenêtre de terminal
prowler aws

Prowler exécute tous les 570 checks sur toutes les régions de votre compte.

Un scan complet sur toutes les régions prend plusieurs minutes et remonte des centaines de résultats. En phase d'investigation, restreignez le périmètre pour itérer vite : par région avec -f, par service avec --services, ou par check précis avec --checks. Les trois onglets ci-dessous couvrent ces cas ; chaque option accepte aussi sa variante d'exclusion pour retirer un service ou un check bruyant du scan.

Fenêtre de terminal
# Scanner uniquement eu-west-1 et eu-west-3
prowler aws -f eu-west-1 eu-west-3

Pour vérifier la conformité à un framework spécifique :

Fenêtre de terminal
# CIS AWS Benchmark 2.0
prowler aws --compliance cis_2.0_aws
# NIST 800-53 Revision 5
prowler aws --compliance nist_800_53_revision_5_aws
# PCI-DSS v4.0
prowler aws --compliance pci_4.0_aws

À la fin du scan, deux blocs comptent. La ligne Overview Results donne le taux global (Failed / Passed / Muted) : c'est votre indicateur de posture. Le tableau Scan Results ventile ensuite les échecs par service et par sévérité ; les colonnes de sévérité ne comptent que les FAIL. Attaquez d'abord la colonne Critical, puis High : ce sont les écarts exploitables à court terme.

_
_ __ _ __ _____ _| | ___ _ __
| '_ \| '__/ _ \ \ /\ / / |/ _ \ '__|
| |_) | | | (_) \ V V /| | __/ |
| .__/|_| \___/ \_/\_/ |_|\___|_|v5.17.0
|_| the handy multi-cloud security tool
Date: 2026-01-23 16:48:00
Executing 570 checks, please wait...
-> Scan completed! |▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉| 570/570 [100%] in 2m 30s
Overview Results:
╭────────────────────┬────────────────────┬────────────────╮
│ 15.2% (87) Failed │ 84.8% (483) Passed │ 0.0% (0) Muted │
╰────────────────────┴────────────────────┴────────────────╯
Account 123456789012 Scan Results (severity columns are for fails only):
╭──────────┬───────────┬───────────┬──────────┬────────┬──────────┬───────┬─────────╮
│ Provider │ Service │ Status │ Critical │ High │ Medium │ Low │ Muted │
├──────────┼───────────┼───────────┼──────────┼────────┼──────────┼───────┼─────────┤
│ aws │ iam │ FAIL (12) │ 2 │ 5 │ 4 │ 1 │ 0 │
│ aws │ s3 │ FAIL (8) │ 1 │ 3 │ 4 │ 0 │ 0 │
│ aws │ ec2 │ FAIL (15) │ 0 │ 8 │ 7 │ 0 │ 0 │
╰──────────┴───────────┴───────────┴──────────┴────────┴──────────┴───────┴─────────╯

Prowler peut auditer n'importe quel cluster Kubernetes : minikube, kind, EKS, AKS, GKE...

Prowler utilise votre kubeconfig par défaut (~/.kube/config).

Fenêtre de terminal
# Vérifier la connexion au cluster
kubectl cluster-info

La commande sans argument lance les 83 contrôles Kubernetes sur tous les namespaces accessibles via votre kubeconfig. Sur un cluster managé (EKS, AKS, GKE), les contrôles du plan de contrôle (apiserver, etcd, scheduler) remontent souvent en MANUAL car le fournisseur gère cette couche : c'est normal, ils ne sont pas exploitables de votre côté.

Fenêtre de terminal
prowler kubernetes

Plutôt que les 83 contrôles bruts, cadrez le scan sur le CIS Kubernetes Benchmark : Prowler ne garde que les checks rattachés au référentiel et présente le résultat par exigence, ce qui produit un rapport directement présentable en audit.

Fenêtre de terminal
# CIS Kubernetes Benchmark 1.12
prowler kubernetes --compliance cis_1.12_kubernetes

Sur Kubernetes, regardez surtout le service rbac : les échecs y révèlent des rôles trop permissifs (cluster-admin distribué trop largement, ServiceAccount avec des droits d'écriture globaux). C'est le premier vecteur d'escalade de privilèges dans un cluster, avant même les réglages de l'apiserver.

_
_ __ _ __ _____ _| | ___ _ __
| '_ \| '__/ _ \ \ /\ / / |/ _ \ '__|
| |_) | | | (_) \ V V /| | __/ |
| .__/|_| \___/ \_/\_/ |_|\___|_|v5.17.0
|_| the handy multi-cloud security tool
Date: 2026-01-23 16:49:48
-> Using the Kubernetes credentials below:
· Kubernetes Cluster: minikube
· User: minikube
· Namespaces: default, kube-node-lease, kube-public, kube-system
Executing 81 checks, please wait...
-> Scan completed! |▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉| 81/81 [100%] in 0.3s
Overview Results:
╭───────────────────┬─────────────────────┬────────────────╮
│ 9.46% (47) Failed │ 87.73% (436) Passed │ 0.0% (0) Muted │
╰───────────────────┴─────────────────────┴────────────────╯
Context minikube Scan Results (severity columns are for fails only):
╭────────────┬───────────────────┬───────────┬──────────┬────────┬──────────┬───────╮
│ Provider │ Service │ Status │ Critical │ High │ Medium │ Low │
├────────────┼───────────────────┼───────────┼──────────┼────────┼──────────┼───────┤
│ kubernetes │ apiserver │ FAIL (12) │ 0 │ 5 │ 7 │ 0 │
│ kubernetes │ controllermanager │ FAIL (1) │ 0 │ 0 │ 1 │ 0 │
│ kubernetes │ rbac │ FAIL (19) │ 0 │ 19 │ 0 │ 0 │
╰────────────┴───────────────────┴───────────┴──────────┴────────┴──────────┴───────╯

Le squelette de commande reste identique, seule l'authentification change de provider à provider. Sur Azure, Prowler s'appuie sur une session az login existante (--az-cli-auth) ou sur un Service Principal via variables d'environnement (--sp-env-auth). Sur GCP, il réutilise le jeton gcloud auth par défaut, ou un fichier de clé de Service Account. Choisissez le mode non interactif (Service Principal, Service Account) dès que le scan tourne dans une pipeline.

Fenêtre de terminal
# Avec Azure CLI (az login)
prowler azure --az-cli-auth
# Avec Service Principal
prowler azure --sp-env-auth
# Subscriptions spécifiques
prowler azure --az-cli-auth --subscription-ids sub-id-1 sub-id-2

Par défaut, Prowler génère des rapports CSV, JSON-OCSF et HTML.

Fenêtre de terminal
# Spécifier les formats
prowler aws -M csv json-ocsf html
# Avec JSON-ASFF (pour AWS Security Hub)
prowler aws -M json-asff
# Dossier de sortie personnalisé
prowler aws -o /path/to/reports/

Le rapport HTML est interactif et facilement partageable :

SectionContenu
OverviewRésumé graphique des résultats
FindingsListe détaillée par sévérité
ResourcesRessources affectées
RemediationRecommandations de correction

Prowler inclut un dashboard local pour visualiser les résultats :

Fenêtre de terminal
prowler dashboard

Ouvre un dashboard web sur http://localhost:8050 avec vos scans précédents.

L'action officielle est publiée depuis le dépôt principal prowler-cloud/prowler (à partir de la version 5.25), pas depuis un dépôt -action séparé. Les paramètres clés sont provider, output-formats (séparés par des espaces, pas des virgules), flags pour tout argument CLI supplémentaire comme --compliance, et upload-sarif pour remonter les résultats dans l'onglet Security > Code scanning du dépôt. Le workflow ci-dessous applique le moindre privilège : permissions: {} global, puis les seules permissions nécessaires au job.

.github/workflows/prowler.yml
name: Prowler Security Scan
on:
schedule:
- cron: '0 6 * * *' # Tous les jours à 6h
workflow_dispatch:
permissions: {}
jobs:
prowler:
runs-on: ubuntu-latest
permissions:
contents: read
security-events: write # requis par upload-sarif
steps:
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@7474bc4690e29a8392af63c5b98e7449536d5c3a # v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: eu-west-1
- name: Run Prowler
uses: prowler-cloud/prowler@9b0c4a0073daa877e6da1164cff0c69ff82ab465 # 5.35.0
with:
provider: aws
output-formats: sarif json-ocsf
upload-sarif: true
flags: --compliance cis_2.0_aws
- name: Upload results
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: prowler-report
path: output/
.gitlab-ci.yml
prowler-scan:
image: toniblyx/prowler:5.35.0
stage: security
script:
- prowler aws --compliance cis_2.0_aws -M json html
artifacts:
paths:
- output/
expire_in: 30 days
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"

La plupart des blocages au premier scan viennent des credentials ou des permissions, pas de Prowler lui-même. Le tableau relie chaque message d'erreur à sa cause la plus fréquente ; commencez par vérifier l'identité active (aws sts get-caller-identity) avant de suspecter un bug de l'outil.

SymptômeCause probableSolution
NoCredentialProvidersPas de credentials AWSConfigurez aws configure ou les variables d'environnement
AccessDenied sur certains checksPermissions insuffisantesAjoutez la policy SecurityAudit
Scan très lentToutes régions scannéesLimitez avec -f eu-west-1
Error: context deadline exceededTimeout KubernetesVérifiez la connectivité au cluster

Avant de relancer un scan complet qui échoue, isolez la couche fautive avec ces commandes. Elles répondent chacune à une question précise : les credentials sont-ils valides, le cluster est-il joignable, le check ciblé existe-t-il bien sous ce nom. Un --list-checks filtré évite aussi les fautes de frappe dans les identifiants passés à --checks.

Fenêtre de terminal
# Vérifier les credentials AWS
aws sts get-caller-identity
# Vérifier la connexion Kubernetes
kubectl auth can-i list pods --all-namespaces
# Lister les checks disponibles
prowler aws --list-checks | grep s3
# Lister les services scannables
prowler aws --list-services

Prowler ne lit que votre infrastructure, mais ses credentials et ses rapports deviennent eux-mêmes une cible : un rôle trop large ou un rapport HTML laissé en clair renseigne un attaquant sur vos failles. Ces trois réflexes limitent l'exposition.

  • Principe du moindre privilège : créez un rôle IAM dédié avec uniquement les permissions de lecture nécessaires
  • Pas de credentials en clair : utilisez des rôles IAM, des Service Accounts ou des variables d'environnement
  • Chiffrez les rapports : les résultats contiennent des informations sensibles sur votre infrastructure

Un premier scan remonte facilement des dizaines d'écarts : sans méthode, la liste décourage plus qu'elle n'aide. L'enjeu est de transformer ce bruit en file de travail priorisée et de suivre sa réduction dans le temps.

  • Scans réguliers : planifiez des scans quotidiens ou hebdomadaires
  • Baseline : établissez une baseline et suivez l'évolution dans le temps
  • Priorisation : traitez d'abord les findings Critical et High
  • Faux positifs : déclarez-les dans un fichier de mutelist passé avec --mutelist-file (option -w), plutôt que de les subir à chaque scan

Sur un grand compte multi-régions, le temps de scan grimpe vite. Deux leviers le maîtrisent : réduire le périmètre aux régions réellement utilisées, et laisser Prowler exploiter sa parallélisation intégrée sans la brider.

  • Ciblez les régions : scannez uniquement les régions utilisées avec -f
  • Parallélisation : Prowler parallélise automatiquement les checks
  • Ciblez les services : sur une investigation, --services limite le scan aux services concernés
  1. Prowler scanne 10+ providers cloud avec des centaines de contrôles de sécurité prêts à l'emploi
  2. 40+ frameworks de conformité : CIS, NIST, PCI-DSS, SOC2, HIPAA, GDPR, ISO 27001...
  3. Installation simple : pip install prowler et c'est prêt, utilise vos credentials existants
  4. Commande de base : prowler aws pour un scan complet, --compliance cis_2.0_aws pour un framework spécifique
  5. Rapports exploitables : CSV, JSON, HTML avec recommandations de remédiation
  6. Kubernetes aussi : auditez vos clusters avec les benchmarks CIS Kubernetes
  7. CI/CD ready : GitHub Actions, GitLab CI avec l'image Docker officielle

Les questions ci-dessous reprennent les points qui reviennent le plus souvent au moment d'adopter Prowler : périmètre réel de l'outil, différence avec un scanner de vulnérabilités, et coût d'un scan sur un gros compte.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn