Критерии качества (Quality gate)
SQG (Security Quality Gate) - это контроль качества, используется для проверки безопасности продукта или репозитория.
SQG по умолчанию
На текущий момент в Vampy доступны 5 видов SQG - по умолчанию, низкий, средний, высокий и критический, в соответствии с критичностью продукта/репозитория.
Severity | Practice | Порог количества issue (по умолчанию) |
Порог количества issue (низкий) |
Порог количества issue (средний) |
Порог количества issue (высокий) |
Порог количества issue (критичный) |
---|---|---|---|---|---|---|
Критический | SAST | 0 | 10 | 5 | 0 | 0 |
Критический | DAST | 0 | 10 | 5 | 0 | 0 |
Критический | SCA | 0 | 20 | 10 | 0 | 0 |
Высокий | SAST | 0 | 20 | 10 | 5 | 0 |
Высокий | DAST | 0 | 20 | 10 | 5 | 0 |
Высокий | SCA | 10 | 80 | 40 | 20 | 10 |
Средний | SAST | 5 | 40 | 20 | 10 | 5 |
Средний | DAST | 5 | 40 | 20 | 10 | 5 |
Средний | SCA | 20 | 160 | 80 | 40 | 20 |
Низкий | SAST | 10 | 80 | 40 | 20 | 10 |
Низкий | DAST | 10 | 80 | 40 | 20 | 10 |
Низкий | SCA | 25 | 200 | 100 | 50 | 25 |
Примечание: в будущих версиях появится возможность создавать кастомные SQG.
Интерфейс
Когда вы открываете Продукты или Репозитории, вы можете увидеть под именем каждого элемента, прошел ли он контроль качества. Нажмите на стрелку справа, чтобы открыть боковую панель информации об элементе и проверить детали.
API
Чтобы убедиться, что продукт/репозиторий прошёл контроль качества:
-
Создайте пользователя-бота с правами Админ или Редактор и запишите сгенерированный токен (или обратитесь за этим к администратору платформы). Добавьте его в нужный репозиторий.
-
Запустите следующий запрос CURL:
curl -G "$SEC_VV_URL/ext/v1/quality_gate/" \
-H "Authentication: $SEC_VV_KEY" \
-d "product=$VAMPY_PRODUCT_SLUG" \
-d "repository=$VAMPY_REPO_SLUG" \
-d "repositoryBranch=$VAMPY_REPO_BRANCH" \
-d "slug=SQG-SLUG-HERE" \
- SEC_VV_UR - путь до сервера Vampy, например:
http://vmp-demo.corp.hexway.io/api/
; - SEC_VV_KEY - API токен бот-пользователя;
- VAMPY_PRODUCT_SLUG - Slug продукта, который проходит проверку качества;
- VAMPY_REPO_SLUG - Slug продукта, который проходит проверку качества. Равносильно
CI_PROJECT_PATH
; - VAMPY_REPO_BRANCH - ветка, для которой необходимо провести проверку SQG. Эквивалентно
CI_COMMIT_REF_NAME
; - slug - slug Security Quality Gate который будет использоваться для проверки соответствия качества
⚠️ Используйте только один слаг: для продукта или для репозитория, иначе вы получите ошибку.
В результате вы должны получить статус для контроля качества, выбранный в зависимости от критичности продукта/репозитория.
Статус контроля качества будет одним из 4-х вариантов:
- IN PROGRESS - этот статус означает, что SQG рассчитывается, и вам следует проверить его позже. После обработки изменений по одному из следующих пунктов;
- FAILED - это означает, что некоторые условия не были выполнены. Вы можете проверить ответ для получения деталей;
- SKIPPED - этот статус применяется в основном для условий, которые вы отключили. Если все условия были отключены, контроль качества будет автоматически пропущен.
- PASSED - процесс завершен успешно, контроль качества пройден.
- ERROR - возникла какая-то техническая проблема.
Примеры
Запрос:
curl -G "172.16.3.198/api/ext/v1/quality_gate/" \
-H "Authentication: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImJvdF91c2VyIiwiaWF0IjoxNzI4MzExNzQ0LjAwOTM0MX0.DrZtPm_aP6XfEDw1jNaZDQknIct0WGBCrUohbLJlo7w" \
-d "product=default" \
Ответ:
{
"id": "fb716e80-dab3-48bb-885b-de0c136549ff",
"status": "FAILED",
"lastCalculated": "2024-10-07T03:00:59.178413Z",
"relation": {
"name": "groenendael",
"slug": "product-7b66bed",
"id": "c43beb36-2079-43bf-8996-c940fd3e05fc",
"type": "PRODUCT"
},
"details": {
"name": "Default Quality Gate for criticality \"HIGH\"",
"slug": "default-quality-gate-high",
"criticality": "HIGH",
"conditions": [
{
"enabled": true,
"scannerTypes": [
"SAST"
],
"severities": [
"CRITICAL"
],
"maxValue": 0,
"currentValue": 0,
"status": "PASSED"
},
{
"enabled": true,
"scannerTypes": [
"DAST"
],
"severities": [
"CRITICAL"
],
"maxValue": 0,
"currentValue": 0,
"status": "PASSED"
},
{
"enabled": true,
"scannerTypes": [
"SCA"
],
"severities": [
"CRITICAL"
],
"maxValue": 0,
"currentValue": 0,
"status": "PASSED"
},
{
"enabled": true,
"scannerTypes": [
"SAST"
],
"severities": [
"HIGH"
],
"maxValue": 5,
"currentValue": 4,
"status": "PASSED"
},
{
"enabled": true,
"scannerTypes": [
"DAST"
],
"severities": [
"HIGH"
],
"maxValue": 5,
"currentValue": 0,
"status": "PASSED"
},
{
"enabled": true,
"scannerTypes": [
"SCA"
],
"severities": [
"HIGH"
],
"maxValue": 20,
"currentValue": 0,
"status": "PASSED"
},
{
"enabled": true,
"scannerTypes": [
"SAST"
],
"severities": [
"MEDIUM"
],
"maxValue": 10,
"currentValue": 80,
"status": "FAILED"
},
{
"enabled": true,
"scannerTypes": [
"DAST"
],
"severities": [
"MEDIUM"
],
"maxValue": 10,
"currentValue": 0,
"status": "PASSED"
},
{
"enabled": true,
"scannerTypes": [
"SCA"
],
"severities": [
"MEDIUM"
],
"maxValue": 40,
"currentValue": 0,
"status": "PASSED"
},
{
"enabled": true,
"scannerTypes": [
"SAST"
],
"severities": [
"LOW"
],
"maxValue": 20,
"currentValue": 106,
"status": "FAILED"
},
{
"enabled": true,
"scannerTypes": [
"DAST"
],
"severities": [
"LOW"
],
"maxValue": 20,
"currentValue": 0,
"status": "PASSED"
},
{
"enabled": true,
"scannerTypes": [
"SCA"
],
"severities": [
"LOW"
],
"maxValue": 50,
"currentValue": 0,
"status": "PASSED"
}
],
"errorMessage": ""
}
}