
Сервис, который сканирует вашу инфраструктуру как код на предмет распространенных уязвимостей.
Сервис, который сканирует вашу инфраструктуру как код (Infrastructure as Code) на предмет распространённых уязвимостей.
| Аспект | Информация |
|---|---|
| Название инструмента | IaC Scan Runner |
| Docker-образ | [xscanner/runner] |
| Пакет PyPI | [iac-scan-runner] |
| Документация | [docs] |
| Связь с нами | [[email protected]] |
IaC Scan Runner — это REST API сервис, предназначенный для сканирования пакетов IaC (Infrastructure as Code) и выполнения различных проверок кода с целью поиска возможных уязвимостей и улучшений. Подробнее в [документации][docs].
В этом разделе объясняется, как запустить REST API.
Вы можете запустить REST API, используя публичный Docker-образ [xscanner/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 xscanner/runner
Или вы можете собрать образ локально и запустить его следующим образом:
# 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
Для запуска через CLI 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
Для локального запуска из исходного кода:
# 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
В этой части будет показано одно из возможных развёртываний и краткие примеры использования API-вызовов.
Сначала клонируем репозиторий [iac scan runner] и запускаем API.
$ git clone https://github.com/xlab-si/iac-scan-runner.git
$ docker compose up
После этого вы можете использовать различные конечные точки API, обращаясь к localhost:8000. Также можно перейти по адресу localhost:8000/swagger или localhost:8000/redoc и протестировать все конечные точки API там. В этом примере мы будем использовать curl для вызова конечных точек API.
curl -X 'POST' \
'http://0.0.0.0/project?creator_id=test' \
-H 'accept: application/json' \
-d ''
нам будет возвращён идентификатор проекта. Для этого примера идентификатор проекта — 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'
Вот и всё.
В определённый момент может потребоваться включить новые инструменты проверки в рабочий процесс сканирования, чтобы обеспечить более широкий охват стандартов IaC и типов проектов. Поэтому в данном подразделе описана последовательность необходимых шагов для этой цели. Однако шаги необходимо выполнять вручную, как будет описано, но в будущем планируется автоматизировать эту процедуру через API и предоставить удобный интерфейс, который поможет пользователю при импорте новых инструментов, становящихся частью доступного каталога, составляющего рабочий процесс сканирования. На рисунке 16 изображены необходимые шаги, которые нужно предпринять для расширения рабочего процесса сканирования новым инструментом.
Шаг 1 – Добавление класса, специфичного для инструмента, в каталог checks
Сначала необходимо добавить новый класс Python, специфичный для инструмента, в каталог checks внутри исходного кода IaC Scan Runner:
iac-scan-runner/src/iac_scan_runner/checks/new_tool.py
Класс нового инструмента наследует существующий класс Check, который обеспечивает обобщение инструментов рабочего процесса сканирования. Кроме того, необходимо предоставить реализацию следующих методов:
Шаг 2 – Добавление экземпляра класса инструмента проверки в конструкторе ScanRunner После того как новый класс, производный от Check, добавлен в исходный код IaC Scan Runner, необходимо также изменить исходный код его главного класса, называемого ScanRunner. Что касается изменений этого класса, сначала требуется импортировать класс, специфичный для инструмента, создать новый экземпляр класса инструмента проверки и добавить его в словарь проверок IaC внутри def init_checks(self). A. Импорт класса инструмента проверки from iac_scan_runner.checks.tfsec import TfsecCheck B. Создание нового экземпляра объекта инструмента проверки внутри init_checks """Initiate predefined check objects""" new_tool = NewToolCheck() C. Добавление его в словарь self.iac_checks внутри init_checks
self.iac_checks = {
new_tool.name: new_tool,
…
}