Prometheus
Правило типа Prometheus проверяет, соответствует ли указанная метрика заданному пороговому значению. В конфигурации указывается запрос PromQL, который должен возвращать результат типа Scalar или Vector с одним значением.
Поддерживается шаблонизация, например:
avg(ingress_nginx_detail_request_seconds_sum{location="/{{ .entity.slug }}"})В данном примере вместо выражения {{ .entity.slug }} подставится идентификатор сущности.
Параметры конфигурации
| Название | Описание | Возможные значения |
|---|---|---|
| Запрос | Запрос в формате PromQL к метрике в Prometheus | |
| Оператор | Оператор сравнения между результатом запроса и пороговым значением | Equal, NotEqual, LessThan, GreaterThan |
| Порог | Пороговое значение для сравнения с результатом запроса |
Для проверки каждой сущности выполняется отдельный запрос к Prometheus. Рекомендуется учитывать это при планировании нагрузки на систему.
Авторизация
Конфигурация авторизации описана в разделе внешний сервис Prometheus.
Gitlab Pipeline
Правило типа GitlabPipeline проверяет, соответствует ли статус последнего pipeline в Gitlab для выбранного Ref (ветка или тег) заданному статусу.
Во всех текстовых полях поддерживается шаблонизация, например, при подобном выражении в поле Ref:
{{ .entity.properties.mainBranch }}во время проверки подставится значение параметра mainBranch проверяемой сущности.
Параметры конфигурации
| Название | Описание | Возможные значения |
|---|---|---|
| ID проекта | ID проекта в Gitlab | |
| Ref | Ветка или тег для которых будет искаться последний pipeline | |
| Статус | Статус pipeline, который будет считаться успешным | created, waiting_for_resource, preparing, pending, running, success, failed, canceled, skipped, manual, scheduled |
Для проверки каждой сущности выполняется отдельный запрос к Gitlab. Рекомендуется учитывать это при планировании нагрузки на систему.
Авторизация
Конфигурация авторизации описана в разделе внешний сервис GitLab.
DefectDojo Findings
Правило типа DefectDojoFindings выполняет проверку по количеству активных уязвимостей различной критичности (severity) для заданного продукта в DefectDojo.
Проверка проводится по условиям в блоке conditions, где можно указать ожидаемое количество уязвимостей для каждой severity и оператор сравнения (например, Critical < 5).
Во всех текстовых полях поддерживается шаблонизация. Например, можно подставить название продукта из параметров сущности:
{{ .entity.properties.defectdojo_product_key }}Параметры конфигурации
| Название | Описание | Возможные значения |
|---|---|---|
| Название продукта | Идентификатор продукта в DefectDojo | |
| Условия | Условия для сравнения количества уязвимостей по severity |
Условия
Каждое условие представляет объект следующей формы:
conditions:
- severity: Critical
operator: "<"
value: "5"
- severity: High
operator: "<="
value: "10"| Поле | Описание | Возможные значения |
|---|---|---|
| Уровень критичности | Уровень критичности | Total, Critical, High, Medium, Low, Info |
| Оператор | Оператор сравнения | ==, !=, <, <=, >, >= |
| Значение | Целевое значение для сравнения |
Авторизация
Конфигурация авторизации описана в разделе внешний сервис DefectDojo.
CodeScoring Vulnerabilities
Правило типа CodeScoringVulnerabilities выполняет проверку по количеству уязвимостей различной критичности (severity) для заданного проекта в CodeScoring.
Проверка проводится по условиям в блоке conditions, где можно указать ожидаемое количество уязвимостей для каждой severity и оператор сравнения. Поддерживается проверка как по CVSS2, так и по CVSS3 метрикам.
Во всех текстовых полях поддерживается шаблонизация. Например, можно подставить ID проекта из параметров сущности:
{{ .entity.properties.codescoring_project_id }}Параметры конфигурации
| Название | Описание | Возможные значения |
|---|---|---|
| ID проекта | Идентификатор проекта в CodeScoring | |
| Условия | Условия для сравнения количества уязвимостей по severity |
Условия
Каждое условие представляет объект следующего формата:
conditions:
- severity: CRITICAL
operator: "<"
value: "5"
cvss: "cvss3"
- severity: HIGH
operator: "<="
value: "10"
cvss: "cvss2"| Поле | Описание | Возможные значения |
|---|---|---|
| Уровень критичности | Уровень критичности | Для CVSS3: CRITICAL, HIGH, MEDIUM, LOW, NONE, UNKNOWN. Для CVSS2: HIGH, MEDIUM, LOW, NONE |
| Оператор | Оператор сравнения | ==, !=, <, <=, >, >= |
| Значение | Целевое значение для сравнения | |
| CVSS | Версия CVSS метрики | cvss2, cvss3 |
Авторизация
Конфигурация авторизации описана в разделе внешний сервис CodeScoring.
SonarQube Metrics
Правило типа SonarqubeMetrics выполняет проверку по метрикам проекта в SonarQube на основании заданных условий.
Проверка выполняется с использованием REST API вызова SonarQube /api/measures/component, где сравниваются текущие значения указанных метрик c ожидаемыми значениями, заданными в разделе «Условия».
Во всех текстовых полях поддерживается шаблонизация, например, можно подставить ключ компонента из параметров сущности:
{{ .entity.properties.sonarqube_project_key }}Параметры конфигурации
| Название | Обязательность | Описание | Возможные значения |
|---|---|---|---|
| Ключ проекта | Да | Идентификатор проекта в SonarQube | |
| Ветка | Нет | Ветка проекта для которой будут браться метрики | |
| Условия | Да | Условия для сравнения метрик в SonarQube |
Условия
Каждое условие представляет объект следующей формы:
conditions:
- metric: coverage
operator: "<"
value: "5"
- metric: bugs
operator: "<="
value: "10"| Поле | Описание | Возможные значения |
|---|---|---|
| Метрика | Метрика SonarQube. В конфигурации указывается Metric key | См. список метрик в официальной документации SonarQube |
| Оператор | Оператор сравнения | ==, !=, <, <=, >, >= |
| Значение | Целевое значение для сравнения |
Список возможных метрик для текущей версии SonarQube.
Авторизация
Конфигурация авторизации описана в разделе внешний сервис SonarQube.
SonarQube Quality Gate
Правило типа SonarqubeQualityGate проверяет статус Quality Gate проекта в SonarQube. Проверка выполняется с использованием REST API вызова SonarQube /api/qualitygates/project_status.
Правило возвращает true (выполняется), если Quality Gate проекта имеет статус OK, и false (не выполняется) во всех остальных случаях (статусы WARN, ERROR, NONE).
Во всех текстовых полях поддерживается шаблонизация, например, можно подставить ключ проекта из параметров сущности:
{{ .entity.properties.sonarqube_project_key }}Параметры конфигурации
| Название | Обязательность | Описание | Возможные значения |
|---|---|---|---|
| Ключ проекта | Да | Идентификатор проекта в SonarQube | |
| Ветка | Нет | Ветка проекта для которой будет проверяться Quality Gate. Если не указана, проверяется основная ветка |
Для проверки каждой сущности выполняется отдельный запрос к SonarQube. Рекомендуется учитывать это при планировании нагрузки на систему.
Авторизация
Конфигурация авторизации описана в разделе внешний сервис SonarQube.
URL
Правило типа URL проверяет доступность HTTP/HTTPS-эндпоинта: отправляется запрос с заданными параметрами, результат оценивается по одному или нескольким условиям — выражениям Go template. В условиях можно проверять код ответа, заголовки, тело ответа и параметры сущности.
Во всех строковых полях (URL, тело запроса, заголовки) доступна шаблонизация с подстановкой данных сущности (.entity), например: {{ .entity.slug }}.
Параметры конфигурации
| Название | Обязательность | Описание | Примеры |
|---|---|---|---|
| URL | Да | Полный адрес, по которому выполняется запрос | https://example.com |
| Метод | Нет | HTTP-метод запроса | GET, POST |
| Query | Нет | Значение query, подставляемое в исходящий запрос | |
| Сохранять детали | Нет | Если включено — в таблице проверок сохраняются и отображаются тело ответа и статус (код, заголовки). Если выключено — только условие, результат и ошибка | |
| Условия | Нет | Выражения Go template, по которым оценивается ответ | См. ниже |
| При нескольких условиях | Нет | AllOf — должны выполниться все условия; AnyOf — достаточно одного | AllOf, AnyOf |
| Тело запроса | Нет | Тело запроса в формате YAML. После подстановки шаблонов преобразуется в JSON и отправляется |
Если условия не заданы, по умолчанию используется проверка кода ответа 200: {{ eq .status.code 200 }}.
Условия
В условиях доступны:
.status— данные ответа:.status.code(код HTTP),.status.status(строка статуса),.status.headers(заголовки),.status.contentLength..status.headers— карта «название заголовка → массив значений» (названия в нижнем регистре). Пример: первый элемент заголовка —{{ index (index .status.headers "content-type") 0 }}; перебор —{{ range index .status.headers "set-cookie" }}...{{ end }}..response— тело ответа с приведёнными типами (для JSON-ответа)..entity— параметры проверяемой сущности.
Примеры условий:
{{ eq .status.code 200 }}
{{ eq (index (index .status.headers "content-type") 0) "application/json" }}
{{ gt .status.contentLength 0 }}Пример тела запроса
Поле «Тело запроса» задаётся в формате YAML. Пример:
id: "{{ .entity.id }}"
name: "{{ .entity.name }}"Проверка результата
Проверка считается успешной, если при режиме AllOf выполняются все условия, при AnyOf — хотя бы одно. Если при вычислении условия возникает ошибка (например, ответ не в JSON, а в условии используется .response), проверка завершается с ошибкой.