
Обнаруживайте нарушения соответствия и безопасности в Инфраструктуре как код, чтобы снизить риски перед предоставлением облачной нативной инфраструктуры.
- Этот проект больше не поддерживается. Репозиторий заархивирован, и дальнейшие обновления, проблемы или запросы на слияние приниматься не будут.
- Вы можете форкнуть его, если хотите продолжить разработку.

Terrascan — это статический анализатор кода для инфраструктуры как код (Infrastructure as Code). Terrascan позволяет:
Чтобы попробовать Terrascan в браузере, посетите песочницу Terrascan: https://www.tenable.com/terrascan
Чтобы узнать больше о функциях и возможностях Terrascan, посетите портал документации: https://runterrascan.io
Присоединяйтесь к сообществу Tenable 👇
Terrascan поддерживает несколько способов установки, также доступен в виде Docker-образа. Смотрите страницу релизов Terrascan для последней версии сборок для всех поддерживаемых платформ. Выберите подходящий бинарный файл для вашей платформы.
curl -L "$(curl -s https://api.github.com/repos/tenable/terrascan/releases/latest | grep -o -E "https://.+?_Linux_x86_64.tar.gz")" > terrascan.tar.gz
tar -xf terrascan.tar.gz terrascan && rm terrascan.tar.gz
sudo install terrascan /usr/local/bin && rm terrascan
terrascan
AURПользователи ArchLinux и Manjaro могут установить командой:
yay -S terrascan
brewПользователи Homebrew могут установить командой:
$ brew install terrascan
Terrascan также доступен в виде Docker-образа и может использоваться следующим образом:
$ docker run tenable/terrascan
Обратитесь к документации для получения информации.
Чтобы просканировать ваш код на наличие проблем безопасности, выполните следующую команду (по умолчанию сканируется Terraform).
$ terrascan scan
Примечание: Terrascan завершится с кодом ошибки, если во время сканирования будут обнаружены ошибки или нарушения.
| Сценарий | Код завершения |
|---|---|
| сводка сканирования содержит ошибки и нарушения | 5 |
Terrascan может быть интегрирован в конвейеры CI/CD для обеспечения соблюдения лучших практик безопасности. Пожалуйста, обратитесь к нашей документации по интеграции с вашим конвейером.
Вы можете использовать команду terrascan со следующими опциями:
$ terrascan
Terrascan
Использование:
terrascan [команда]
Доступные команды:
help Справка по любой команде
init Инициализация Terrascan
scan Обнаружение нарушений соответствия и безопасности в инфраструктуре как код.
server Запуск Terrascan в качестве API-сервера
version Версия Terrascan
Флаги:
-c, --config-path string путь к файлу конфигурации
-h, --help справка для terrascan
-l, --log-level string уровень логирования (debug, info, warn, error, panic, fatal) (по умолчанию "info")
-x, --log-type string тип вывода логов (console, json) (по умолчанию "console")
-o, --output string тип вывода (human, json, yaml, xml) (по умолчанию "human")
Используйте "terrascan [команда] --help" для получения дополнительной информации о команде.
Политики Terrascan написаны с использованием языка политик Rego. Каждый rego включает JSON-файл "rule", который определяет метаданные для политики. По умолчанию Terrascan загружает политики из репозиториев Terrascan при первом сканировании. Однако, если вы хотите загрузить последние политики, вам необходимо запустить процесс инициализации. Смотрите Использование для получения информации о процессе инициализации.
Примечание: Команда scan неявно запустит процесс инициализации, если политики не найдены.
Вы можете использовать флаг --find-vuln для сбора уязвимостей, сообщённых в реестре, в составе вывода Terrascan. В настоящее время Terrascan поддерживает Elastic Container Registry (ECR), Azure Container Registry, Google Container Registry и Google Artifact Registry.
Флаг --find-vuln можно использовать при сканировании файлов IaC следующим образом:
$ terrascan scan -i <провайдер IaC> --find-vuln
Для получения дополнительной информации и объяснения того, как настроить вашу среду для аутентификации с API реестра, смотрите документацию по использованию.
По умолчанию Terrascan сканирует всю вашу конфигурацию на соответствие всем политикам. Однако Terrascan поддерживает детальную настройку политик и ресурсов.
Узнайте больше о встроенной в файлы инструментации и файле конфигурации на нашем сайте документации.
А пока несколько быстрых советов:
Вы можете настроить Terrascan на пропуск определённой политики (правила) при сканировании ресурса. Выполните следующие действия в зависимости от вашей платформы:
Используйте скрипты Terraform, чтобы настроить Terrascan на пропуск правил, вставив комментарий с фразой "ts:skip=<ИМЯ_ПРАВИЛА><ПРИЧИНА_ПРОПУСКА>". Комментарий должен быть размещён внутри ресурса, как показано в примере ниже.

В YAML-файлах Kubernetes вы можете настроить Terrascan на пропуск политик, добавив аннотацию, как показано в фрагменте ниже.

Используйте файл конфигурации Terrascan, чтобы вручную выбрать политики, которые должны быть включены или исключены из всего сканирования. Это подходит для краевых случаев использования. Используйте опцию подавления "в файле", чтобы указать ресурсы, которые должны быть исключены из проверки выбранными политиками. Это гарантирует, что политики пропускаются только для определённых ресурсов, а не для всех.

Вывод Terrascan по умолчанию — это список нарушений, присутствующих в сканируемом IaC. Пример вывода:

Terrascan можно собрать локально. Это полезно, если вы хотите быть на последней версии или при разработке Terrascan. Требуются gcc и Go версии 1.19 или выше.
$ git clone [email protected]:tenable/terrascan.git
$ cd terrascan
$ make build
$ ./bin/terrascan
FROM golang:alpine AS build-env
RUN apk add --update git
RUN git clone https://github.com/tenable/terrascan && cd terrascan \
&& CGO_ENABLED=0 GO111MODULE=on go build -o /go/bin/terrascan cmd/terrascan/main.go
Чтобы узнать больше о разработке и внесении вклада в Terrascan, обратитесь к руководству по внесению вклада.
Мы верим, что открытое и инклюзивное сообщество приносит пользу всем нам. Пожалуйста, обратите внимание, что этот проект выпущен с Кодексом поведения участника. Участвуя в этом проекте, вы соглашаетесь соблюдать его условия.
Terrascan лицензирован в соответствии с Лицензией Apache 2.0.
| сводка сканирования содержит ошибки, но без нарушений |
| 4 |
| сводка сканирования содержит нарушения, но без ошибок | 3 |
| сводка сканирования не содержит ни нарушений, ни ошибок | 0 |
| ошибка команды сканирования из-за неверных входных данных | 1 |