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.7.tar.gz (18.5 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.7-py3-none-any.whl (19.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: ussl-1.2.7.tar.gz
  • Upload date:
  • Size: 18.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.20

File hashes

Hashes for ussl-1.2.7.tar.gz
Algorithm Hash digest
SHA256 c7ecf5fb3455e10a5bb1ff15305f002467e79097b16c36acc665abc49227c113
MD5 f6bbac44ac6d1e83e82e53f2ed82728e
BLAKE2b-256 61cf704dc8a323f1976eb00640a4222fe88a81514071b98b15f23ee2e724d5d7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ussl-1.2.7-py3-none-any.whl
  • Upload date:
  • Size: 19.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.20

File hashes

Hashes for ussl-1.2.7-py3-none-any.whl
Algorithm Hash digest
SHA256 cf1e2f5471cefd71400c7116f3640cb53901ecf71f55b782cb5220dbae17ddc1
MD5 aa4d942d48c3d00fde5f81163dc7e996
BLAKE2b-256 2a8407c2980008a8cc99d9c3a4d47e688d6d453063a141c8ba420eb292f85bf2

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