Démarrage rapide · Premier scan en 2 minutes

Obtenez votre premier résultat de scan WAFPass aujourd'hui.

Installez le CLI WAFPass open source, téléchargez les contrôles WAF++ et scannez un fichier Terraform d'exemple. Pas d'identifiants cloud, pas de boîte noire — juste une analyse statique sur votre Infrastructure-as-Code.

v1.1.0
WAFPass CLI
8
Piliers
83+
Contrôles
Docker
Prêt pour Compose
Apache 2.0
Licence du code

Vous préférez une ligne de commande ? L’installateur configure le CLI et les contrôles pour vous.

macOS / Linux curl -fsSL https://waf2p.dev/install.sh | sh
Windows irm https://waf2p.dev/install.ps1 | iex
CHOISISSEZ VOTRE PARCOURS

Un parcours clair pour chaque cas d'usage.

Commencez par le quickstart CLI de 2 minutes. Changez d'onglet quand vous serez prêt pour le dashboard, la CI ou l'installation manuelle.

Obtenez votre premier résultat en 2 minutes

Suivez les quatre étapes ci-dessous. Chaque commande est conçue pour vous donner un résultat lisible et garanti dès la première tentative.

1

Installez le CLI

WAFPass est publié sur PyPI sous le nom wafpass-core. Python 3.11+ est recommandé.

bash
$ pip install wafpass-core
$ wafpass --version
2

Téléchargez les contrôles

Le catalogue de contrôles WAF++ contient les 83+ règles que WAFPass utilise pour évaluer votre code.

bash
$ git clone https://github.com/WAF2p/framework.git controls-src
$ cp -r controls-src/modules/controls/controls ./controls

Recommandé : clonez le dépôt de contrôles. Alternative : téléchargez le zip des contrôles depuis la page WAFPass et extrayez-le dans controls/.

3

Enregistrez un fichier Terraform d'exemple

Créez un main.tf minimal. Cet exemple laisse intentionnellement un bucket S3 public pour que WAFPass ait quelque chose à signaler.

provider "aws" {
  region = "eu-central-1"
}

resource "aws_s3_bucket" "public" {
  bucket = "wafpp-first-check-demo"
}

resource "aws_s3_bucket_public_access_block" "public" {
  bucket                  = aws_s3_bucket.public.id
  block_public_acls       = false
  block_public_policy     = false
  ignore_public_acls      = false
  restrict_public_buckets = false
}
4

Lancez votre première vérification

Pointez WAFPass sur le répertoire courant et affichez le résumé JSON.

bash
$ wafpass check . --output json | jq '.summary'

Vous devriez voir un résultat comme celui-ci :

{
  "total_controls": 83,
  "passed": 81,
  "failed": 2,
  "pillars": {
    "security": { "passed": 18, "failed": 2 }
  }
}
81 passed — les ressources respectaient le contrôle
2 failed — les ressources violaient un contrôle (ici, le bucket S3 public)
83 controls — total des règles évaluées sur les 8 piliers WAF++

Exécutez le dashboard complet en local

Le monorepo WAF2p/pass fournit un docker-compose.yml unifié. Il démarre le CLI, le serveur, le dashboard, PostgreSQL et Keycloak en une seule commande.

bash
$ git clone https://github.com/WAF2p/pass.git
$ cd pass
$ cp .env.example .env
$ # Modifiez .env — définissez POSTGRES_PASSWORD, WAFPASS_JWT_SECRET, etc.
$ docker compose up -d
ServiceURLDescription
wafpass-dashboardhttp://localhost:3000Dashboard React
wafpass-serverhttp://localhost:8000API REST FastAPI
Keycloak (SSO)http://localhost:8080Fournisseur d'identité (admin / admin)
postgreslocalhost:5432Base de données PostgreSQL

Une fois les conteneurs sains, peuplez votre première vue du dashboard avec la commande de démo ou en poussant un résultat de scan :

