Premier scan, en 2 minutes.

Installez la CLI open source de WOMBATpass, téléchargez les contrôles Wombat et analysez un fichier Terraform d'exemple. Aucun identifiant cloud, aucune boîte noire : uniquement de l'analyse statique de votre Infrastructure as Code.

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

Vous préférez une seule ligne ? L'installateur configure la CLI et les contrôles pour vous.

macOS / Linux
bash
$curl -fsSL https://wombat-cli.dev/install.sh | sh
Windows
powershell
$irm https://wombat-cli.dev/install.ps1 | iex

Un parcours clair pour chaque usage.

Commencez par le quickstart CLI de 2 minutes. Changez d'onglet quand vous êtes prêt pour le tableau de bord, 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 garanti et lisible dès le premier essai.

1

Installer la CLI

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

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

Télécharger les contrôles

Le catalogue des contrôles Wombat contient les plus de 100 règles qu'utilise WOMBATpass 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 des contrôles. Sinon : téléchargez l'archive zip des contrôles depuis la page WOMBATpass et extrayez-la dans controls/.

3

Enregistrer un fichier Terraform d'exemple

Créez un main.tfminimal. Cet exemple laisse volontairement un bucket S3 public pour que WOMBATpass 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

Lancer votre premier contrôle

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

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

Vous devriez obtenir une sortie de ce type :

{
  "total_controls": 100,
  "passed": 98,
  "failed": 2,
  "pillars": {
    "security": { "passed": 18, "failed": 2 }
  }
}
98 réussis : ressources conformes au contrôle
2 en échec : ressources ayant enfreint un contrôle (ici, le bucket S3 public)
100 contrôles : total des règles évaluées sur les 8 piliers Wombat

Le même résultat, visualisé, si vous ajoutez le tableau de bord plus tard :

Lancez le tableau de bord complet en local.

Le monorepo WAF2p/pass fournit un docker-compose.ymlunifié. Il démarre la CLI, le serveur, le tableau de bord, PostgreSQL et Keycloak en une seule commande.

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

Une fois les conteneurs opérationnels, alimentez votre première vue du tableau de bord avec la commande demo ou en envoyant un résultat de scan :

bash
$wombat demo # creates sample data and opens the dashboard $open http://localhost:3000
Afficher 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 / au pre-commit.

Bloquez l'infrastructure non conforme avant qu'elle n'atteigne votre branche principale. WOMBATpass travaille uniquement sur les fichiers du dépôt : les vérifications CI sont rapides et ne demandent aucun secret cloud.

1

Installer le hook pre-commit

Lancez le script d'installation du dépôt WOMBATpass 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

Ajouter WOMBATpass à GitHub Actions

Utilisez la GitHub Action officielle de WOMBATpass pour faire échouer les pull requests qui introduisent des erreurs de configuration. Fonctionne avec les dépôts publics et privés.

Configurer WOMBATpass Action

Installation avancée / manuelle.

N'installez que les composants dont vous avez besoin. Commencez par la CLI pour la CI/CD, puis ajoutez le serveur et le tableau de bord quand vous avez besoin de persistance et d'exploration visuelle.

1

Installer la CLI wafpass

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

Depuis PyPI (recommandé)

bash
$pip install wafpass-core $uv add wafpass-core # recommended for Python projects

Depuis les sources

bash
$git clone https://github.com/WAF2p/pass.git $cd pass $uv pip install -e . # recommended $pip install -e ".[pdf]" # with PDF report support

macOS (Apple M-series)

bash
$brew install git python uv $git clone https://github.com/WAF2p/pass.git && cd pass $uv pip install -e . $wombat --version # verify installation
2

Installer wafpass-server

Couche de persistance FastAPI : stocke les exécutions, dérogations, secrets détectés et événements d'audit.

Depuis PyPI (recommandé)

bash
$pip install wafpass-server $uv add wafpass-server # recommended for Python projects

Configurer et démarrer

bash
$cp .env.example .env # set DATABASE_URL and JWT secret $alembic upgrade head # apply database migrations $uvicorn wafpass_server.main:app --reload --port 8000

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

3

Installer wafpass-dashboard

Tableau de bord web React : plus de 22 vues de conformité, export de preuves, RBAC.

bash
$git clone https://github.com/WAF2p/wafpass-dashboard.git $cd wafpass-dashboard $npm install $cp .env.example .env.local # set VITE_API_URL $npm run dev # dev server at http://localhost:5173

Problèmes fréquents et solutions.

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

Contrôles introuvables

Si wombat check signale « controls directory not found », la CLI affiche automatiquement les instructions de téléchargement. Vérifiez que le dossier controls/ se trouve à côté de l'endroit où vous lancez les scans.

Port déjà utilisé

Utilisez un autre port pour le serveur ou le tableau de bord :

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

Vérifiez que PostgreSQL tourne et que votre DATABASE_URL est correcte :

$psql $DATABASE_URL -c "SELECT 1"
Échec du build Docker

Pour un build depuis les sources, les trois dépôts doivent être clonés côte à côte dans le même répertoire parent :

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