Перейти к содержимому

CloudDriver и SshProvider

Помимо SoulModule (шаги Destiny, host = soul-агент), есть два серверных типа плагинов — их запускает keeper, а не агент на хосте. Общая модель, handshake, манифест и SDK — те же, что описаны в обзоре расширения; различается gRPC-контракт.

CloudDriver управляет жизненным циклом виртуальных машин у облачного провайдера: создаёт, удаляет, расширяет и опрашивает VM. Исполняемый файл — soul-cloud-<провайдер>, host — keeper.

Драйвер вызывается из Keeper-side-модуля core.cloud (шаг с on: keeper, адрес core.cloud.created / .destroyed / .resized): сценарий запрашивает у драйвера создание/удаление/расширение VM, а Keeper заносит результат в свои реестры. То есть драйвер не трогает файловую систему хоста — он работает с API облака.

Контракт CloudDriver покрывает создание, удаление, расширение, опрос статуса и листинг VM, а также схему профиля провайдера (она объявляется в манифесте плагина под kind: cloud_driver).

SshProvider поставляет SSH-credentials для push-режима Keeper-а — когда Keeper применяет Destiny на хосте по SSH, без установленного агента. Исполняемый файл — soul-ssh-<провайдер>, host — keeper.

Под единый контракт SshProvider укладываются разные модели выдачи доступа — статический ключ, Vault SSH CA (минт сертификата по запросу), Teleport. Тип провайдера объявляется в манифесте плагина под kind: ssh_provider.

Безопасность доступа — приоритет: для CA-моделей приватный ключ генерируется на стороне Keeper-а и не покидает его — провайдеру уходит только public key на подпись, а возвращается сертификат. Чем меньше точек, через которые проходит приватный ключ, тем меньше поверхность утечки.

Все три контракта (SoulModule, CloudDriver, SshProvider) пишутся через один публичный Go SDK с общим handshake-механизмом и общим форматом манифеста. Тип плагина задаётся полем kind в манифесте (soul_module / cloud_driver / ssh_provider), а различается только реализуемый gRPC-контракт. Каркас и интерфейс — как описано в обзоре расширения и для модулей в Как написать SoulModule.