Куда я попал?
SECURITM это SGRC система, ? автоматизирующая процессы в службах информационной безопасности. SECURITM помогает построить и управлять ИСПДн, КИИ, ГИС, СМИБ/СУИБ, банковскими системами защиты.
А еще SECURITM это место для обмена опытом и наработками для служб безопасности.
Для автоматического взаимодействия с SECURITM и других приложений, скриптов и коннекторов (например, Apache NiFi), используется JSON REST API, API позволяет взаимодействовать с модулями "Активы" и "Технические уязвимости". Для авторизации подключения к SECURITM по API используются API-токены. Для доступа к управлению API токенами нужно обладать ролью Администратор команды.

Управление токенами

Для управлениями токенами:
  1. Зайдите в Профиль команды ➡️ Api токены
  2. Доступные действия
    1. Создание токена (по кнопке Создать токен справа вверху)
    2. Копирование токена в буфер
    3. Редактирование токена
    4. Удаление токена
  3. Для создания токена  необходимо заполнить поля:
    1. Название
    2. Описание.
    3. IP. Необязательное поле. При необходимости указать IP для ограничения предоставления данных по адресу. Пустое поле позволяет предоставлять данные по любым адресам.
    4. Права доступа. Для добавления прав необходимо выбрать:
      1. Модуль. Доступные значения Активы (модуль Активы) и Уязвимости (модуль Технические уязвимости). 
      2. Права. Доступные значения: просмотр, создание, обновление, удаление, импорт.
      3. нажать кнопку Добавить.
    5. При создании токена для импорта потребуется указать шаблон импорта в поле Шаблон  для импорта активов или Сканер для импорта уязвимостей.

Права доступа

При использовании токена для модуля Активы:
  • просмотр - получение активов;
  • создание - создание активов;
  • обновление - обновление активов;
  • удаление - удаление активов;
  • импорт - данная настройка в рамках модуля. Активы- это выбор шаблона импорта активов. Есть возможность выбора как отдельного шаблона, так и "Все шаблоны". 
При создании токена для импорта активов недостаточно указать только права импорт. Требуется добавить набор прав в соответствии с режимом импорта указанном в шаблоне. Например, для шаблона  "Шаблон SECURITM" у которого режим импорта "Создание и обновление", нам необходимо указать права у токена импорт, создание и обновление.  

При использовании токена для модуля Уязвимости:
  • просмотр - получение уязвимостей;
  • создание - создание уязвимостей;
  • обновление - обновление уязвимостей;
  • удаление - удаление уязвимостей;
  • импорт - в рамках модуля Уязвимости - это выбор сканера от которого мы грузим файл. Есть возможность выбора как отдельного сканера, так и "Все сканеры".
При создании токена для импорта уязвимостей недостаточно указать только права импорт, требуется дополнительно указать права на создание. 

Миграция прав предыдущих токенов

В предыдущих версиях сервиса управление токенами доступа API происходило в разделе Профиль команды ➡️ Общее.  Права токенов созданных в предыдущих версиях преобразуются по следующему правилу - токен с полными правами преобразуется в токен для импорта активов с правами просмотр, создание, обновление, удаление, импорт. В поле Шаблон для такого токена указывается значение Все шаблоны. Токен с правами на чтение получает только права просмотр

Аутентификация

Для авторизации в сервисе для работы с активами можно использовать два способа:
1. Передача токена в GET запросе
https://service.securitm.ru/api/v1/[API method]?token=[token uid]&[API method params]
Внимание: способ передача токена в GET запросе небезопасен и может привести к его разглашению, этот способ следует использовать только в защищенной среде.
2. Передача токена в заголовке запроса (Token-Based Authentication, Bearer Authentication):
'Authorization' = "Bearer [TOKEN]"

Активы

Импорт активов

POST запрос для импорта активов
https://service.securitm.ru/api/v1/assets/import

Для проведения импорта активов в SECURITM по API нужно
  1. Создать API токен
    Токен указывается в заголовке запроса
  2. Создать или выбрать шаблон импорта
    Название или UUID шаблона нужно добавить в тело запроса в параметр template
    Шаблоны импорта позволяют провести парсинг и логическую обработку любых данных, связав их с активами в SECURITM. Указание названия или UUID шаблона импорта обязательно в API запросе.
  3. Сформировать набор данных и поместить его в раздел assets API запроса
Примеры скриптов для проведения импорта активов в 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 нужно

  1. Создать API токен
    Токен указывается в заголовке запроса
  2. Указать тип активов, которые будут экспортироваться
  3. Если требуется - настроить фильтр полей активов
Пример скрипта на 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.
Пример:
http://nginx/api/v1/assets/get/os-29
2. В запросе отключить проверку сертификата 
Пример для 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 реализовано три метода:
  1. Экспорт уязвимостей
  2. Импорт уязвимостей (JSON)
  3. Импорт файла сканера (FILE)

Экспорт уязвимостей

Это универсальный метод получения всех уязвимостей системы (с постраничной пагинацией) и поддерживающий фильтрацию по имени уязвимости и IP адресу хоста. Без указания фильтров будут получены все уязвимости системы.

Метод: 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".
Затем добавить интересующий нас фильтр:
  • 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
Ссылка: /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
Необходимые права токена: создание,  импорт
Необходимые заголовки запроса:
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 нужно исправить данные, которые передаются пользователем в теле запроса.

Пример ответа:
{
  "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 типа актива, который мы искали.
Как исправить: Переданный тип актива не найден. Нужно взять его в команду или  создать в системе.

Пример ответа
{
  "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-файлов и соглашаетесь с Политикой обработки персональных данных.