API
Куда я попал?
Для автоматического взаимодействия с SECURITM и других приложений, скриптов и коннекторов (например, Apache NiFi), используется JSON REST API, API позволяет взаимодействовать с модулями "Активы" и "Технические уязвимости". Для авторизации подключения к SECURITM по API используются API-токены. Для доступа к управлению API токенами нужно обладать ролью Администратор команды.
Управление токенами
Для управлениями токенами:
- Зайдите в Профиль команды ➡️ Api токены
- Доступные действия
- Создание токена (по кнопке Создать токен справа вверху)
- Копирование токена в буфер
- Редактирование токена
- Удаление токена
- Для создания токена необходимо заполнить поля:
- Название.
- Описание.
- IP. Необязательное поле. При необходимости указать IP для ограничения предоставления данных по адресу. Пустое поле позволяет предоставлять данные по любым адресам.
- Права доступа. Для добавления прав необходимо выбрать:
- Модуль. Доступные значения Активы (модуль Активы) и Уязвимости (модуль Технические уязвимости).
- Права. Доступные значения: просмотр, создание, обновление, удаление, импорт.
- нажать кнопку Добавить.
- При создании токена для импорта потребуется указать шаблон импорта в поле Шаблон для импорта активов или Сканер для импорта уязвимостей.
Права доступа
При использовании токена для модуля Активы:
- просмотр - получение активов;
- создание - создание активов;
- обновление - обновление активов;
- удаление - удаление активов;
- импорт - данная настройка в рамках модуля. Активы- это выбор шаблона импорта активов. Есть возможность выбора как отдельного шаблона, так и "Все шаблоны".
При создании токена для импорта активов недостаточно указать только права импорт. Требуется добавить набор прав в соответствии с режимом импорта указанном в шаблоне. Например, для шаблона "Шаблон SECURITM" у которого режим импорта "Создание и обновление", нам необходимо указать права у токена импорт, создание и обновление.
При использовании токена для модуля Уязвимости:
- просмотр - получение уязвимостей;
- создание - создание уязвимостей;
- обновление - обновление уязвимостей;
- удаление - удаление уязвимостей;
- импорт - в рамках модуля Уязвимости - это выбор сканера от которого мы грузим файл. Есть возможность выбора как отдельного сканера, так и "Все сканеры".
При создании токена для импорта уязвимостей недостаточно указать только права импорт, требуется дополнительно указать права на создание.
Миграция прав предыдущих токенов
В предыдущих версиях сервиса управление токенами доступа API происходило в разделе Профиль команды ➡️ Общее. Права токенов созданных в предыдущих версиях преобразуются по следующему правилу - токен с полными правами преобразуется в токен для импорта активов с правами просмотр, создание, обновление, удаление, импорт. В поле Шаблон для такого токена указывается значение Все шаблоны. Токен с правами на чтение получает только права просмотр.
Аутентификация
Для авторизации в сервисе для работы с активами можно использовать два способа:
1. Передача токена в GET запросе
1. Передача токена в GET запросе
https://service.securitm.ru/api/v1/[API method]?token=[token uid]&[API method params]
Внимание: способ передача токена в GET запросе небезопасен и может привести к его разглашению, этот способ следует использовать только в защищенной среде.
2. Передача токена в заголовке запроса (Token-Based Authentication, Bearer Authentication):
2. Передача токена в заголовке запроса (Token-Based Authentication, Bearer Authentication):
'Authorization' = "Bearer [TOKEN]"
Активы
Импорт активов
POST запрос для импорта активов
https://service.securitm.ru/api/v1/assets/import
Для проведения импорта активов в SECURITM по API нужно
- Создать API токен
Токен указывается в заголовке запроса - Создать или выбрать шаблон импорта
Название или UUID шаблона нужно добавить в тело запроса в параметр template
Шаблоны импорта позволяют провести парсинг и логическую обработку любых данных, связав их с активами в SECURITM. Указание названия или UUID шаблона импорта обязательно в API запросе. - Сформировать набор данных и поместить его в раздел assets API запроса
Примеры скриптов для проведения импорта активов в SECURITM:
Скрипт на PowerShell, проводящий импорт активов любых типов. Используется Шаблон SECURITM
Скрипт на PowerShell, проводящий импорт активов любых типов. Используется Шаблон SECURITM
# Укажите API Token для подключения (создается в профиле команды)
$token = '[TOKEN]'
# Укажите Шаблон, который будет использоваться для парсинга данных
$template = 'Шаблон SECURITM'
# Если у вас подписка Professional - укажите адрес вашего сервера SECURITM
$url = 'https://service.securitm.ru/api/v1/assets/import'
$headers = @{
'Authorization' = "Bearer $token"
}
$requestBody = [PSCustomObject]@{
'template' = $template
'assets' = @(
[ordered]@{
'Тип' = 'Работник'
'Название' = 'Иванов Иван Иванович'
'Описание' = 'Тестовый пользователь для импорта по API'
'Приоритет' = 'Низкий'
'Расположение' = 'Центральный офис'
'Подразделение' = 'Отдел информационной безопасности'
'Должность' = 'Специалист'
'Mail' = 'test@securitm.ru'
},
[ordered]@{
'Тип' = 'Операционная система'
'Название' = 'myserver.domain.local - 192.168.1.1'
'Описание' = 'Тестовый сервер для импорта по API'
'Приоритет' = 'Низкий'
'Расположение' = 'Центральный офис'
'Администратор' = 'Иванов Иван Иванович'
'IP адрес' = '192.168.1.1'
'Hostname' = 'myserver'
'Домен' = 'domain.local'
}
) } | ConvertTo-Json -Depth 3
try {
$response = Invoke-RestMethod -Method Post -Uri $url -ContentType "application/json; charset=utf-8" -Headers $headers -Body $requestBody
Write-Host ($response | ConvertTo-Json -Depth 10)
} catch {
Write-Host 'Status code:' $_.Exception.Response.StatusCode.Value__
$result = $_.Exception.Response.GetResponseStream()
$reader = New-Object System.IO.StreamReader($result)
$reader.BaseStream.Position = 0
$reader.DiscardBufferedData()
$responseBody = $reader.ReadToEnd()
Write-Host $responseBody
} finally {
if ($result) {
$result.Close()
}
if ($reader) {
$reader.Close()
}
}
Скрипт на Python, проводящий импорт активов любых типов. Используется Шаблон SECURITM
Скрипт на PowerShell для сбора активов (пользователей, компьютеров, групп, состава групп) из локального Active Directory и импорта по API в SECURITM.
Перед импортом нужно добавить в команду следующие типы активов: Работник, Группа LDAP, Windows Server (включая подтипы для конкретных версий ОС)
Используются шаблоны импорта
- Active Directory Users
- Active Directory Computers
- Active Directory Groups
- Active Directory Group members
Скрипт на PowerShell который обрабатывает CSV файл выгруженный из Центра управления DrWeb, нормализует его и загружает в SECURITM по API с использованием Community шаблона DrWeb CSV + API
# Скрипт для импорта в SECURITM хостов и статуса антивирусной защиты из DrWeb
# Из DrWeb экспортируются данные по хостам в CSV файл
# На сервере SECURITM используется Community шаблон "DrWeb CSV + API"
# Укажите API Token для подключения (создается в профиле команды)
$globalToken = '[TOKEN]'
# Укажите Шаблон, который будет использоваться для парсинга данных
$globalTemplate = 'DrWeb CSV + API'
# Если у вас подписка Professional - укажите адрес вашего сервера SECURITM
$globalUrl = 'https://service.securitm.ru/api/v1/assets/import'
# Укажите путь до CSV файла с выгрузкой данных из DrWeb
# Формат файла:
# Station;Groups;Address;MAC address
# mysrv.mydomain.local;Linux;ssl://192.168.1.1:41334;00:0c:29:f1:f5:c7
$csvFile = "c: mpdrweb.csv"
# Функция парсинга файла DrWeb
function Get-DrWebDataFromCSV {
$objects = @()
$data = Import-Csv -Path $csvFile -Delimiter ";"
foreach ($row in $data) {
# Создаем объект с данными из каждой строки
$object = [PSCustomObject]@{
hostname = $row.Station -replace "..*"
domain = if(($row.Station).Contains('.')) {($row.Station).Substring(($row.Station).IndexOf(".")+1)} Else {''}
assettype = $row.Groups
ip = $row.Address -replace ".*ssl://" -replace ":.*"
mac = $row.'MAC address'
is_av_installed = 1;
note = 'Импорт из DrWeb CSV'
name = "$($row.Station) - $($row.Address -replace '.*ssl://' -replace ':.*')"
}
# Добавляем объект в массив
$objects += $object
}
return $objects;
}
# Функция импорта данных в SECURITM
function Send-ObjectsToApi {
param (
[Parameter(Mandatory = $true)]
[array]$objects,
[Parameter(Mandatory = $true)]
[string]$template
)
Write-Host "Отправляем API запросы в SECURITM по шаблону $($template)"
# Определение заголовков запроса
$headers = @{
'Authorization' = "Bearer $globalToken"
}
# Инициализация индекса и размера секции объектов
$idx = 0
$size = 100
# Цикл по объектам в массиве
while ($($size * $idx) -lt $objects.Length){
Write-Host "$($idx*$size) - $(($idx+1)*$size) объектов"
# Получение секции объектов заданного размера
$section = $objects | Select-Object -First $size -Skip ($size * $idx)
$idx ++
# Создание тела запроса в формате JSON
$requestBody = [PSCustomObject]@{
'template' = $template
'assets' = @($section)
} | ConvertTo-Json -Depth 3
try {
# Если включена HTTPS инспекция
[Net.ServicePointManager]::ServerCertificateValidationCallback = { $true }
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
# Отправка POST-запроса на URL с заданными параметрами
$response = Invoke-RestMethod -Method Post -Uri $globalUrl -ContentType "application/json; charset=utf-8" -Headers $headers -Body $requestBody
Write-Host ($response | ConvertTo-Json -Depth 10)
} catch {
if($_.Exception) {
Write-Host 'Status code:' $_.Exception.Response.StatusCode.Value__
$result = $_.Exception.Response.GetResponseStream()
$reader = New-Object System.IO.StreamReader($result)
$reader.BaseStream.Position = 0
$reader.DiscardBufferedData()
$responseBody = $reader.ReadToEnd()
} else {
Write-Host 'Unexpected error, may be timeout'
}
Write-Host $responseBody
} finally {
if ($result) {
$result.Close()
}
if ($reader) {
$reader.Close()
}
}
}
}
$objects = Get-DrWebDataFromCSV -file $csvFile
Send-ObjectsToApi -objects $objects -template $globalTemplate
Рекомендация: Если вы планируете регулярный запуск скриптов через планировщик заданий, удобно можно использовать такой запускающий Batch скрипт, который будет инициировать запуск PowerShell скрипта и сохранять все результаты его работы в лог-файл. Скрипты должны находиться в одной папке и одинаково называться, например import.cmd и import.ps1
@echo off
set "log=%~dpn0.log"
chcp 1251 >nul
(echo Start @ %date% %time% & echo ----------) > "%log%"
powershell.exe -ExecutionPolicy Bypass -File "%~dpn0.ps1" >> "%log%" 2>&1
(echo ---------- & echo Finish @ %date% %time%) >> "%log%"
chcp 866 >nul
Экспорт активов
GET запрос для экспорта активов
https://service.securitm.ru/api/v1/assets/get/[asset type]?[asset fields]
где
- [asset type] - обозначение типа актива, который будет экспортироваться.
Узнать обозначение типа актива можно в URL браузера зайдя в соответствующий реестр.
Пример: os-18, linux-server-8 - [asset fields] - поля активов, которые будут выгружены
Указывать не обязательно, по умолчанию будут выгружены все поля.
Пример: ip&version
Для проведения экспорта активов из SECURITM по API нужно
- Создать API токен
Токен указывается в заголовке запроса - Указать тип активов, которые будут экспортироваться
- Если требуется - настроить фильтр полей активов
Пример скрипта на PowerShell для экспорта активов
# Укажите API Token для подключения (создается в профиле команды)
$token = '[TOKEN]'
# Если у вас подписка Professional - укажите адрес вашего сервера SECURITM
# Укажите тип актива который собираетесь экспортировать из SECURITM.
# После "?" укажите поля, которые подлежат экспорту. Если не указывать - будут выгружены все поля.
$url = 'https://service.securitm.ru/api/v1/assets/get/os-18?ip'
$headers = @{
'Authorization' = "Bearer $token"
}
try {
$response = Invoke-RestMethod -Method Get -Uri $url -ContentType "application/json; charset=utf-8" -Headers $headers
Write-Host ($response | ConvertTo-Json -Depth 10)
} catch {
Write-Host 'Status code:' $_.Exception.Response.StatusCode.Value__
$result = $_.Exception.Response.GetResponseStream()
$reader = New-Object System.IO.StreamReader($result)
$reader.BaseStream.Position = 0
$reader.DiscardBufferedData()
$responseBody = $reader.ReadToEnd()
Write-Host $responseBody
} finally {
if ($result) {
$result.Close()
}
if ($reader) {
$reader.Close()
}
}
Обращение к самому себе
Существует возможность обращаться к SECURITM по API непосредственно из SECURITM. Через запуск скриптов в модуле RPA.
Функция активирована в локальных (on-premise) инсталляциях.
Чтобы из скрипта в RPA можно было сделать запрос к самому себе нужно:
1. В качестве адреса сервера указать "nginx", доступ по протоколу HTTP.
Пример:
Функция активирована в локальных (on-premise) инсталляциях.
Чтобы из скрипта в RPA можно было сделать запрос к самому себе нужно:
1. В качестве адреса сервера указать "nginx", доступ по протоколу HTTP.
Пример:
http://nginx/api/v1/assets/get/os-29
2. В запросе отключить проверку сертификата
Пример для PowerShell:
Пример для PowerShell:
$globalUrl = 'http://nginx/api/v1/assets/get/os-18?ip'
$globalToken = '[TOKEN]'
$headers = @{
'Authorization' = "Bearer $token"
}
$response = Invoke-RestMethod -SkipCertificateCheck -Method Get -Uri globalUrl -Headers $headers -ContentType "application/json; charset=utf-8"
Технические уязвимости
В VM реализовано три метода:
- Экспорт уязвимостей
- Импорт уязвимостей (JSON)
- Импорт файла сканера (FILE)
Экспорт уязвимостей
Это универсальный метод получения всех уязвимостей системы (с постраничной пагинацией) и поддерживающий фильтрацию по имени уязвимости и IP адресу хоста. Без указания фильтров будут получены все уязвимости системы.
Метод: POST
Метод: POST
Ссылка: /api/v2/vm/get/techvuln
Необходимые права токена: просмотр
Необходимые права токена: просмотр
Необходимые заголовки запроса:
Content-Type: application/json
Authorization: Bearer your_token
Доступные поля запроса, все поля являются не обязательными:
- perPage: количество выводимых на странице объектов, по умолчанию = 10.
- page: номер страницы, по умолчанию = 1.
- sorting: сортировка вывода, принимает массив ["column" => "name", ''order" => "asc"]
- sorting.column: колонка сортировки, возможные значения name, ip_count, severity, integral, по умолчанию = "name".
- sorting.order: порядок сортировки, возможные значения asc, desc, по умолчанию = "asc".
- filters: фильтрация уязвимостей, возможные фильтры (name, ip), по умолчанию не используются.
Фильтры:
Для использования фильтров нужно добавить в тело JSON запроса поле "filters".
Затем добавить интересующий нас фильтр:
Для использования фильтров нужно добавить в тело JSON запроса поле "filters".
Затем добавить интересующий нас фильтр:
- filterByName
- filterByIp
В первом вложенном поле включаем фильтр "enable": true, а во втором передаем массив данных для фильтрации "value": ["192.168.3.41", "192.168.1.33"]
Пример вернет уязвимости с 192.168.3.41 и 192.168.1.33:
"filters": {
"filterByIp": {
"enable": true,
"value": ["192.168.3.41", "192.168.1.33"]
}
}
Фильтр по имени работает аналогичным образом, вместо массива IP требуется указать нужные имена или часть имени уязвимости.
Пример запроса:
# ссылка запроса
$url = "https://your_domain/api/v2/vm/get/techvuln"
# токен
$token = "your_token"
# Заголовки запроса
$headers = @{
"Content-Type" = "application/json"
"Authorization" = "Bearer $token"
}
# Тело запроса
$body = @{
page = 2
perPage = 5
sorting = @{
column = "severity"
order = "desc"
}
filters = @{
filterByIp = @{
enable = $true
value = @("192.168.50.11", "87.250.250.242")
}
}
} | ConvertTo-Json -Depth 5
# Отправляем запрос
Invoke-WebRequest -Method Post -Uri $url -Headers $headers -Body $body
В данном примере мы получим уязвимости с двух хостов "192.168.50.11", "87.250.250.242". Будет показана вторая страница и на странице будет по 5 объектов. Результат будет отсортирован по severity в порядке убывания.
Аналогичное тело запроса в формате JSON:
{
"page": 2,
"perPage": 5,
"sorting": {
"column": "severity",
"order": "desc"
},
"filters": {
"filterByIp": {
"enable": true,
"value": ["192.168.50.11", "87.250.250.242"]
}
}
}
По умолчанию возвращаются такие поля уязвимости:
- id, uuid - идентификаторы записи;
- name - имя уязвимости;
- cpe - cpe уязвимости;
- integral - интегральная величина критичности;
- severity - severity уязвимости;
- ip_count - количество хостов на которых есть эта уязвимость.
Формат ответа:
"pagination": {
"currentPage": 2,
"prevPage": "https://localhost/api/v2/vm/get/techvuln?page=1",
"nextPage": null,
"totalPage": 2
},
"total": 10,
"objects": [
{
"id": 34,
"uuid": "nessus-97861",
"name": "Network Time Protocol (NTP) Mode 6 Scanner",
"cpe": "",
"integral": 3,
"severity": 3,
"ip_count": 1
},
{
"id": 51,
"uuid": "qualys-13162",
"name": "Session Cookie Does Not Contain the "Secure" Attribute",
"cpe": "",
"integral": 2,
"severity": 2,
"ip_count": 1
},
#...
}
Импорт уязвимостей (JSON)
Импорт производится по одной уязвимости за запрос.
Метод: POST
Метод: POST
Ссылка: /api/v2/vm/push/techvuln
Необходимые права токена: создание
Необходимые заголовки запроса:
Необходимые права токена: создание
Необходимые заголовки запроса:
Content-Type: application/json
Authorization: Bearer your_token
Описание полей:
- uuid - необязательное поле, уникальный идентификатор уязвимости. Если не указан uuid, то он формируется на основанииname;
- scanner - обязательное поле, имя сканера, если его нет, то просто придумать любое название;
- name - обязательное поле, название уязвимости;
- desc - обязательное поле, описание уязвимости;
- solution - обязательное поле, решение уязвимости;
- severity - обязательное поле, серьезность/приоритет уязвимости;
- is_exploit - обязательное поле, существование эксплойта;
- ip - обязательное поле, хост, на котором обнаружена уязвимость;
- hostname - необязательное поле, имя хоста уязвимости;
- group - необязательное поле, группа в которую входит уязвимость (CVE, KLA, ...);
- url - необязательное поле, ссылка на подробное описание уязвимости/
Пример запроса:
# URL запроса, подставьте домен вашего сервера
$url = "https://your_domain/api/v2/vm/push/techvuln"
# Подставьте ваш токен
$token = "TOKEN"
# Тело запроса в формате JSON
$body = @{
scanner = "kas"
name = "KLA10001"
desc = "Описание уязвимости"
solution = "Решение уязвимости"
severity = 4
is_exploit = 1
ip = "192.168.0.1"
} | ConvertTo-Json
# Заголовки запроса
$headers = @{
"Content-Type" = "application/json"
"Authorization" = "Bearer $token"
}
# Выполнение POST-запроса
try {
$response = Invoke-RestMethod -Uri $url -Method Post -Body $body -Headers $headers
# Вывод ответа сервера
Write-Host "Ответ сервера:"
$response | ConvertTo-Json | Write-Host
} catch {
# Обработка ошибок
Write-Host "Ошибка при выполнении запроса:"
$_.Exception.Message | Write-Host
}
Импорт уязвимостей (файл)
Метод позволяет импортировать файлы с уязвимостями от сканеров в соответствии с правилами и форматами указанными в модуле Технические уязвимости ➡️ Импорт➡️ Ручной импорт
Метод: POST
Ссылка: /api/v2/vm/push/file
Необходимые права токена: создание, импорт
Необходимые заголовки запроса:
Метод: POST
Ссылка: /api/v2/vm/push/file
Необходимые права токена: создание, импорт
Необходимые заголовки запроса:
Accept: application/json
Content-Type: multipart/form-data; boundary=your_boundary
Authorization: Bearer your_token
Описание полей:
- file - обязательное поле, максимальный размер ограничен 200мб;
- asset - необязательное поле, необходимо указать uuid актива, если нужно привязать уязвимости к активу.
Пример запроса:
# путь к файлу который вы хотите загрузить
$filePath = "/your_path/nmap.xml"
# URL запроса, подставьте домен вашего сервера
$url = "https://your_domain/api/v2/vm/push/file"
# Подставьте ваш токен
$token = "TOKEN"
# Создаем границу (boundary)
$boundary = [System.Guid]::NewGuid().ToString()
# Читаем содержимое файла
$fileContent = [System.IO.File]::ReadAllBytes($filePath)
# Формируем тело запроса
$body = @"
--$boundary
Content-Disposition: form-data; name="file"; filename="nmap.xml"
$([System.Text.Encoding]::UTF8.GetString($fileContent))
--$boundary--
"@
# Создаем заголовки
$headers = @{
"Accept" = "application/json"
"Authorization" = "Bearer $token"
"Content-Type" = "multipart/form-data; boundary='"$boundary'""
}
# Отправляем запрос
Invoke-WebRequest -Uri $url -Method Post -Body $body -Headers $headers
Коды ошибок
Структура JSON-ответа об ошибке API состоит из следующих полей:
- code - код нашей внутренней ошибки, который будет описан в документации;
- message - общее сообщение об ошибке, которое описывает ее суть;
- errors - техническая информация об ошибке. Например, какие права нужны для токена и какие у него есть сейчас;
- help - ссылка на документацию с решением/описанием ошибки, номер которой указан в поле code.
Пример ответа:
{
"code": "PR_001",
"message": "The token doesnt have the required permissions",
"errors": {
"required_permissions": [
"index",
"import"
],
"available_permissions": [
"create",
"import",
"update"
]
},
"help": "https://localhost/help/api"
}
Валидация (VL)
Код ошибки: VL_001
Описание: Ошибка валидации запроса.
Как исправить: В зависимости от содержимого errors нужно исправить данные, которые передаются пользователем в теле запроса.
Описание: Ошибка валидации запроса.
Как исправить: В зависимости от содержимого errors нужно исправить данные, которые передаются пользователем в теле запроса.
Пример ответа:
{
"code": "VL_001",
"message": "Request validation failed",
"errors": {
"template": [
"Import template not found"
]
},
"help": "https://localhost/help/api"
}
Код ошибки: VL_002
Описание: Некорректные параметры фильтра.
Как исправить: Проверить корректность JSON переданного в запросе на получение технических уязвимостей.
Пример ответа:
{
"code": "VL_002",
"message": "Invalid filter parameters",
"errors": [],
"help": "https://localhost/help/api"
}
Права доступа (PR)
Код ошибки: PR_001
Описание: Токен не найден
Массив ошибок: показываем токен, который передали.
Как исправить: Указать токен в заголовках запроса:
Описание: Токен не найден
Массив ошибок: показываем токен, который передали.
Как исправить: Указать токен в заголовках запроса:
Authorization: Bearer your_bearer_token
Пример ответа:
{
"code": "PR_001",
"message": "Token not found",
"errors": {
"token": "hello_securitm"
},
"help": "https://localhost/help/api"
}
Код ошибки: PR_002
Описание: IP с которого сделан запрос не входит в белый список IP.
Массив ошибок: показываем IP с которого делают запрос.
Как исправить: Зайти в раздел "Настройки команды" => "Api токены" и добавить IP в список разрешенных к нужному токену.
Пример ответа:
{
"code": "PR_002",
"message": "Client is not in IP white list",
"errors": {
"ip": "192.168.0.1"
},
"help": "https://localhost/help/api"
}
Код ошибки: PR_003
Описание: У токена недостаточно прав для операции.
Массив ошибок: Указаны необходимые (required) и имеющиеся (available) права токена.
Как исправить: Зайти в раздел "Настройки команды" => "Api токены" и добавить нужные права для токена.
Пример ответа:
Массив ошибок: показываем IP с которого делают запрос.{
"code": "PR_003",
"message": "The token doesnt have the required permissions",
"errors": {
"required_permissions": [
"index"
],
"available_permissions": [
"create",
"import",
"update"
]
},
"help": "https://localhost/help/api"
}
Код ошибки:
Описание:
Массив ошибок: Указан тип сканера, который был определен у переданного файла.
Как исправить: Зайти в раздел "Настройки команды" => "Api токены" и добавить нужный сканер для токена.
Пример ответа:
{
"code": "PR_004",
"message": "Import operation denied for this scanner",
"errors": {
"scanner": "nessus"
},
"help": "https://localhost/help/api"
}
Код ошибки: PR_005
Описание: Импорт запрещен с данным шаблоном.
Массив ошибок: Указано имя шаблона импорта, которое было передано в запросе.
Как исправить: Зайти в раздел "Настройки команды" => "Api токены" и добавить нужный шаблон импорта для токена.
Пример ответа:
{
"code": "PR_005",
"message": "Import operation denied for this template",
"errors": {
"template": "Базовый импорт"
},
"help": "https://localhost/help/api"
}
Код ошибки: PR_006
Описание: У токена недостаточно прав для импорта через данный шаблон.
Массив ошибок: Указаны необходимые (required) и имеющиеся (available) права токена.
Как исправить: Зайти в раздел "Настройки команды" => "Api токены" и добавить нужные базовые права для токена. В errors указаны необходимые права и те, которые уже есть у токена.
Пример ответа:
{
"code": "PR_006",
"message": "Not enough permissions to import with this template",
"errors": {
"required_permissions": [
"create",
"update",
"import"
],
"available_permissions": [
"import",
"update"
]
},
"help": "https://localhost/help/api"
}
Типы активов (AT)
Код ошибки: AT_001
Описание: Тип актива не найден.
Массив ошибок: Slug типа актива, который мы искали.
Как исправить: Переданный тип актива не найден. Нужно взять его в команду или создать в системе.
Пример ответа
Описание: Тип актива не найден.
Массив ошибок: Slug типа актива, который мы искали.
Как исправить: Переданный тип актива не найден. Нужно взять его в команду или создать в системе.
Пример ответа
{
"code": "AT_001",
"message": "Assettype not found",
"errors": ["assettype" => "os"],
"help": "https://localhost/help/api"
}
Шаблоны импорта (IT)
Код ошибки: IT_001
Описание: Не найден шаблон импорта "имя шаблона".
Как исправить: Создать одноименный шаблон. Если требуется публичный шаблон импорта, то обновить базу данных.
Пример ответа
Описание: Не найден шаблон импорта "имя шаблона".
Как исправить: Создать одноименный шаблон. Если требуется публичный шаблон импорта, то обновить базу данных.
Пример ответа
{
"code": "IT_001",
"message": "Import template not found. Check private or community hostInventory template",
"errors": [],
"help": "https://localhost/help/api"
}
Файловая система (FS)
Код ошибки: FS_001
Описание: Ошибка при сохранении файла на диск.
Как исправить: Нужно проверить есть ли место на диске и права на запись.
Пример ответа
Описание: Ошибка при сохранении файла на диск.
Как исправить: Нужно проверить есть ли место на диске и права на запись.
Пример ответа
{
"code": "FS_001",
"message": "Failed to save the uploaded file",
"errors": [],
"help": "https://localhost/help/api"
}
Код ошибки: FS_002
Описание: Не определен тип загружаемого файла.
Как исправить: Если наша система поддерживает файлы данного сканера, то обратиться в тех. поддержку с данным файлом.
Пример ответа
{
"code": "FS_002",
"message": "Invalid file structure",
"errors": [],
"help": "https://localhost/help/api"
}
Активы (AS)
Код ошибки: AS_001
Описание: Не найдено активов для импорта.
Как исправить: Нужно проверить есть ли в теле запроса данные. Т.к. в результате парсинга тела запроса ничего не было найдено.
Пример ответа:
Описание: Не найдено активов для импорта.
Как исправить: Нужно проверить есть ли в теле запроса данные. Т.к. в результате парсинга тела запроса ничего не было найдено.
Пример ответа:
{
"code": "AS_001",
"message": "No assets available for import",
"errors": [],
"help": "https://localhost/help/api"
}
Код ошибки: AS_002
Описание: Некорректная структура данных для импорта активов.
Как исправить: Нужно проверить корректность/валидность данных переданных в запросе.
Пример ответа:
{
"code": "AS_002",
"message": "Invalid assets data structure",
"errors": [],
"help": "https://localhost/help/api"
}
Мы используем cookie-файлы, чтобы получить статистику, которая помогает нам улучшить сервис для вас с целью персонализации сервисов и предложений. Вы может прочитать подробнее о cookie-файлах или изменить настройки браузера. Продолжая пользоваться сайтом, вы даёте согласие на использование ваших cookie-файлов и соглашаетесь с Политикой обработки персональных данных.