
Servizio che scansiona la tua Infrastructure as Code per vulnerabilità comuni.
Servizio che scansiona la tua Infrastructure as Code alla ricerca di vulnerabilità comuni.
| Aspetto | Informazioni |
|---|---|
| Nome strumento | IaC Scan Runner |
| Immagine Docker | [xscanner/runner] |
| Pacchetto PyPI | [iac-scan-runner] |
| Documentazione | [docs] |
| Contattaci | [[email protected]] |
IaC Scan Runner è un servizio API REST utilizzato per scansionare pacchetti IaC (Infrastructure as Code) ed eseguire vari controlli del codice al fine di individuare possibili vulnerabilità e miglioramenti. Esplora la [documentazione] per maggiori informazioni.
Questa sezione spiega come eseguire l'API REST.
Puoi eseguire l'API REST utilizzando l'immagine Docker pubblica [xscanner/runner] come segue:
# 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
Oppure puoi creare l'immagine localmente ed eseguirla come segue:
# 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
Per eseguire utilizzando la CLI di IaC Scan Runner:
# 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
Per eseguire localmente dal sorgente:
# 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
Questa parte mostrerà uno dei possibili deployment e brevi esempi su come utilizzare le chiamate API.
Per prima cosa cloneremo il repository [iac scan runner] ed eseguiremo l'API.
$ git clone https://github.com/xlab-si/iac-scan-runner.git
$ docker compose up
Dopo di che puoi utilizzare diversi endpoint API chiamando localhost:8000. Puoi anche navigare su localhost:8000/swagger o localhost:8000/redoc e testare tutti gli endpoint API lì. In questo esempio, useremo curl per chiamare gli endpoint API.
curl -X 'POST' \
'http://0.0.0.0/project?creator_id=test' \
-H 'accept: application/json' \
-d ''
Ci verrà restituito l'ID del progetto. Per questo esempio l'ID del progetto è 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'
Questo è tutto.
A un certo punto, potrebbe essere necessario includere nuovi strumenti di controllo nel workflow di scansione, con l'obiettivo di fornire una copertura più ampia degli standard IaC e dei tipi di progetto. Pertanto, in questa sottosezione, viene identificata e descritta una sequenza di passaggi necessari a tale scopo. Tuttavia, i passaggi devono essere eseguiti manualmente come descritto, ma si prevede di automatizzare questa procedura in futuro tramite API e fornire un'interfaccia user-friendly che assisterà l'utente durante l'importazione di nuovi strumenti che entreranno a far parte del catalogo disponibile che compone il workflow di scansione. La Figura 16 illustra i passaggi necessari da seguire per estendere il workflow di scansione con un nuovo strumento.
Step 1 – Aggiunta di una classe specifica per lo strumento nella directory checks
Innanzitutto, è necessario aggiungere una nuova classe Python specifica per lo strumento nella directory checks all'interno del codice sorgente di IaC Scan Runner:
iac-scan-runner/src/iac_scan_runner/checks/new_tool.py
La classe di un nuovo strumento eredita la classe Check esistente, che fornisce una generalizzazione degli strumenti del workflow di scansione. Inoltre, è necessario fornire l'implementazione dei seguenti metodi:
Step 2 – Aggiunta dell'istanza della classe dello strumento di controllo nel costruttore di ScanRunner Una volta che la nuova classe derivata da Check è stata aggiunta al codice sorgente di IaC Scan Runner, è necessario anche modificare il codice sorgente della sua classe principale, chiamata ScanRunner. Per quanto riguarda le modifiche di questa classe, è necessario prima importare la classe specifica dello strumento, creare una nuova istanza della classe dello strumento di controllo e aggiungerla al dizionario dei controlli IaC all'interno di def init_checks(self). A. Importazione della classe dello strumento di controllo from iac_scan_runner.checks.tfsec import TfsecCheck B. Creazione di una nuova istanza dell'oggetto strumento di controllo all'interno di init_checks """Initiate predefined check objects""" new_tool = NewToolCheck() C. Aggiunta al dizionario self.iac_checks all'interno di init_checks
self.iac_checks = {
new_tool.name: new_tool,
…
}