API TRON.ASOC: Руководство по автоматизации
В разделе приведено описание ключевых API-запросов для настройки системы TRON.ASOC и примеры использования. Полная спецификация запросов доступна в Swagger UI по ссылке – https://{your-domain}/api/v1/swagger/index.html.
Базовая информация по каждому из запросов
Базовый URL: {your-domain}/api/v1.
Общие заголовки (Headers):
Content-Type: application/jsonAuthorization: Bearer {your_token}
Общие HTTP-коды ответов:
200 OK– Успешный запрос400 Bad request– Некорректные параметры запроса401 Unauthorized– Отсутствует или недействителен токен аутентификации403 Forbidden– Недостаточно прав для выполнения операции500 Internal Server Error– Внутренняя ошибка сервера
Типовой процесс настройки
Для первичной настройки с использованием базовых операций в системе достаточно использовать следующий список запросов:
api/v1/auth/login- вход в систему с использованием Логина/Пароляapi/v1/token– создание токенаapi/v1/role– создание ролиapi/v1/user– создание пользователяapi/v1/source– добавление источника сканированияapi/v1/sources-type/1/test– проверка подключения источникаapi/v1/tool– добавление инструментаapi/v1/project– создание проектаapi/v1/layer– создание слояapi/v1/quality-gate– создание контроля качестваapi/v1/security-rule– добавление правила безопасностиapi/v1/check– добавление проверки безопасности к слоюapi/v1/check/{{SecurityCheckId}}/run– запуск сканированияapi/v1/check/{{SecurityCheckId}}/stop- остановка сканированияapi/v1/issues?filter– получение списка выявленных проблемapi/v1/report– создание отчетаapi/v1/report/summary/download?– выгрузка отчета
Детализация запросов
Во всех примерах ниже:
{your-domain}необходимо заменить на используемый домен (например,my.asoc.tronasoc.ru).{{accessToken}}необходимо заменить на действительный JWT-токен (полученный через/auth/loginили созданный через/token).
Авторизация
Запрос: POST {{baseUrl}}/api/v1/auth/login
Назначение: Получение JWT-токена для последующих запросов (время жизни по умолчанию - 9 часов).
Тело запроса (Body):
username- имя пользователяpassword- пароль
Пример запроса:
curl --location 'https://{your-domain}/api/v1/auth/login' \
--header 'Content-Type: application/json' \
--data '{
"username": "username111",
"password": "123456778"
}'
Создание токена
Запрос: POST {{baseUrl}}/api/v1/token
Назначение: Создание долгосрочного API-токена для интеграций
В запросе необходимо задать следующее:
expires_at– дату истечения токенаname– имя токена
Пример запроса:
curl --location 'https://{your-domain}/api/v1/token' \
--header 'Content-Type: application/json' \
--data '{
"expires_at": "2028-12-31T23:59:34.911353Z",
"name": "DK Api Token"
}'
Создание роли
Запрос: POST {{baseUrl}}/api/v1/role
Назначение: Создание новой роли для пользователей
В запросе указать следующие переменные:
role_code– код ролиrole_name– название ролиroles– перечень настроек роли
Пример запроса:
curl --location 'https://{your-domain}/api/v1/role' \
--header 'Content-Type: application/json' \
--data '{
"role_code": "dev",
"role_name": "qa-s",
"roles":{"settings.authentication":["r","w","x","d"],
"administration.roles":["r","w","x","d"],
"administration.users":["r","w","x","d"]
}
}'
Создание пользователя
Запрос: POST {{baseUrl}}/api/v1/user
Назначение: Создание нового пользователя в системе
В запросе указываются следующие переменные
username– имя пользователяpassword– пароль пользователяpassword_confirmation– подтверждение пароля пользователяdisplay_name– отображаемое имяemail– адрес электронной почтыneed_password_change– требуется ли обновление пароля при входеactive_directory– является ли пользователем AD (Подробнее см. Аутентификация LDAP)roles– набор ролей
Пример запроса
curl --location 'https://{your-domain}/api/v1/user' \
--header 'Content-Type: application/json' \
--data-raw '{
"username": "User1",
"password": "******",
"password_confirmation": "******",
"display_name": "User1",
"email": "Username1@user.com",
"need_password_change": false,
"active_directory": false,
"roles": ["isoff"]
}'
Добавление источника сканирования
Запрос: POST {{baseUrl}}/api/v1/source
Назначение: Добавление источника сканирования (например, Git-репозитория)
Запрос на добавление источника сканирования включает следующие переменные:
name- имя источника сканированияdescription- описание источника сканированияsource_type_id- ID типа источника сканированияsettings- дополнительные настройки:url- url источникаbranch_name- название ветки источникаauth_method- метод аутентификации в источникеlogin- логин аутентификации в источникеpassword- пароль аутентификации в источнике
Пример запроса:
curl --location 'https://{your-domain}/api/v1/source' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data-raw '{
"name": "CLICustomSource_20241006T103832251Z_3",
"description": "CLICustomSource_20241006T103832251Z_3",
"source_type_id": 1,
"settings": {
"url": "https://ximilab.gitlab.yandexcloud.net/ximidev/tron-asoc/core",
"branch_name": "develop",
"auth_method": "Login/Password",
"login": "***",
"password": "***"
}
}'
Проверка подключения (Test connection) источника
Запрос: POST {{baseUrl}}/api/v1/sources-type/1/test
Также предусмотрена возможность отдельной проверки подключения к источнику CI/CD с указанием следующих переменных в настройках settings:
url- url источникаbranch_name- название ветки источникаauth_method- метод аутентификации в источникеlogin- логин аутентификации в источникеpassword- пароль аутентификации в источнике
Пример запроса:
curl --location 'https://{your-domain}/api/v1/sources-type/1/test' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data-raw '{
"settings": {
"url": "https://ximilab.gitlab.yandexcloud.net/ximidev/tron-asoc/core",
"branch_name": "develop",
"auth_method": "Login/Password",
"login": "***",
"password": "***"
}
}'
Добавление инструмента
Запрос: POST {{baseUrl}}/api/v1/tool
Назначение: Добавление инструмента безопасности
Для добавления инструмента необходимо указать переменные, в соответствии с требованиям инструмента (переменные отличаются в зависимости от выбранного инструмента).
Для инструмента PT AI необходимы следующие переменные в запросе:
scan_result_lang– язык результатов сканированияurl– url инструментаauth_method– метод аутентификацииapi_token– токен подключения к инструменту (кроме CLI-инструментов и Manual)
Пример запроса (PT AI):
curl --location 'https://{your-domain}/api/v1/tool' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
"description": "{{createSecurityToolDescription}}",
"type_id": 1,
"settings": {
"scan_result_lang": "EN",
"url": "{{PTAIUrl}}",
"auth_method": "Api Token",
"api_token": "{{PTAIApiToken}}"
}
}'
Создание Проекта
Запрос: POST {{baseUrl}}/api/v1/project
Назначение: Создание нового проекта
Для создания проекта необходимо указать следующие переменные в запросе в блоке data:
code- код проектаname- название проектаdescription- описание проектаtags– набор тегов проекта
Пример запроса:
curl --location 'https://{your-domain}/api/v1/project' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
"code": "ASOC967492",
"name": "ASOC967492",
"description": "Project ASOC967492"
"tags": ["tgasoc"]
}'
Пример запроса для создания проекта с кастомными полями:
curl --location 'https://{your-domain}/api/v1/project' \
--header 'Content-Type: application/json' \
--data '{
"code": "ASOC50733846",
"name": "ASOC50733846",
"description": "Test project ASOC50733846",
"tags": ["QA:test"],
"field_values": [
{"field_id": 421, "value": "QA"},
{"field_id": 422, "value": "2025-06-24T00:00:00Z"},
{"field_id": 423, "value": "72e9730b-4cbb-49a7-82ac-fa1f5cad7ab4"},
{"field_id": 424, "value": "https://ximilab.gitlab.yandexcloud.net/ximidev/tron-asoc/front"},
{"field_id": 425, "value": "5145fdca-072c-4672-a956-220f60192203"}
]
}'
Создание слоя
Запрос: POST {{baseUrl}}/api/v1/layer
Назначение: Создание слоя в проекте
В запросе необходимо указать следующие параметры:
name- названиеdescription- описаниеproject_code– код проектаlayer_type_id– тип слояis_template– признак создания слоя из шаблона
Пример запроса:
curl --location 'https://{your-domain}/api/v1/layer' \
--header 'Content-Type: application/json' \
--data '{
"name": "",
"description": "",
"project_code": "ASOC50733846",
"layer_type_id": 1,
"is_template": false
}'
Создание Контроля качества
Запрос: POST {{baseUrl}}/api/v1/quality-gate
Для создания контроля качества необходимо указать следующие переменные в запросе в блоке data:
name- название контроля качества
Пример запроса:
curl --location 'https://{your-domain}/api/v1/quality-gate' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
"name": "QG40701017"
}'
Для добавления условий в контроль качества необходимо указать следующие переменные в запросе в блоке data:
quality_gate_id- ID контроля качестваcondition_type- тип условияcondition_value- значение условияoperator- значение оператора условияvalue- значение по умолчанию
Пример запроса:
curl --location 'https://{your-domain}/api/v1/condition' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
"quality_gate_id": "6f50b8e7-e238-4640-28a7b87e4924",
"condition_type": "severity",
"condition_value": "4",
"operator": "not_greater_than",
"value": "0"
}'
Для добавления контроля качества к слою необходимо указать следующие переменные в запросе в блоке data:
layer_id- ID пайплайнаquality_gate_id- ID контроля качестваaction- действие по привязке контроля качества к слою
Пример запроса:
curl --location 'https://{your-domain}/api/v1/quality-gate/link-pipe' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
"layer_id": "b37012de-80ae-4e10-9178-eee6b609ddb0",
"quality_gate_id": "6f50b8e7-e238-4640-28a7b87e4924",
"action": "lock"
}'
Создание Правила безопасности
Запрос: POST {{baseUrl}}/api/v1/security-rule
Для создания правила безопасности необходимо указать следующие переменные в запросе в блоке data:
name- название правила безопасностиrule_params- параметры правила:instrument_type- тип инструментаtool_type_name- название инструментаcategory- категория инструментаcve- название CVEcwe- название CWEactive_for_all- область действия правила (для всех или нет)suppressing_status- статус исключения проблемы безопасностиexpiry_status- статус по истечении срока действия правила
Пример запроса:
curl --location 'https://{your-domain}/api/v1/security-rule' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
"name": "SR58594878",
"rule_params": {
"instrument_type": "Container Security",
"tool_type_name": "Kaspersky Container Security",
"category": "Container os dependency vulnerability",
"cve": "CVE-2023-52426",
"cwe": "CWE-776",
"active_for_all": false
},
"suppressing_status": 6,
"expiry_status": 3
}'
Добавление Проверки безопасности
Запрос: POST {{baseUrl}}/api/v1/check
Назначение: Создание проверки безопасности – связывает инструмент, источник и слой в проекте
Для добавления проверки безопасности в пайплайн необходимо указать следующие переменные в запросе в блоке data:
layer_id- ID слояproject_code- код проектаsecurity_tool_id- ID инструмента безопасностиtool_auth- параметры аутентификации инструмента безопасностиscan_result_lang- язык результата сканированияurl- url инструмента безопасностиauth_method- метод аутентификацииscan_source_id- ID источника сканированияsource_auth- параметры аутентификации источника сканированияurl- url источника сканированияauth_method- метод аутентификацииbranch_name- название ветки репозитория (источника сканирования)run_scan_task- параметры запуска сканированияtype- тип запуска сканирования
Пример запроса (PT AI и Gitlab):
curl --location 'https://{your-domain}/api/v1/check' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
"pipeline_id": "34e19795-517a-4c7a-bdaf83b74d51",
"project_code": "ASOC967492",
"security_tool_id": "e6d95be5-5939-4f41-7b31a5e0719d",
"tool_auth": {
"scan_result_lang": "EN",
"url": "***",
"auth_method": "Api Token",
"api_token": "***"
},
"scan_source_id": "0952f5d8-55af-4229--ffc179b7da20",
"source_auth": {
"url": "https://github.com/http-party/http-server",
"auth_method": "Anonymous",
"branch_name": "master"
},
"run_scan_task": {
"type": "manual"
}
}'
Примечание: В ответе этого запроса рекомендуется сохранить id созданной проверки (SecurityCheckId) для её последующего запуска (см. ниже).
Запуск сканирования
Запрос: POST {{baseUrl}}/api/v1/check/{{SecurityCheckId}}/run или POST {{baseUrl}}/api/v1/layer/{{LayerId}}/run
Назначение: Ручной запуск конкретной проверки безопасности или всего слоя
Для запуска сканирования необходимо указать в запросе SecurityCheckId - ID проверки безопасности или LayerId - ID слоя
Примеры запроса:
curl --location 'https://{your-domain}/api/v1/check/08bcc80e-a3fc-4ec3-91b4-dc34754d48e1/run' \
--header 'Authorization: Bearer {{accessToken}}'
curl --location 'https://{your-domain}/api/v1/layer/{{LayerId}}/run'
Остановка сканирования
Запрос: POST {{baseUrl}}/api/v1/check/{{SecurityCheckId}}/stop
Назначение: Ручная остановка сканирования конкретной проверки безопасности
Пример запроса:
curl --location --request POST 'https://{your-domain}/api/v1/check//stop'
Получение списка найденных проблем
Запрос: GET {{baseUrl}}/api/v1/issues?filter
Назначение: Получение отфильтрованного списка найденных уязвимостей
Для получения результатов сканирования необходимо указать фильтры для получения результатов. Для этого добавляется фильтр в запрос api/v1/issues?filter в следующем формате:
[tool]=PT%20Application%20Inspector&page=1&limit=10&filter[project_code]=ASOC96749244,
где tool - название инструмента, page - страница, limit - ограничение по количеству записей (по умолчанию 50), filter[project_code] - код проекта
Пример запроса:
curl --location 'https://{your-domain}/api/v1/issues?filter[tool]=PT%20Application%20Inspector&page=1&limit=10&filter[project_code]=ASOC96749244' \
--header 'Authorization: Bearer {{accessToken}}'
Создание отчета
Запрос: POST {{baseUrl}}/api/v1/report
Назначение: Асинхронное создание отчета
Для создания отчета необходимо указать следующие переменные в запросе в блоке data:
name- название отчетаtype- тип отчетаfilter- требуемые фильтры из доступных:period- выбранный период времениproject_code- код проекта
Пример запроса:
curl --location 'https://{your-domain}/api/v1/report' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
"name": "",
"type": "summary",
"filter": {
"period": "all",
"project_code": [ "ASOC96749244" ]
}
}'
Выгрузка отчета
Запрос: GET {{baseUrl}}/api/v1/report/summary/download?
Назначение: Выгрузка отчета в указанном формате
Для выгрузки отчета необходимо выполнить запрос со следующими параметрами:
format- формат отчета (pdf, csv, json)filter[project_code]- код проектаfilter[created_at_start]- дата начала периода отчетаfilter[created_at_end]- дата конца периода отчета
Пример запроса:
curl --location 'https://{your-domain}/api/v1/report/summary/download?format=csv&filter[project_code]=ISSUETESTING20241106T071418970Z%2CASOC52372013&filter[created_at_start]=2000-01-01&filter[created_at_end]=2025-01-20' \
--header 'Authorization: Bearer {{accessToken}}'