Площина управління — це один Go бінарний файл, olivares, що налаштовується невеликим набором
прапорців його підкоманди serve та кількома змінними середовища — не громіздким
файлом конфігурації. Замовчування обрані для закриття при помилці: loopback прив’язки, 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 | вимкнено | Завантаження синтетичного зразкового середовища. Відмовляється запускатися на не-loopback прив’язці. |
TLS увімкнений за замовчуванням. Без наданих --tls-cert/--tls-key рушій забезпечує
самопідписаний сертифікат у каталозі даних один раз, заздалегідь, до того, як будь-який
слухач приймає з’єднання — тому обидва HTTP та gRPC сервери використовують той самий
сертифікат і жоден не повертається до відкритого тексту. Коли він генерує цей сертифікат,
він журналює SHA-256 відбиток, щоб клієнти могли довіряти або прив’язати його.
--insecure є єдиним способом обслуговувати відкритий текст, і шлях gRPC закривається при помилці:
поза --insecure сервер відмовляється створювати слухач відкритого тексту, а не
деградує мовчки. Використовуйте його лише з 127.0.0.1 під час локальної розробки.
--seed-demo створює демо-адміністратора з публічним паролем із дерева вихідного коду
та сфабрикованими даними середовища — лише для демо та E2E. Рушій відмовляється запускати це,
якщо будь-який слухач є не-loopback. Використовуйте тимчасовий каталог даних.
Другий рівень прапорців керує розподіленими топологіями та взаємним 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 — це єдиний вхід, через який розпізнаються не-демо джерела сигналів
та постачальники реєстру. Це конфігурація оператора, що містить секрети,
і навмисно тримається поза сховищем. Рушій читає його при завантаженні та реєструє
кожне джерело до запуску середовища виконання.
Обробка є чесною, а не fail-fast. Відсутня змінна, нечитабельний або невалідний 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, помилковий URL OPA), рушій вимикає лише
зовнішню PDP, зберігає нативний рушій ABAC та RBAC у дії та журналює голосно.
Пошкоджений файл політики ніколи не залишає запити без управління і ніколи не зупиняє площину.
Для моделі відмови за замовчуванням див. управління.
Ключ підпису аудиту
Аудиторський журнал тільки для додавання, з ланцюжковим хешуванням та прив’язаний підписаними контрольними точками Ed25519. Ключ підпису по кожній події визначається при завантаженні, закритий при помилці для кожного охоронюваного джерела.
| Змінна | Ефект |
|---|---|
OLIVARES_AUDIT_SIGNING_KEY | Ключ підпису, наданий клієнтом, base64, інлайн. |
OLIVARES_AUDIT_SIGNING_KEY_FILE | Шлях до змонтованого секрету, що містить ключ (бажано — значення ніколи не потрапляє у середовище процесу). |
OLIVARES_KEY_CUSTODY | Задекларована позиція зберігання (byok або cmek). Завантаження, чиє фактичне зберігання ключа не відповідає задекларованому, відхиляється. |
Без жодного з цих параметрів ключ створюється при першому завантаженні у каталозі даних —
чесний резервний варіант для одного вузла / розробки. Спільне використання одного ключа між репліками (через
значення середовища або змонтований секрет) обов’язкове для високої доступності: інакше кожен
вузол створить свій, і журнал розгалужиться при перемиканні. Підпис по кожній події завжди залишається
на сервері. Зберігання з обгорткою KMS (ключ, керований клієнтом) є додатковою позицією, налаштованою
через OLIVARES_KEY_WRAP; див. довідник CLI.
Вибір сховища
Рушій обирає сховище з --engine.
| Рушій | Коли використовувати | Примітки |
|---|---|---|
sqlite (за замовчуванням) | Один бінарний файл, один вузол, ізольовані установки. | Вбудоване чисте Go сховище, нуль зовнішніх залежностей. Без --dsn файл сховища живе у каталозі даних. |
postgres | Багатоорендарні та масштабовані розгортання. | Додає ізоляцію орендарів через безпеку на рівні рядків. Вимагає роль додатку з найменшими привілеями. |
SQLite є замовчуванням та не потребує зовнішнього сервісу — це готове до ізоляції сховище з нуль залежностей для топології одного вузла та те, яке запускає однокомандне розгортання Docker Compose. Переходьте на Postgres, коли потрібна ізоляція багатьох орендарів або горизонтальне масштабування, а не раніше.
Вибір postgres активує захист безпеки на рівні рядків, що ізолює орендарів.
Рушій відмовляється запускатися проти суперкористувача Postgres або ролі BYPASSRLS —
що вимкнуло б цей захист — якщо --allow-privileged-db-role явно
не перевизначає перевірку (лише для одного орендаря / тимчасового використання). Для повних крос-орендарних System
читань (список організацій, покриття контрольних точок для багатьох орендарів) надайте виділену
роль 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 вимкнений та відмовляє будь-яку не-loopback прив’язку, тому що створює демо-адміністратора з публічним паролем. |
| Телеметрія додому | Вимкнена | Рушій не телефонує додому. Вихідні з’єднання існують лише до джерел, які ви налаштуєте — що робить ізольовану площину управління можливою з нуль вихідного з’єднання. |
Прив’язки loopback означають, що рушій недоступний поза хостом, поки ви їх не зміните.
Коли ви його публікуєте — скажімо, зіставляючи порт хоста у Docker Compose — TLS вже увімкнений
для захисту; не поєднуйте опубліковану прив’язку з --insecure. На свіжій установці
рушій друкує блок FIRST-BOOT SETUP у стандартний вивід з одноразовим токеном
налаштування (читайте з журналів контейнера під Compose); адміністратор використовує його для створення
першого користувача, потім аутентифікується.
Для того, що продукт спостерігає, де він керує та де покриття є багаторівневим, прочитайте чесність і обмеження.