Skip to main content

Пакет разработчиков USSC-SOC для упрощения взаимодействия с АРМ, серверами и сетевыми устройствами

Project description

USSL - USSC SOAR SCRIPT LIB

Оглавление

Описание:

Библиотека разработана для упрощения работы с сетевыми устройствами, а также для расширения возможностей USSC SOAR.

Установка

Установка через PyPI:

pip install ussl

Взаимодействие с внешними системами:

Для упрощения взаимодействия с различными системами в модуле ussl.transport реализован единый интерфейс. На вход он принимает объект Protocol, содержащий данные о подключении и объект (или список объектов) Query, содержащий данные о команде, которую необходимо выполнить; в качестве ответа возвращается объект Responce.

Поля объекта Protocol
Общие для всех интерфейсов поля:
    host: ip-адрес или имя хоста, к которому необходимо подключиться;
    username: имя пользователя, под которым необходимо подключиться;
    password: пароль от указанного пользователя;
    interface: интерфейс, к которому необходимо подключиться (ssh, winrm, и т.д.);
    port: порт, на котором работает интерфейс;
    query: команда или набор команд, которые необходимо выполнить;
    encoding: кодировка запроса;
    decoding: кодировка ответа;
    window_width: ширина окна консоли (влияет на форматирование ответа).

Поля, специфичные для winrm:
    domain: имя домена к которому необходимо подключиться;
    scheme: схема подключения (http или https);
    path: путь до WS-Management;
    transport: протокол аутентификации.

Поля, специфичные для ssh:
    clean_timeout: таймаут очищения канала;
    look_for_keys: включить или отключить аутентификацию по ключам;
    auth_timeout: таймаут авторизации;
    timeout: таймаут соединения;
    pem_file: значение закрытого ключа авторизации от указанного пользователя.
Поля объекта Query
command: содержит командe, которую необходимо выполнить;
timeout: содержит время, отведенное на выпонение команды;
shell_type: содержит тип команды (cmd, powershell, и т.д.);
sudo: содержит пароль от супер пользователя или enable.
Поля объекта Responce
result: содержит результат выполнения переданной команды;
stdout: содержится форматированный ответ от целевой системы;
stderr: содержится ошибка выполнения переданной команды;
status_code: содержится статус код выполнения переданной команды.

Из особенностей поведения можно выделить следующее:
  • При передаче списка Query в Responce попадёт вывод последней команды или, если в ходе выполнения произошла ошибка, вывод ошибки с соответствующим статусом;

  • ...

Доступные методы модуля ussl.protocol:

from ussl.protocol import WinRMProtocol
from ussl.model import ProtocolData, Query

protocol = ProtocolData(...)
winrm_conn = WinRMProtocol(protocol)
winrm_conn.connect()
winrm_conn.execute(Query('ping 123.123.123.123', sudo='sudo_password'))
winrm_conn.execute('ping 123.123.123.123')

Доступные на данный момент транспорты:

  • WinRM
  • SSH
  • LDAP

Взаимодействие с USSC SOAR:

Для упрощения взаимодействия с USSC SOAR был разработан модуль ussl.postprocessing. Он берёт на себя работу с вводом/выводом данных в скриптах, переназначение ключей объектов, а также форматирование значений объектов, передаваемых в скрипт стандратным образом.

Использование ussl.postprocessing в скриптах

Для того чтобы использовать возможности ussl.postprocessing достаточно при создании скрипта выполнить несколько условий, а именно:

  • Создать класс с произвольным именем
  • Унаследоваться от класса ussl.posprocessing.base.BaseFunction
  • В поля класса secrets_model и inputs_model передать marshmallow-схемы, предназначеные для валидации данных
  • Реализовать метод function
  • Для вывода ошибок использовать исключения из модуля exceptions
  • Вывести из метода словарь с результатом выполнения и сообщение
  • В конце скрипта создать экземпляр созданного класса
from typing import Type, Tuple
from ussl.postprocessing.base import BaseFunction
from ussl.exceptions import ExecutionError
from marshmallow import Schema, fields

class InputSchema(Schema):
    name: str = fields.String(required=True)

class NewFunction(BaseFunction):
    inputs_model: Type[Schema] = InputSchema        # Передаём схему для валидирования входных данных скрипта
    secrets_model: Type[Schema] = None              # Означает отсутствие секретов, используемых в этом скрипте
    def function(self) -> Tuple[dict, str]:       
        ...                                         # Прописываем операции скрипта
        result_key = self.input_json.get('name')    # Забираем из входящих данных необходимую информацию
        if result_key == 'unknown_user':
          raise ExecutionError("User is unknown")   # Выводим ошибку из скрипта 
        return {"result_key": result_key}, "Успешно"# Выводим успешное завершение
    

NewFunction()

Output:

{
  "user": "user", 
  "result": "Успешно", 
  "result_key": "user"
}

Process finished with exit code 0

Расширения BaseFunction для работы со скриптами

DEBUG_MODE

Флаг, указывающий на необходимость вывода всего Stacktrace из скрипта при обнаружении ошибки, кроме ошибок валидации данных. Используется для дебага скрипта на стэнде.

from typing import Tuple
from ussl.postprocessing.base import BaseFunction
from ussl.exceptions import ExecutionError

class NewFunction(BaseFunction):
    DEBUG_MODE = True
    def function(self) -> Tuple[dict, str]:       
        raise ExecutionError("Script if failed")
    

NewFunction()

Output:

Traceback (most recent call last):
  File "<...>", line 6, in <module>
    raise ExecutionError("Script if failed")
<...>.ExecutionError: Command execution error: Script if failed.

Process finished with exit code 1

RETURN_CODE_IGNORE

Необходим для успешного завершения программы даже при обнаружении ошибки.

from typing import Tuple
from ussl.postprocessing.base import BaseFunction
from ussl.exceptions import ExecutionError

class NewFunction(BaseFunction):
    RETURN_CODE_IGNORE = True
    def function(self) -> Tuple[dict, str]:       
        raise ExecutionError("Script if failed")
    

NewFunction()

Output:

{"error": "Command execution error: Script if failed."}

Process finished with exit code 0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ussl-1.2.9.tar.gz (19.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ussl-1.2.9-py3-none-any.whl (20.2 kB view details)

Uploaded Python 3

File details

Details for the file ussl-1.2.9.tar.gz.

File metadata

  • Download URL: ussl-1.2.9.tar.gz
  • Upload date:
  • Size: 19.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for ussl-1.2.9.tar.gz
Algorithm Hash digest
SHA256 1f65c061941eba4b5e6746244a7be028b7ffe5ac5475dceeeb52d780b288d75e
MD5 821abf6eaffa9313ffaf630517da457d
BLAKE2b-256 67f435cd2ea36a4f82ffab94a7a41bedbfa495d1355496f2bd77870e5bc2131a

See more details on using hashes here.

File details

Details for the file ussl-1.2.9-py3-none-any.whl.

File metadata

  • Download URL: ussl-1.2.9-py3-none-any.whl
  • Upload date:
  • Size: 20.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for ussl-1.2.9-py3-none-any.whl
Algorithm Hash digest
SHA256 cc49608d1b9940da914ea30c37a21b10e0a2c592de14436873928709463acbab
MD5 23d415397704c881b02bc248daf674cf
BLAKE2b-256 7cdd77da9051f8145d8e05084c5e4bd3212df2b62dd8f2d0dcda1979e9b44dc1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page