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С клиентам — у нас есть раздел для партнёров.