Primer escaneo, en 2 minutos.

Instala la CLI open source de WOMBATpass, descarga los controles de Wombat y escanea un archivo de Terraform de ejemplo. Sin credenciales cloud, sin cajas negras: solo análisis estático de tu Infrastructure as Code.

v1.1.0
WOMBATpass CLI
8
Pilares
100+
Controles
Docker
Listo para Compose
Apache 2.0
Licencia del código

¿Prefieres una sola línea? El instalador configura la CLI y los controles por ti.

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

Un camino claro para cada caso de uso.

Empieza con el quickstart de la CLI de 2 minutos. Cambia de pestaña cuando estés listo para el panel, la CI o la configuración manual.

Obtén tu primer resultado en 2 minutos.

Sigue los cuatro pasos de abajo. Cada comando está pensado para darte un resultado garantizado y legible al primer intento.

1

Instalar la CLI

WOMBATpass está publicado en PyPI como wafpass-core. Se recomienda Python 3.11+.

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

Descargar los controles

El catálogo de controles de Wombat contiene las más de 100 reglas con las que WOMBATpass evalúa tu código.

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

Recomendado: clona el repositorio de controles. Alternativa: descarga el zip de controles desde la página de WOMBATpass y extráelo en controls/.

3

Guardar un archivo de Terraform de ejemplo

Crea un main.tfmínimo. Este ejemplo deja a propósito un bucket S3 público para que WOMBATpass tenga algo que señalar.

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

Ejecutar tu primera comprobación

Apunta WOMBATpass al directorio actual e imprime el resumen en JSON.

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

Deberías ver una salida como esta:

{
  "total_controls": 100,
  "passed": 98,
  "failed": 2,
  "pillars": {
    "security": { "passed": 18, "failed": 2 }
  }
}
98 aprobados: recursos que cumplieron el control
2 fallidos: recursos que incumplieron un control (aquí, el bucket S3 público)
100 controles: total de reglas evaluadas en los 8 pilares de Wombat

El mismo resultado, visualizado, si más adelante añades el panel:

Ejecuta el panel completo en local.

El monorepo WAF2p/pass incluye un docker-compose.ymlunificado. Levanta la CLI, el servidor, el panel, PostgreSQL y Keycloak con un solo comando.

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
ServicioURLDescripción
wafpass-dashboardhttp://localhost:3000Panel en React
wafpass-serverhttp://localhost:8000FastAPI REST API
Keycloak (SSO)http://localhost:8080Proveedor de identidad (admin / admin)
postgreslocalhost:5432Base de datos PostgreSQL

Cuando los contenedores estén sanos, llena tu primera vista del panel con el comando demo o subiendo un resultado de escaneo:

bash
$wombat demo # creates sample data and opens the dashboard $open http://localhost:3000
Ver el docker-compose.yml completo
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:

Añadir a CI / pre-commit.

Bloquea la infraestructura no conforme antes de que llegue a tu rama principal. WOMBATpass trabaja solo con los archivos del repositorio, así que las comprobaciones de CI son rápidas y no necesitan secretos cloud.

1

Instalar el hook de pre-commit

Ejecuta el script de instalación del repositorio de WOMBATpass una vez por clon. Después, cada git commit se comprueba automáticamente.

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

Añadir WOMBATpass a GitHub Actions

Usa la GitHub Action oficial de WOMBATpass para hacer fallar los pull requests que introduzcan errores de configuración. Funciona con repositorios públicos y privados.

Configurar WOMBATpass Action

Configuración avanzada / manual.

Instala solo los componentes que necesites. Empieza con la CLI para CI/CD y añade el servidor y el panel cuando necesites persistencia y exploración visual.

1

Instalar la CLI wafpass

Motor de evaluación principal: analiza IaC, evalúa controles y genera informes.

Desde PyPI (recomendado)

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

Desde el código fuente

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

Instalar wafpass-server

Capa de persistencia con FastAPI: almacena ejecuciones, excepciones, secretos detectados y eventos de auditoría.

Desde PyPI (recomendado)

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

Configurar e iniciar

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

Documentación de la API disponible en http://localhost:8000/api/docs

3

Instalar wafpass-dashboard

Panel web en React: más de 22 vistas de cumplimiento, exportación de evidencias y 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

Problemas habituales y soluciones.

Respuestas rápidas si algo no funciona al primer intento.

No se encuentran los controles

Si wombat check indica "controls directory not found", la CLI muestra automáticamente las instrucciones de descarga. Asegúrate de que la carpeta controls/ esté junto al lugar desde donde ejecutas los escaneos.

Puerto ya en uso

Usa otro puerto para el servidor o el panel:

$uvicorn wafpass_server.main:app --port 8001 $npm run dev -- --port 5174
Errores de conexión a la base de datos

Comprueba que PostgreSQL está en marcha y que tu DATABASE_URL es correcta:

$psql $DATABASE_URL -c "SELECT 1"
Falla la build de Docker

Al compilar desde el código fuente, asegúrate de que los tres repositorios estén clonados uno junto a otro en el mismo directorio padre:

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