Плоскость управления — один Go бинарный файл, olivares, настраиваемый небольшим набором
флагов подкоманды serve и несколькими переменными окружения — не разрастающимся
файлом конфигурации. Значения по умолчанию выбраны для отказа в закрытом режиме: петлевые привязки, TLS
включён, без поставляемых учётных данных. Всё ниже взято из собственных определений команд
и корня композиции бинарного файла; где настройку невозможно подтвердить в исходниках, она
здесь не указана.
Секреты, которые подключают реальные источники и хранят реальные ключи, находятся в файлах оператора или смонтированных секретах, на которые ссылаются переменные окружения — никогда в хранилище. Для запускаемого сквозного пути см. руководство по самостоятельному размещению; для полного списка флагов см. справочник CLI.
Подкоманда serve
olivares serve запускает HTTP-сервер REST/web и gRPC-сервер в одном
процессе, с веб-консолью, обслуживаемой с того же origin, что и API. Вот
общие входные параметры конфигурации.
| Флаг | По умолчанию | Назначение |
|---|---|---|
--listen | 127.0.0.1:8443 | HTTP адрес прослушивания (REST API + встроенная веб-консоль). |
--grpc-listen | 127.0.0.1:8444 | gRPC адрес прослушивания (плоскость управления / приём сборщика). |
--data-dir | $OLIVARES_DATA_DIR или ./olivares-data | Ключ подписи аудита, материал TLS, и — для SQLite — файл хранилища. |
--engine | sqlite | Движок хранилища: sqlite или postgres. |
--dsn | пусто (файл SQLite в каталоге данных) | Строка подключения к хранилищу. |
--checkpoint-interval | 1h | Как часто записывается подписанная контрольная точка аудита по каждой цепочке тенанта. 0 отключает. |
--insecure | выкл | Обслуживание HTTP/gRPC в открытом тексте. Только для локальной разработки. |
--seed-demo | выкл | Загрузка синтетического примера окружения. Отказывается запускаться на непетлевом адресе. |
TLS включён по умолчанию. Без предоставленных --tls-cert/--tls-key движок создаёт
самоподписанный сертификат в каталоге данных один раз, заранее, до того как
любой слушатель начнёт принимать соединения — поэтому и HTTP, и gRPC-серверы используют один и тот же
сертификат и ни один не откатывается к открытому тексту. При генерации сертификата
он логирует SHA-256 отпечаток, чтобы клиенты могли доверять или привязать его.
--insecure — единственный способ обслуживать в открытом тексте, и gRPC-путь завершается отказом:
вне --insecure сервер отказывается создавать слушатель открытого текста, а не
деградирует молча. Используйте только с 127.0.0.1 во время локальной разработки.
--seed-demo создаёт демо-администратора с публичным паролем из дерева исходников
и выдуманными данными окружения — только для демо и E2E. Движок отказывается запускать,
если какой-либо слушатель непетлевой. Используйте одноразовый каталог данных.
Второй уровень флагов управляет распределёнными и взаимно-TLS топологиями —
--admin-dsn и --allow-privileged-db-role (Postgres), --grpc-client-ca
(взаимный TLS сборщика), и --region/--known-regions (резидентность данных). Они
описаны ниже и полностью перечислены в справочнике CLI.
Переменные окружения
Движок читает небольшое количество переменных окружения при запуске. Перечисленные ниже подтверждены в корне композиции и проводке.
Каталог данных и источники
| Переменная | Эффект |
|---|---|
OLIVARES_DATA_DIR | Каталог данных по умолчанию, когда --data-dir не задан (откат на ./olivares-data). Содержит ключ подписи аудита, материал TLS и файл хранилища SQLite. Сохраняйте между перезапусками. |
OLIVARES_SOURCES_CONFIG | Путь к JSON-файлу, который подключает реальные источники наблюдения, провайдеры реестра идентичностей и источники документов знаний перед запуском движка. |
OLIVARES_SOURCES_CONFIG — единственный вход, через который разрешаются недемо-источники сигналов
и провайдеры реестра. Это конфигурация оператора с секретами,
намеренно вынесенная из хранилища. Движок читает её при запуске и регистрирует
каждый источник до старта среды выполнения.
Обработка честная, а не аварийная. Отсутствующая переменная, нечитаемый или невалидный JSON-файл, или настроенный, но пустой список источников — всё предупреждает и выдаёт пустую конфигурацию — движок никогда не прерывает запуск. Ненастроенный источник генерирует предупреждение вместо краха плоскости или притворства, что работает: без ничего подключённого карта доступа просто остаётся пустой. Чтобы заполнить её, настройте хотя бы один источник — см. подключение источника и, для кооперативного пути Claude Code, подключение Claude Code.
Точка принятия решений авторизации
Нативный контроль доступа на основе атрибутов и ролей всегда управляет. Внешняя точка принятия решений (PDP), при выборе, является дополнительным слоем только-ограничения, который может только сузить решение, уже принятое встроенным RBAC — никогда расширить.
| Переменная | Эффект |
|---|---|
OLIVARES_PDP_ENGINE | Выбирает внешний PDP: cedar, opa или none (пусто/none = только нативный ABAC). |
OLIVARES_PDP_CEDAR_FILE | Движок Cedar: путь к файлу политики оператора. |
OLIVARES_PDP_OPA_URL / _OPA_PATH / _OPA_TOKEN | Движок OPA: базовый URL, путь решения и bearer-токен для эндпоинта Open Policy Agent. |
Два адаптера стоят за одним интерфейсом — встроенный вычислитель Cedar (путь на чистом Go) и
адаптер OPA по HTTP. Если OLIVARES_PDP_ENGINE выбирает движок, но его конфигурация
невалидна (нечитаемый файл Cedar, некорректная цель OPA), движок отключает только
внешний PDP, сохраняет нативный движок ABAC и RBAC работающими и логирует громко.
Сломанный файл политики никогда не оставляет запросы без управления и не вызывает крах плоскости.
Для модели запрета по умолчанию см. управление.
Ключ подписи аудита
Аудиторский журнал работает только для добавления, с хеш-цепочкой и якорем на подписанных Ed25519 контрольных точках. Ключ подписи для каждого события разрешается при запуске, с отказом в закрытом режиме для каждого хранимого источника.
| Переменная | Эффект |
|---|---|
OLIVARES_AUDIT_SIGNING_KEY | Ключ подписи, предоставленный клиентом, base64, inline. |
OLIVARES_AUDIT_SIGNING_KEY_FILE | Путь к смонтированному секрету, содержащему ключ (предпочтительно — значение никогда не попадает в окружение процесса). |
OLIVARES_KEY_CUSTODY | Объявленная позиция хранения (byok или cmek). Запуск, чьё фактическое хранение ключей не совпадает с объявленным, отклоняется. |
Без установки любой из них ключ генерируется при первом запуске в каталоге данных —
честный откат для одного узла / разработки. Общий ключ между репликами (через
env-значение или смонтированный секрет) требуется для высокой доступности: иначе каждый
узел генерирует свой собственный и журнал ответвляется при отказоустойчивом переключении. Подписание для каждого события всегда остаётся
на узле. Хранение с обёрткой KMS (ключ, управляемый клиентом) — это дополнительная позиция, настраиваемая
через OLIVARES_KEY_WRAP; см. справочник CLI.
Выбор хранилища
Движок выбирает хранилище из --engine.
| Движок | Когда использовать | Примечания |
|---|---|---|
sqlite (по умолчанию) | Единый бинарный файл, один узел, установки в изолированной сети. | Встроенное хранилище на чистом Go, ноль внешних зависимостей. Без --dsn файл хранилища находится в каталоге данных. |
postgres | Мультитенантные и масштабируемые развёртывания. | Добавляет изоляцию тенантов через безопасность на уровне строк. Требует роль приложения с минимальными привилегиями. |
SQLite — по умолчанию и не требует внешних сервисов — это готовое к изоляции от сети, без зависимостей хранилище для топологии с одним узлом, и то, на котором работает развёртывание Docker Compose одной командой. Переходите на Postgres, когда нужна мультитенантная изоляция или горизонтальное масштабирование, не раньше.
Выбор postgres включает бэкстоп безопасности на уровне строк, изолирующий тенантов.
Движок отказывается запускаться с суперпользователем Postgres или ролью BYPASSRLS —
что отключило бы этот бэкстоп — если --allow-privileged-db-role явно
не переопределяет защиту (только для однотенантных / одноразовых окружений). Для полных кросс-тенантных системных
чтений (список организаций, покрытие мультитенантных контрольных точек) предоставьте выделенную
роль NOSUPERUSER BYPASSRLS admin через --admin-dsn; без неё эти чтения выполняются
с ограничением RLS и могут возвращать пустые результаты. OLIVARES_DB_MAX_CONNS ограничивает пул
приложений на узел.
Мультитенантность и резидентность
Один экземпляр является мультитенантным по конструкции на Postgres, с безопасностью на уровне строк,
изолирующей данные каждого тенанта. Резидентность данных наложена сверху через --region.
- Один регион (по умолчанию, без
--region): нет принудительной резидентности. - Привязка к региону (
--region eu,--region us, …): экземпляр обслуживает только тенантов, привязанных к своему домашнему региону, и отклоняет кросс-региональный доступ в закрытом режиме.--known-regionsперечисляет коды регионов, валидные для всего развёртывания; привязка тенанта должна быть одним из них, и некорректная конфигурация региона завершает запуск до открытия хранилища.
Контрольные точки аудита
--checkpoint-interval управляет тем, как часто подписанная контрольная точка записывается по каждой
цепочке тенанта (по умолчанию 1h; 0 отключает). Финальная контрольная точка записывается при чистом
завершении работы перед закрытием хранилища, поэтому цепочка якорится и при завершении, и по
интервалу. См. верификация релиза для того, как подписанная
цепочка верифицируется далее.
Безопасные значения по умолчанию
Эти позиции действуют без конфигурации помимо serve. Это
стандартная позиция продукта, а не опциональное усиление.
| Область | По умолчанию | Что это значит |
|---|---|---|
| Учётные данные | Не поставляются | Нет имени пользователя или пароля по умолчанию. При первом запуске без пользователей движок генерирует одноразовый токен настройки и выводит его только в стандартный вывод — никогда в логи. |
| Транспорт | TLS включён | HTTP и gRPC обслуживаются через TLS; самоподписанный сертификат генерируется в каталоге данных, если не предоставлен, и его отпечаток логируется. |
| Адрес привязки | Loopback | --listen и --grpc-listen по умолчанию 127.0.0.1. Доступность вне хоста — намеренное решение оператора. |
| Открытый текст | Выкл | --insecure — единственный способ обслуживать в открытом тексте, и gRPC-путь завершается отказом. Только для локальной разработки. |
| Демо-сид | Выкл | --seed-demo выключён и отказывает любому непетлевому адресу, потому что генерирует демо-администратора с публичным паролем. |
| Телеметрия домой | Выкл | Движок не отправляет данные домой. Исходящие соединения существуют только к источникам, которые вы настроили — что делает изолированную плоскость управления без исходящего трафика возможной. |
Петлевые привязки означают, что движок недоступен вне хоста, пока вы не измените их.
Когда вы публикуете его — скажем, маппируя порт хоста в Docker Compose — TLS уже включён
для защиты; не сочетайте опубликованную привязку с --insecure. На свежей установке
движок выводит блок FIRST-BOOT SETUP в стандартный вывод с одноразовым токеном
настройки (читайте из логов контейнера в Compose); администратор использует его для создания
первого пользователя, затем аутентифицируется.
Для того, что продукт наблюдает, где управляет, и где покрытие многоуровневое, читайте честность и ограничения.