Skip to content

Критерии качества (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": ""
  }
}