bash
$ wafpass demo # crée des données d'exemple et ouvre le dashboard
$ open http://localhost:3000
Voir le docker-compose.yml complet
services:

  # ── PostgreSQL ────────────────────────────────────────────
  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER:     ${POSTGRES_USER:-wafpass}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-wafpass}
      POSTGRES_DB:       ${POSTGRES_DB:-wafpass}
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - ./keycloak/init.sql:/docker-entrypoint-initdb.d/01-keycloak-db.sql:ro
    ports:
      - "${POSTGRES_PORT:-5432}:5432"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-wafpass} -d ${POSTGRES_DB:-wafpass}"]
      interval: 5s
      timeout: 5s
      retries: 10

  # ── wafpass-server ────────────────────────────────────────
  wafpass-server:
    build:
      context: .
      dockerfile: wafpass-server/Dockerfile
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      DATABASE_URL:               postgresql+asyncpg://${POSTGRES_USER:-wafpass}:${POSTGRES_PASSWORD:-wafpass}@postgres:5432/${POSTGRES_DB:-wafpass}
      WAFPASS_ENV:                ${WAFPASS_ENV:-local}
      CORS_ORIGINS:               ${API_URL:-http://localhost:3000},http://wafpass-dashboard,http://cloud.waf2p
      WAFPASS_CONTROLS_DIR:       ${WAFPASS_CONTROLS_DIR:-/app/controls}
      WAFPASS_JWT_SECRET:         ${WAFPASS_JWT_SECRET:-change-me-in-production}
      WAFPASS_JWT_EXPIRE_MINUTES: ${WAFPASS_JWT_EXPIRE_MINUTES:-60}
      WAFPASS_JWT_REFRESH_DAYS:   ${WAFPASS_JWT_REFRESH_DAYS:-7}
      WAFPASS_ADMIN_USERNAME:     ${WAFPASS_ADMIN_USERNAME:-admin}
      WAFPASS_ADMIN_PASSWORD:     ${WAFPASS_ADMIN_PASSWORD:-admin}
      WAFPASS_ADMIN_ROLE:         ${WAFPASS_ADMIN_ROLE:-admin}
      WAFPASS_API_KEY:            ${WAFPASS_API_KEY:-key}
    ports:
      - "8000:8000"

  # ── Keycloak (SSO / IdP — dev mode) ──────────────────────
  keycloak:
    image: quay.io/keycloak/keycloak:26.1
    command: start-dev
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      KC_DB:                   postgres
      KC_DB_URL:               jdbc:postgresql://postgres:5432/${KEYCLOAK_DB:-keycloak}
      KC_DB_USERNAME:          ${KEYCLOAK_DB_USER:-keycloak}
      KC_DB_PASSWORD:          ${KEYCLOAK_DB_PASSWORD:-keycloak}
      KEYCLOAK_ADMIN:          ${KEYCLOAK_ADMIN_USER:-admin}
      KEYCLOAK_ADMIN_PASSWORD: ${KEYCLOAK_ADMIN_PASSWORD:-admin}
      KC_HTTP_ENABLED:         "true"
      KC_HOSTNAME_STRICT:      "false"
      KC_HEALTH_ENABLED:       "true"
    ports:
      - "${KEYCLOAK_PORT:-8080}:8080"
    healthcheck:
      test: ["CMD-SHELL", "curl -sf http://localhost:8080/health/ready || exit 1"]
      interval: 15s
      timeout: 5s
      retries: 20
      start_period: 60s

  # ── wafpass-dashboard ─────────────────────────────────────
  wafpass-dashboard:
    build:
      context: ./wafpass-dashboard
      dockerfile: Dockerfile
    restart: unless-stopped
    depends_on:
      - wafpass-server
    ports:
      - "3000:80"

volumes:
  postgres_data:

Ajouter à la CI / pre-commit

Bloquez les infrastructures non conformes avant qu'elles n'atteignent votre branche principale. WAFPass s'exécute entièrement sur les fichiers du dépôt, donc les vérifications CI sont rapides et ne nécessitent aucun secret cloud.

1

Installez le hook pre-commit

Exécutez le script d'installation du dépôt WAFPass une fois par clone. Ensuite, chaque git commit est vérifié automatiquement.

bash
$ bash hooks/install.sh # macOS / Linux / Git Bash
$ .\hooks\install.ps1 # Windows PowerShell
2

Ajoutez WAFPass à GitHub Actions

Utilisez l'action GitHub officielle WAFPass pour échouer les pulls qui introduisent des mauvaises configurations. Fonctionne avec les dépôts publics et privés.

Configurer l'action WAFPass →

Configuration avancée / manuelle

Installez uniquement les composants dont vous avez besoin. Commencez par le CLI pour la CI/CD, puis ajoutez le serveur et le dashboard quand vous avez besoin de persistance et d'exploration visuelle.

1
Installer le CLI wafpass

Moteur d'évaluation principal — analyse l'IaC, évalue les contrôles, génère les rapports

Depuis PyPI (recommandé)

bash
$ pip install wafpass-core
$ uv add wafpass-core # recommandé pour les projets Python

Depuis les sources

bash
$ git clone https://github.com/WAF2p/pass.git
$ cd pass
$ uv pip install -e . # recommandé
$ pip install -e ".[pdf]" # avec le support des rapports PDF

macOS (Apple M-series)

bash
$ brew install git python uv
$ git clone https://github.com/WAF2p/pass.git && cd pass
$ uv pip install -e .
$ wafpass --version # vérifier l'installation
2
Installer wafpass-server

Couche de persistance FastAPI — stocke les exécutions, dérogations, secrets findings et événements d'audit

Depuis PyPI (recommandé)

bash
$ pip install wafpass-server
$ uv add wafpass-server # recommandé pour les projets Python

Configurer et démarrer

bash
$ cp .env.example .env # définir DATABASE_URL et le secret JWT
$ alembic upgrade head # appliquer les migrations
$ uvicorn wafpass_server.main:app --reload --port 8000

Documentation de l'API disponible sur http://localhost:8000/api/docs

3
Installer wafpass-dashboard

Dashboard web React — 22+ vues de conformité, export d'evidence, RBAC

bash
$ git clone https://github.com/WAF2p/wafpass-dashboard.git
$ cd wafpass-dashboard
$ npm install
$ cp .env.example .env.local # définir VITE_API_URL
$ npm run dev # serveur de dev sur http://localhost:5173
DÉPANNAGE

Problèmes courants et corrections.

Réponses rapides si quelque chose ne fonctionne pas du premier coup.

Contrôles non trouvés

Si wafpass check signale que le répertoire de contrôles est introuvable, le CLI affichera automatiquement les instructions de téléchargement. Assurez-vous que le dossier controls/ se trouve à côté de l'endroit où vous lancez les scans.

Port déjà utilisé

Utilisez un port différent pour le serveur ou le dashboard :

$ uvicorn wafpass_server.main:app --port 8001
$ npm run dev -- --port 5174
Erreurs de connexion à la base de données

Vérifiez que PostgreSQL est en cours d'exécution et que votre DATABASE_URL est correct :

$ psql $DATABASE_URL -c "SELECT 1"
Le build Docker échoue

Assurez-vous que les trois dépôts sont clonés côte à côte dans le même répertoire parent lors d'un build depuis les sources :

$ ls -1
pass/
wafpass-server/
wafpass-dashboard/
CONTINUER

Vous avez lancé votre première vérification. Et maintenant ?

Choisissez la prochaine étape qui correspond à votre rôle : approfondissez la connaissance du framework, intégrez WAFPass dans la CI/CD, ou explorez le dashboard visuel complet.