От нуля до read/write access graph
К концу этого руководства у вас будет Olivares AI, работающий локально, и вы достигнете его центрального артефакта: read/write access graph с реальным результатом дрейфа Permitted-vs-Observed. Вы изучите продукт, наблюдая, как он работает — это путь обучения, а не продакшен-установка (для этого см. self-hosting).
Мы используем прилагаемый демонстрационный estate (--seed-demo): небольшой
синтетический набор агентов, идентичностей и ресурсов, который проходит через
реальную шину событий ровно так, как это делал бы живой коллектор pgAudit или
OpenTelemetry. Всё работает на localhost.
Предварительные требования
Заголовок раздела «Предварительные требования»- Go 1.26+ (для сборки бинарника) или Docker (см. руководство по self-hosting для пути через контейнер).
curlиpython3для обращения к API из оболочки.- Чекаут репозитория Olivares AI.
Сборка и запуск
Заголовок раздела «Сборка и запуск»-
Соберите единственный бинарник. Из корня репозитория:
Окно терминала task setup # install git hooks, commit tooling and web depstask build # compile the static binary with the web embedded (go:embed)./bin/olivares versiontask buildсобирает веб-бандл, first-party плагины коннекторов и бинарник, производя один самодостаточный артефакт по пути./bin/olivares. -
Запустите его с демонстрационным estate на loopback. Выберите свежий каталог данных, чтобы начать с чистого листа:
Окно терминала DATA="$(mktemp -d)"./bin/olivares serve --insecure --seed-demo \--listen 127.0.0.1:8901 --grpc-listen 127.0.0.1:8902 \--data-dir "$DATA"Флаг
--insecureотдаёт открытый HTTP на loopback (нормально для локального руководства; в остальных случаях TLS включён по умолчанию). При запуске вы увидите баннер DEMO MODE с демонстрационными учётными данными:demo@olivares.local / olivares-demo-estate
Достигните access graph
Заголовок раздела «Достигните access graph»Оставьте сервер работающим и откройте второй терминал.
-
Войдите с демонстрационными учётными данными, чтобы получить bearer-токен:
Окно терминала BASE=http://127.0.0.1:8901TOKEN="$(curl -sf -X POST "$BASE/v1/auth/login" \-H 'Content-Type: application/json' \-d '{"email":"demo@olivares.local","password":"olivares-demo-estate"}' \| python3 -c 'import sys,json;print(json.load(sys.stdin)["token"])')" -
Разрешите демонстрационного арендатора (эндпоинты access-map привязаны к арендатору):
Окно терминала TENANT="$(curl -sf "$BASE/v1/system/orgs" -H "Authorization: Bearer $TOKEN" \| python3 -c 'import sys,json;[print(o["tenant_id"]) for o in json.load(sys.stdin)["items"] if o["slug"]=="demo"]')" -
Получите read/write граф. Это модуль III — access map:
Окно терминала curl -sf "$BASE/v1/m/accessmap/graph?limit=200" \-H "Authorization: Bearer $TOKEN" -H "X-Olivares-Tenant: $TENANT" | python3 -m json.toolДемонстрационный estate возвращает примерно 20 узлов и 13 рёбер — агентов, идентичности, MCP-серверы, модели, провайдеров и ресурсы, причём каждое ребро классифицировано как read или read-write.
-
Получите дрейф Permitted-vs-Observed:
Окно терминала curl -sf "$BASE/v1/m/accessmap/drift" \-H "Authorization: Bearer $TOKEN" -H "X-Olivares-Tenant: $TENANT" | python3 -m json.toolЭто выявляет засеянные неожиданные доступы, например:
- агент, читающий
appdb.public.secrets, который ему никогда не предоставлялся (атрибутировано); и - идентичность общего пула, пишущая
appdb.public.logs(приблизительная атрибуция).
- агент, читающий
-
(Опционально) Посмотрите весь засеянный инвентарь:
Окно терминала curl -sf "$BASE/v1/m/inventory/summary" \-H "Authorization: Bearer $TOKEN" -H "X-Olivares-Tenant: $TENANT" | python3 -m json.tool
Посмотрите это в веб-UI
Заголовок раздела «Посмотрите это в веб-UI»Веб-UI встроен в тот же бинарник и отдаётся из того же origin. С работающим демо-сервером откройте:
http://127.0.0.1:8901Войдите с демонстрационными учётными данными и откройте представление access-map: граф рендерит те же узлы и рёбра, причём наложение дрейфа подсвечивает неожиданные доступы, а дашборды резюмируют estate.
Что здесь не происходит (и что делать дальше)
Заголовок раздела «Что здесь не происходит (и что делать дальше)»- Демонстрационные данные синтетические, а демонстрационный пароль публичный — это не безопасное развёртывание. Для настоящего следуйте self-hosting: там нет учётных данных по умолчанию и используется одноразовый токен настройки.
- Эндпоинты модулей, использованные выше (
/v1/m/accessmap/*,/v1/m/inventory/*), достижимы, но не входят в отдаваемый документ OpenAPI по замыслу; справочник API документирует основную поверхность REST. - Чтобы понять, почему граф строится именно так (кооперативная телеметрия, скрещённая с нативным аудитом хранилища, eBPF как подстраховка, аннотации MCP, трактуемые как ненадёжные), прочитайте обзор архитектуры.