Wardhold

1С:Предприятие

Ключи от банка и маркетплейса не должны лежать в константах

В типовом 1С-ландшафте секреты расходятся по местам, где их никто не считает: константы и справочники информационной базы, файл публикации на веб-сервере, параметры регламентных заданий, переписка с подрядчиком. Wardhold собирает их в одно место с версиями и журналом, а конфигурация получает значение в тот момент, когда оно нужно.

С чего всё начинается

Где эти значения лежат сегодня

МестоЧто там лежитЧем это плохо
Константы и справочники базыТокены банк-клиента, ЭДО, маркетплейсов, обмена с сайтом и порталомВидны всем, у кого есть право на просмотр, и уезжают в каждую копию базы, которую отдали на доработку
Файл публикации на веб-сервереЛогин и пароль подключения к информационной базеЛежат текстом на диске; кто и когда менял — узнать не у кого
Параметры информационной базы кластераПароль пользователя СУБДМеняется руками на работающем кластере, поэтому ротация откладывается годами
Переписка, таблицы, запискиПароли администратора кластера, учётки подрядчиков и франчайзиОстаются у человека после того, как он перестал работать с базой

Как значение попадает в 1С

Запрос из общего модуляработает

Конфигурация ходит за значением сама: HTTP-запрос с токеном сервисного аккаунта, в ответ — плоский JSON. Значение живёт в памяти вызова и в константы не возвращается.

HTTPСоединение · Bearer wh_…

Агент рядом с серверомработает

Если наружу ходит не 1С, а соседняя служба: агент держит файл окружения в актуальном состоянии, переживает ротацию и сигналит процессу.

wardhold agent --config agent.yaml

Отдельные значения для тестовой копииработает

Прод и тест — разные проекты с разными привязками. Копия базы, отданная подрядчику, не тащит за собой боевые токены: их в ней просто нет.

erp-prod · erp-test

Сигнал о ротацииработает

После создания новой версии уходит подписанный вебхук. Значения в теле нет — это команда «перечитай», по которой регламентное задание обновляет кеш сеанса.

secret.current.changed

Расширение конфигурациив плане

Готовый общий модуль с кешем, повторными попытками и настройкой адреса — поставкой в виде расширения, чтобы типовую конфигурацию не трогать.

Расширение.Wardhold

Агент службой Windowsв плане

Сегодня агент описан для systemd и docker-compose. Для серверов 1С под Windows нужны служба, права на файлы и инструкция — это в работе.

sc.exe create

Как это выглядит в коде

Десяток строк в общем модуле

// вызов на сервере: значение не попадает на клиента
Соединение = Новый HTTPСоединение("app.wardhold.ru", 443, , , ,
    10, Новый ЗащищенноеСоединениеOpenSSL);

Запрос = Новый HTTPЗапрос("/api/v1/secrets/erp/ozon/payload");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + Токен);

Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(Соединение.Получить(Запрос).ПолучитьТелоКакСтроку());
Секрет = ПрочитатьJSON(Чтение);

Секрет.CLIENT_ID, Секрет.CLIENT_SECRET // только в памяти вызова

Тот же ответ, что забирают External Secrets Operator в Kubernetes и CI-раннер: плоский JSON без обёрток. Отдельного SDK для 1С не требуется, и каждое такое чтение попадает в журнал на стороне Wardhold.

Границы

Что Wardhold делать не будет

  • Не управляет кластером 1С. Хранилище ведёт версии, права и журнал; сменить пароль в СУБД, в личном кабинете банка или в кабинете маркетплейса по-прежнему нужно самому. Продукт отвечает за учёт и доказуемость ротации, а не за поход в чужие интерфейсы
  • Не следит за значением после выдачи. Полученное конфигурацией значение живёт по правилам 1С: его не нужно писать в журнал регистрации, технологический журнал и реквизиты объектов — наш аудит заканчивается фактом выдачи
  • Файл на диске — компромисс, а не цель. Агент нужен службам, которые умеют читать только файл; если конфигурация может сходить по HTTP, файла лучше не заводить
  • Готового расширения пока нет. Сегодня это несколько строк в общем модуле вашего расширения; поставляемый модуль — в плане, и он ничего не изменит в контракте

Подрядчики

Приходящий 1С-ник видит базу целиком — но не обязан видеть токены

Доступ к информационной базе сегодня означает доступ ко всему, что в ней лежит, включая ключи от банка и маркетплейсов. В Wardhold доступ выдаётся на проект или на конкретный секрет, а карточка сотрудника показывает не только выданные права, но и фактические чтения: что человек мог прочитать, что читал на самом деле и где получил отказ.

Отсюда же берётся ответ на вопрос после окончания работ: ротировать всё подряд никто не станет, а список того, к чему подрядчик реально прикасался, у вас есть. Разовый пароль можно отдать и без учётной записи — одноразовой ссылкой, ключ от которой не доходит до сервера.

Частые вопросы

Нужно ли снимать конфигурацию с поддержки?

Нет. Код обращения к хранилищу живёт в расширении и типовую конфигурацию не трогает: это общий модуль с одной функцией и настройкой адреса.

Работает ли это в закрытом контуре, без интернета?

Да, это основной режим поставки: один бинарь и PostgreSQL внутри вашей сети, сервер 1С обращается к нему по внутреннему адресу. Наружу не ходит ни хранилище, ни агент.

А если база в облаке, где нет доступа к файловой системе?

Тогда остаётся прямой HTTP-запрос из конфигурации — агент там и не нужен. Потребуется только разрешить обращение к адресу вашего инстанса Wardhold.

Где тогда хранится сам токен Wardhold?

Он остаётся в контуре 1С — в файле, доступном служебной учётной записи, или в константе для администратора. Смысл в размене: вместо десятка секретов, которые нельзя быстро сменить, вы охраняете одно значение со сроком жизни, ограниченными правами, отзывом в одно действие и журналом каждого обращения.

1С-Битрикс — это то же самое?

Нет, это другой продукт: сайт на PHP. Для него сценарий проще — агент держит рядом с .settings.php подключаемый файл и обновляет его при ротации. Корпоративный портал — отдельная страница.

Разберём ваш 1С-ландшафт

Мы сами живём с 1С, Битрикс24 и подрядчиками много лет. Напишите — посмотрим, где у вас лежат ключи от обменов, и предложим порядок переноса. Внедряете 1С клиентам — у нас есть раздел для партнёров.