Grundlagen und Rego-basierte Prüfarchitektur Konfigurationskontrollen für Entwicklungsumgebungen mit Conftest

Von Thomas Joos 2 min Lesedauer

Anbieter zum Thema

„Conftest“ nutzt Rego aus dem „Open Policy Agent“ und prüft strukturierte Dateien ohne externe Dienste. Das Werkzeug kontrolliert „Kubernetes“-Manifeste, „Terraform“-HCL, „Tekton“-Definitionen, Serverless-Konfigurationen und zahlreiche weitere Formate direkt im lokalen Projektkontext.

Im Artikel geht es um „Conftest“-Grundlagen und Rego-basierte Prüfarchitektur. (Bild:  Thomas Joos)
Im Artikel geht es um „Conftest“-Grundlagen und Rego-basierte Prüfarchitektur.
(Bild: Thomas Joos)

Das Tool Conftest verarbeitet jede unterstützte Datei als strukturierte Eingabe für Rego. Die Sprache verwendet logische Ausdrücke und vergleicht Wertefelder in Dokumenten. Jede Policy liegt in einem Ordner mit der Bezeichnung "policy".

Ein Parameter ändert diesen Pfad, falls ein Projekt eine andere Struktur nutzt. Conftest durchsucht standardmäßig den Namensraum "main". Eine Konfigurationsdatei oder ein Namespace-Parameter stellt alternative Namensräume bereit. Daten zu Dateiname und Verzeichnis liegen unter data.conftest und liefern Kontext für Richtlinien.

Regeln und Auswertung

Rego kennt deny, violation und warn. deny und violation markieren Fehler, warn kennzeichnet Hinweise. violation erlaubt strukturierte Objekte als Ausgabe. Eine Regel prüft das Feld input.kind und vergleicht den Wert mit Deployment. Eine weitere Bedingung kontrolliert untergeordnete Felder in input.spec.template.spec.securityContext.

Fehlt runAsNonRoot, erzeugt die Regel einen Meldungstext. Eine zweite Regel untersucht input.spec.selector.matchLabels.app und markiert Abweichungen.

Ein Aufruf wie conftest test deployment.yaml führt jede Regel aus und liefert eine Zusammenfassung mit Zahlen zu Tests, Fehlern und Warnungen. Ein einzelner Bindestrich liest Daten aus der Standardeingabe.

Parser und Formate

Conftest erkennt den Parser über Dateiendungen oder über den parser-Parameter. Das Werkzeug verarbeitet YAML, JSON, CUE, JSONNET, Dockerfile-Texte, XML, HCL und HCL2, TextProto, SPDX, CycloneDX, ENV-Dateien, Property-Dateien, VCL, HOCON, INI und weitere Formate.

Jede Datei fließt in die Rego-Engine als strukturierter Baum. Der combine-Schalter fasst mehrere Dateien zu einer gemeinsamen Eingabestruktur zusammen. Jede Struktur enthält path und contents. Dadurch vergleicht eine Regel Werte über mehrere Dokumente hinweg und prüft Zusammenhänge wie Pod-Selector und Service-Label.

Konfigurationsquellen

Conftest lädt Einstellungen in der Reihenfolge Flags, Umgebungsvariablen und Konfigurationsdatei. Eine conftest.toml-Datei legt Pfade und Namensräume fest. Umgebungsvariablen nutzen das Präfix CONFTEST_. Der data-Parameter ergänzt externe JSON- oder YAML-Dateien.

Eine Richtlinie importiert diese Inhalte über data.<name>. Der ignore-Parameter filtert Dateien in komplexen Ordnerstrukturen über reguläre Ausdrücke.

Auswertung und Fehlercodes

Warnungen und Fehler besitzen unterschiedliche Rückgabecodes. Der fail-on-warn-Schalter erzwingt eine feinere Abstufung der Codes nach Hinweisen und Fehlern. Der trace-Schalter zeigt intern jede logische Evaluierung in Rego und erleichtert die Analyse von Policies mit mehreren Bedingungen. trace bleibt nur im Standardausgabemodus aktiv.

(ID:50632815)

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu RZ- und Server-Technik

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung. Die Einwilligungserklärung bezieht sich u. a. auf die Zusendung von redaktionellen Newslettern per E-Mail und auf den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern (z. B. LinkedIn, Google, Meta).

Aufklappen für Details zu Ihrer Einwilligung