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), проверка завершается с ошибкой.