Чеклист воспроизводимых шагов
- Модель угроз в одну страницу: какие сетевые вызовы, файлы и команды допустимы для плагина.
- Реестр разрешённых плагинов: идентификатор, версия, ожидаемый хеш артефакта, владелец, срок пересмотра.
- Fail-closed в рантайме: неизвестный плагин или сбой проверки подписи и целостности ведёт к отказу без «мягкого» продолжения.
- Роли: разработчик инициирует заявку, техлид утверждает риск, инфраструктура включает исключение и снимает его.
- Версия политики: например
plugin-policy@2026-04-21.1в логе старта на каждом узле. - Контрольный тест: после выката на каждом Mac сценарий «запрещённый плагин» должен получить отказ.
Топология пула и шлюза согласуйте с руководством по мультиузловому развёртыванию MeshMac и материалом про секреты и минимальные права.
Три типовых провала
1. На одном builder включили обход проверок из-за «красного» CI и забыли выключить — остальные узлы остаются строгими, но доверие к пулу уже сломано.
2. Разрешённый список лежит в общем репозитории с комментарием «временно отключено» и уезжает в main без ревью безопасности.
3. Журналы фиксируют факт установки, но не фиксируют версию политики и корреляционный идентификатор — расследование инцидента растягивается на дни.
Матрица: fail-open и fail-closed
| Критерий | Fail-open | Fail-closed (рекомендуется) |
|---|---|---|
| При ошибке проверки | Плагин может стартовать | Старт и установка блокируются |
| Радиус инцидента | Сложно прогнозировать | Ограничен реестром и окном |
| Согласование | Часто постфактум | До включения исключения |
| Аудит | Редко полный | Обязательные поля ниже |
Пять шагов внедрения на пуле
Шаг первый. Зафиксируйте владельца реестра плагинов и частоту пересмотра не реже одного раза в квартал.
Шаг второй. Вынесите переключатель небезопасной установки в локальный защищённый конфиг вне Git и ограничьте права на каталог только службе агента.
Шаг третий. Подключите выгрузку структурированных логов в вашу систему хранения событий с неизменяемым или дополняемым журналом.
Шаг четвёртый. Добавьте оповещение если версия политики на любом узле отличается от эталона более чем на одну минуту после выката.
Шаг пятый. Проведите учение раз в полгода с полным откатом версии и проверкой что запрещённый артефакт снова блокируется везде одинаково.
Цифры для политики. Типичное окно исключения пятнадцать–шестьдесят минут на весь пул. Целевое время обнаружения рассинхрона политики не более пяти минут. Резервная копия предыдущей версии политики хранится минимум семь суток.
Выбор политики
Базовая линия для общих сборочных Mac — запрет по умолчанию: всё, что не описано в реестре, не устанавливается и не исполняется. Переключатель принудительно небезопасной установки трактуйте как аварийный: он отключает часть проверок и поэтому не может быть постоянным значением по умолчанию в репозитории или образе. Владелец риска и ответственный за откат назначаются до включения. Для команд из пяти–пятнадцати человек достаточно трёх уровней: автор изменения, второй инженер из другой роли, дежурный инфраструктуры в окне.
Согласованность узлов
Расхождение политики между узлами даёт «тихий» обход: job уезжает на старый Mac и там выполняется то, что на остальных уже запрещено. Публикуйте один пакет или архив политики с версией, прогоняйте одинаковый скрипт выката на всех узлах пула и снимайте метрику «ожидаемая версия минус фактическая». После обновления выполните на каждом узле короткий прогон: запрещённый идентификатор плагина должен быть отклонён, разрешённый — загружен. Паттерн однотипного деплоя удобно совместить с шагами из балансировки и failover.
Окно изменений
Любое исключение из fail-closed оформляйте как изменение с окном: время начала и окончания, список узлов, ссылка на тикет, резервный контакт. Вне окна инфраструктура обязана вернуть переключатель в безопасное состояние даже если сборка ещё не зелёная. Запретите формулировки вроде «оставим до утра без тикета» в runbook — это основной источник дрейфа конфигурации.
Откат
Порядок: выключить небезопасный режим, выкатить предыдущую версию политики из хранилища артефактов, перезапустить процесс агента, проверить health и занести в журнал запись о свёртывании с указанием причины. Держите политику в малых инкрементальных версиях, чтобы откат был сменой одного номера, а не ручным редактированием десятка файлов.
Журналы аудита: обязательные поля
Минимальный набор для разборов: время по UTC, mesh_node_id, субъект действия, версия политики, идентификатор и версия плагина, результат allow или deny, состояние переключателя небезопасной установки, идентификатор корреляции запроса. Срок хранения девяносто дней для рабочих логов и один год для записей об исключениях — типичный компромисс для малых команд; зафиксируйте цифры в политике хранения и проверьте что экспорт в SIEM не обрезает поля.
Частые вопросы
Вопрос: Нужен ли отдельный стенд?
Ответ: Да: отдельный реестр и отдельная метка узлов, чтобы эксперимент не трогал production-политику.
Вопрос: Подпись временно не проходит из-за сети к OCSP.
Ответ: Сначала время и доверенные якоря, затем краткое окно и два утверждения; иначе вы создаёте постоянный обход.
Вопрос: Кто может править локальный конфиг на Mac?
Ответ: Только роль инфраструктуры с журналируемым сеансом; разработчики подают заявку, но не имеют sudo на политику плагинов.
Кратко
Fail-closed, короткие окна и явный откат делают поведение пула объяснимым при проверках и клиентских вопросах.
Дальше — публичные страницы без входа
Сборник практических материалов — на хабе OpenClaw; оглавление блога — здесь; справка — bangzhu; главная — Meshmac.