
Dienst, der Ihre Infrastructure as Code auf häufige Schwachstellen scannt.
Dienst, der Ihre Infrastructure as Code auf häufige Schwachstellen scannt.
| Aspekt | Information |
|---|---|
| Toolname | IaC Scan Runner |
| Docker-Image | [xscanner/runner] |
| PyPI-Paket | [iac-scan-runner] |
| Dokumentation | [docs] |
| Kontakt | [[email protected]] |
Der IaC Scan Runner ist ein REST-API-Dienst, der zum Scannen von IaC-Paketen (Infrastructure as Code) und zur Durchführung verschiedener Code-Checks verwendet wird, um mögliche Schwachstellen und Verbesserungen zu finden. Weitere Informationen finden Sie in den [docs].
In diesem Abschnitt wird erklärt, wie die REST-API ausgeführt wird.
Sie können die REST-API mit dem öffentlichen Docker-Image [xscanner/runner] wie folgt ausführen:
# run IaC Scan Runner REST API in a Docker container and
# navigate to localhost:8080/swagger or localhost:8080/redoc
$ docker run --name iac-scan-runner -p 8080:80 xscanner/runner
Oder Sie können das Image lokal erstellen und wie folgt ausführen:
# build Docker container (it will take some time)
$ docker build -t iac-scan-runner .
# run IaC Scan Runner REST API in a Docker container and
# navigate to localhost:8080/swagger or localhost:8080/redoc
$ docker run --name iac-scan-runner -p 8080:80 iac-scan-runner
So führen Sie es mit der IaC Scan Runner CLI aus:
# install the CLI
$ python3 -m venv .venv && . .venv/bin/activate
(.venv) $ pip install iac-scan-runner
# print OpenAPI specification
(.venv) $ iac-scan-runner openapi
# install prerequisites
(.venv) $ iac-scan-runner install
# run IaC Scan Runner REST API
(.venv) $ iac-scan-runner run
So führen Sie es lokal aus dem Quellcode aus:
# Export env variables
export MONGODB_CONNECTION_STRING=mongodb://localhost:27017
export SCAN_PERSISTENCE=enabled
export USER_MANAGEMENT=enabled
# Setup MongoDB
$ docker run --name mongodb -p 27017:27017 mongo
# install prerequisites
$ python3 -m venv .venv && . .venv/bin/activate
(.venv) $ pip install -r requirements.txt
(.venv) $ ./install-checks.sh
# run IaC Scan Runner REST API (add --reload flag to apply code changes on the way)
(.venv) $ uvicorn src.iac_scan_runner.api:app
Dieser Teil zeigt eine der möglichen Bereitstellungen und kurze Beispiele zur Verwendung von API-Aufrufen.
Zuerst klonen wir das Repository [iac scan runner] und starten die API.
$ git clone https://github.com/xlab-si/iac-scan-runner.git
$ docker compose up
Danach können Sie verschiedene API-Endpunkte durch Aufrufen von localhost:8000 verwenden. Sie können auch zu localhost:8000/swagger oder localhost:8000/redoc navigieren und dort alle API-Endpunkte testen. In diesem Beispiel verwenden wir curl zum Aufrufen von API-Endpunkten.
curl -X 'POST' \
'http://0.0.0.0/project?creator_id=test' \
-H 'accept: application/json' \
-d ''
Die Projekt-ID wird uns zurückgegeben. In diesem Beispiel ist die Projekt-ID 1e7b2a91-2896-40fd-8d53-83db56088026.
curl -X 'PUT' \
'http://0.0.0.0:8000/projects/1e7b2a91-2896-40fd-8d53-83db56088026/checks/ansible-lint/disable' \
-H 'accept: application/json'
curl -X 'POST' \
'http://0.0.0.0:8000/projects/1e7b2a91-2896-40fd-8d53-83db56088026/scan?scan_response_type=json' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F '[email protected];type=application/zip'
Das war's.
Irgendwann kann es erforderlich sein, neue Prüfwerkzeuge in den Scan-Workflow aufzunehmen, um eine breitere Abdeckung von IaC-Standards und Projekttypen zu ermöglichen. Daher wird in diesem Unterabschnitt eine Folge der erforderlichen Schritte für diesen Zweck identifiziert und beschrieben. Die Schritte müssen jedoch manuell durchgeführt werden, wie beschrieben, aber es ist geplant, dieses Verfahren in Zukunft über die API zu automatisieren und eine benutzerfreundliche Oberfläche bereitzustellen, die den Benutzer beim Importieren neuer Werkzeuge unterstützt, die Teil des verfügbaren Katalogs werden, der den Scan-Workflow ausmacht. Abbildung 16 zeigt die erforderlichen Schritte, die unternommen werden müssen, um den Scan-Workflow um ein neues Werkzeug zu erweitern.
Schritt 1 – Hinzufügen einer werkzeugspezifischen Klasse zum checks-Verzeichnis
Zuerst muss eine neue werkzeugspezifische Python-Klasse zum checks-Verzeichnis im Quellcode des IaC Scan Runners hinzugefügt werden:
iac-scan-runner/src/iac_scan_runner/checks/new_tool.py
Die Klasse eines neuen Werkzeugs erbt die vorhandene Check-Klasse, die eine Verallgemeinerung der Scan-Workflow-Werkzeuge bereitstellt. Darüber hinaus ist es notwendig, die Implementierung der folgenden Methoden bereitzustellen:
Schritt 2 – Hinzufügen der Check-Tool-Klasseninstanz innerhalb des ScanRunner-Konstruktors Sobald die neue von Check abgeleitete Klasse zum Quellcode des IaC Scan Runners hinzugefügt wurde, muss auch der Quellcode seiner Hauptklasse, genannt ScanRunner, modifiziert werden. Bei Änderungen dieser Klasse ist es erforderlich, zuerst die werkzeugspezifische Klasse zu importieren, eine neue Instanz der werkzeugspezifischen Check-Tool-Klasse zu erstellen und sie zum Wörterbuch der IaC-Checks innerhalb von def init_checks(self) hinzuzufügen. A. Importieren der Check-Tool-Klasse from iac_scan_runner.checks.tfsec import TfsecCheck B. Erstellen einer neuen Instanz des Check-Tool-Objekts innerhalb von init_checks """Initiate predefined check objects""" new_tool = NewToolCheck() C. Hinzufügen zum self.iac_checks-Wörterbuch innerhalb von init_checks
self.iac_checks = {
new_tool.name: new_tool,
…
}