跳转到内容

从零到一张读/写访问图

完成本教程后,你将在本地运行起 Olivares AI, 并到达它的核心工件:一张带有真实 Permitted-vs-Observed 偏差结果的 读/写访问图。你将 通过看它运作来理解产品 —— 这是一条学习路径,而非生产安装(关于后者,参见 自托管)。

我们使用捆绑的 演示资产域--seed-demo):一小组合成的 agents、 身份和资源,它们会像一个实际运行的 pgAudit 或 OpenTelemetry collector 那样, 真实 地流经事件总线。一切都在 localhost 上运行。

  • Go 1.26+(用于构建二进制),或 Docker(关于容器路径,参见 自托管操作指南)。
  • curlpython3,用于从 shell 与 API 通信。
  • 一份 Olivares AI 仓库的 checkout。
  1. 构建单一二进制。 从仓库根目录:

    Terminal window
    task setup # install git hooks, commit tooling and web deps
    task build # compile the static binary with the web embedded (go:embed)
    ./bin/olivares version

    task build 会构建 web bundle、第一方 connector 插件以及 二进制,生成一个位于 ./bin/olivares 的自包含工件。

  2. 用演示资产域在 loopback 上启动它。 选一个全新的数据目录,以便 从干净状态开始:

    Terminal window
    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 标志在 loopback 上以明文 HTTP 提供服务(对本地 教程而言没问题;否则 TLS 默认开启)。启动时你会看到一条 DEMO MODE 横幅,其中包含演示凭据:

    demo@olivares.local / olivares-demo-estate

让服务器保持运行,打开第二个终端。

  1. 登录,使用演示凭据来获取一个 bearer token:

    Terminal window
    BASE=http://127.0.0.1:8901
    TOKEN="$(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"])')"
  2. 解析演示租户(access-map 端点是租户范围的):

    Terminal window
    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"]')"
  3. 获取读/写图。 这是模块 III —— access map:

    Terminal window
    curl -sf "$BASE/v1/m/accessmap/graph?limit=200" \
    -H "Authorization: Bearer $TOKEN" -H "X-Olivares-Tenant: $TENANT" | python3 -m json.tool

    演示资产域大约返回 20 个节点和 13 条边 —— agents、身份、 MCP servers、模型、provider 和资源,每条边都被分类为 read 或 read-write。

  4. 获取 Permitted-vs-Observed 偏差:

    Terminal window
    curl -sf "$BASE/v1/m/accessmap/drift" \
    -H "Authorization: Bearer $TOKEN" -H "X-Olivares-Tenant: $TENANT" | python3 -m json.tool

    这会浮现出预置的 意外访问,例如:

    • 一个 agent 读取它 从未被授予appdb.public.secrets(已归属);以及
    • 一个共享池身份写入 appdb.public.logs(近似归属)。
  5. (可选)查看整个预置清单:

    Terminal window
    curl -sf "$BASE/v1/m/inventory/summary" \
    -H "Authorization: Bearer $TOKEN" -H "X-Olivares-Tenant: $TENANT" | python3 -m json.tool

web UI 内嵌于同一个二进制中,并从同一 origin 提供。在 演示服务器仍在运行时,打开:

http://127.0.0.1:8901

用演示凭据登录并打开 access-map 视图:图会渲染出 相同的节点和边,偏差叠加层会高亮意外访问, 仪表盘会汇总该资产域。

这里 没有 发生的事(以及接下来该做什么)

Section titled “这里 没有 发生的事(以及接下来该做什么)”
  • 演示数据是合成的,且演示密码是公开的 —— 这 不是 一个 安全的部署。要做一个真实部署,请遵循自托管: 它没有默认凭据,并使用一个一次性 setup token。
  • 上面用到的模块端点(/v1/m/accessmap/*/v1/m/inventory/*)是 可达的,但按设计 属于所提供的 OpenAPI 文档; API 参考记录了核心 REST 面。
  • 要理解 为什么 图以这种方式构建(协作式遥测与原生存储 审计交叉、eBPF 作为后备、MCP 注解被视为 不可信),请阅读架构概览