WAF++ PASS – CLI Referenz
wafpass ist das offizielle CLI-Werkzeug des WAF++ Frameworks.
Es liest die maschinenlesbaren YAML-Controls und prüft Terraform-Konfigurationen automatisiert gegen die definierten Assertions.
Befehle
wafpass check
Der einzige Befehl der aktuellen Version. Prüft Terraform-Dateien gegen WAF++ Controls.
wafpass check <PATH> [OPTIONEN]
Argumente
| Argument | Beschreibung |
|---|---|
|
Pfad zu einem Terraform-Verzeichnis oder einer einzelnen |
Optionen
| Option | Standard | Beschreibung |
|---|---|---|
|
|
Pfad zum Verzeichnis mit den WAF++ YAML-Control-Dateien. |
|
(alle) |
Nur Controls eines bestimmten Pillars laden.
Erlaubte Werte: |
|
(alle) |
Kommagetrennte Liste von Control-IDs, die geprüft werden sollen.
Beispiel: |
|
(alle) |
Mindest-Schweregrad für die Auswertung.
Erlaubte Werte: |
|
|
Alle Ergebnisse ausgeben, auch PASSes. Standard: nur FAILs und SKIPs werden angezeigt. |
|
|
Nur die Summary-Tabelle ausgeben, keine per-Control-Details. |
|
|
Bedingung für Exit Code 1 (Fehler). |
|
|
Ausgabeformat. Aktuell nur |
|
– |
Version ausgeben und beenden. |
Exit Codes
| Code | Bedeutung |
|---|---|
|
Alle Checks bestanden (gemäß |
|
Mindestens ein FAIL (oder SKIP bei |
|
Fehler beim Laden der Controls oder Parsen der Terraform-Dateien. |
Ausgabeformat
Standard (nur FAILs)
WAF++ PASS — Terraform Compliance Check
Path: ./infrastructure/ Controls: 12
WAF-SOV-010 Data Residency Policy critical FAIL
✗ aws_db_instance.main
→ Tag 'data-residency' not found in 'tags'.
✗ aws_elasticache_cluster.session
→ Tag 'data-class' not found in 'tags'.
WAF-COST-010 Cost Allocation Tagging high FAIL
✗ aws_instance.web
→ Key 'cost-center' not found in 'tags'.
→ Key 'owner' not found in 'tags'.
WAF-COST-040 Retention Lifecycle medium FAIL
✗ aws_cloudwatch_log_group.debug_logs
→ 'retention_in_days' is 0, must be >= 1.
────────────────────────────────────────────────────────────
Summary
┌──────────────┬───────┬──────┬──────┬──────┐
│ Pillar │ Total │ PASS │ FAIL │ SKIP │
├──────────────┼───────┼──────┼──────┼──────┤
│ cost │ 6 │ 4 │ 2 │ 0 │
│ sovereign │ 6 │ 4 │ 1 │ 1 │
├──────────────┼───────┼──────┼──────┼──────┤
│ TOTAL │ 12 │ 8 │ 3 │ 1 │
└──────────────┴───────┴──────┴──────┴──────┘
Verbose (--verbose)
Mit --verbose werden zusätzlich PASSes und Remediation-Hinweise ausgegeben:
WAF-SOV-020 Region Pinning high PASS
✓ provider.aws — 'region' is not empty.
WAF-SOV-010 Data Residency Policy critical FAIL
✗ aws_db_instance.main
→ Tag 'data-residency' not found in 'tags'.
Remediation: Add 'data-residency' and 'data-class' tags to all data resources.
SKIP-Status
Ein Check erhält SKIP, wenn:
-
Keine passenden Terraform-Ressourcen im Scope gefunden wurden
-
Der Check Assertion-Operatoren verwendet, die nicht automatisiert auswertbar sind (z.B.
json_not_contains_pattern,region_in_arn_matches)
SKIP ist kein Fehler — es bedeutet, dass der Check manuell geprüft werden sollte.
Assertion-Operatoren
Die folgende Tabelle listet alle Operatoren, die in WAF++ YAML-Controls verwendet werden können:
Automatisiert auswertbar
| Operator | Beschreibung | Beispiel-Use-Case |
|---|---|---|
|
Attribut existiert und ist nicht |
|
|
Primär- oder Fallback-Attribut existiert |
|
|
Attribut existiert und ist nicht leer ( |
Region nicht leer? |
|
Attributwert == erwartetem Wert |
|
|
Attributwert != erwartetem Wert |
|
|
Attributwert ist in erlaubter Liste |
|
|
Attributwert ist nicht in verbotener Liste |
|
|
Attribut ist |
|
|
Attribut ist |
|
|
Numerischer Wert >= Schwellenwert |
|
|
Numerischer Wert ⇐ Schwellenwert |
|
|
Attributwert entspricht Regex-Pattern |
|
|
Attributwert entspricht Regex-Pattern nicht |
|
|
Schlüssel existiert in einer Map (z.B. |
|
|
Terraform-Block des angegebenen Typs existiert |
|
|
Eine andere Ressource referenziert diesen Block |
VPC hat Flow Log oder Endpoint? |
|
Attributwert enthält den Substring nicht |
String enthält keine unerwünschten Muster |
Automatisiert übersprungen (SKIP)
Diese Operatoren erfordern Laufzeit-Informationen oder Cross-Resource-Analyse, die über statische HCL-Auswertung hinausgehen:
| Operator | Grund für SKIP |
|---|---|
|
Erfordert JSON-Parsing des IAM-Policy-Strings zur Laufzeit |
|
ARN enthält Account-ID und Region, die erst nach |
|
Variablenwerte sind erst nach |
|
Erfordert Cross-Resource-Lookup zwischen CloudWatch-Log-Group und Metric-Filter |
|
Erfordert Cross-Resource-Auflösung von S3-Bucket-Referenzen |
|
Benötigt Kenntnis eines Geschwister-Attributs |
|
Multi-Attribut-Bedingung |
|
Mehrere Provider-Blöcke müssen gemeinsam ausgewertet werden |
|
Bedingte Assertion abhängig von einem anderen Attributwert |
Beispiele
Nur Sovereign-Controls, kritische Severity
wafpass check ./infrastructure/ --pillar sovereign --severity critical
Einzelne Controls prüfen
wafpass check ./infrastructure/ --controls WAF-COST-010,WAF-COST-020,WAF-SOV-010
CI/CD-Integration
GitHub Actions
name: WAF++ Compliance
on:
push:
branches: [main]
pull_request:
paths:
- 'infrastructure/**'
jobs:
wafpass:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install wafpass
run: pip install wafpass
- name: Copy WAF++ controls
run: cp -r path/to/wafpp-controls/ controls/
- name: Run WAF++ PASS
run: |
wafpass check infrastructure/ \
--pillar cost,sovereign \
--severity high \
--fail-on critical \
--verbose
Controls-Verzeichnis
wafpass erwartet YAML-Dateien im Format WAF-*.yml im Controls-Verzeichnis.
Standardmäßig sucht es im Unterverzeichnis controls/ relativ zum Arbeitsverzeichnis.
Jede YAML-Datei entspricht einem Control. Die vollständige Schema-Dokumentation ist unter Control-Schema Referenz verfügbar.
Weiterführende Seiten
-
Assessment-Methodik – wie wafpass in den Assessment-Prozess eingebettet wird
-
Controls-Katalog – alle verfügbaren Controls mit Assertions
-
Control-Schema Referenz – YAML-Struktur für eigene Controls