模块 XIX — 自有 API 与 manage-as-code 面
模块 XIX 不是一个被栓接到引擎上的功能——它就是引擎的面。其他每个模块都通过同一套第一方 API 触及外部世界, 而 Web UI 是覆盖在那个完全相同契约之上的一个表现层,而非一套平行的契约。本页是这个面当前所暴露内容的参考, 以及如何将控制平面作为代码来管理,及其真实边界。
API 契约
Section titled “API 契约”引擎在 /v1 之下讲一套 REST API(chi 路由器,经加固的 http.Server),以及它的一个聚焦的、冻结的 gRPC 镜像
(olivares.api.v1:服务器信息、智能体读取/创建、审计验证,外加标准的健康服务)。gRPC 是一个刻意的子集,
而非完全对等——新端点先落地于 REST。两种接口都运行同一条 authenticate → resolve-tenant → authorize 链路,
并以完全相同的方式映射错误,因此无论在哪种接口上,一个 not-found 都与一个跨租户资源无法区分。
REST 面作为一份 OpenAPI 3.1 契约发布,直接从产品撰写的 schema 渲染于 API 参考。该文档是稳定核心表面的契约权威记录;模块路由则作为独立的 beta 文档发布——见模块路由参考(亦见下方诚实的边界)。 相同的功能也可从终端驱动——见 CLI 参考——因为 CLI 就是引擎,而非它的一层包装。
认证采用不透明的服务端 bearer token,而非 JWT。
token 带有用途前缀(会话型 vs. API key);
服务器只持久化一个公开选择器和密钥的 SHA-256,并以常数时间比较该密钥。对 manage-as-code 工作流而言要紧的后果是:
token 是可即时吊销的,不携带任何声明(claims)或机密,并且不增加任何加密解析攻击面。
一个 API token 被绑定到一个 (tenant, role),或者是一个未绑定的系统级凭据;
一个其租户 header 与所绑定 token 不一致的请求会被拒绝,绝不静默放宽。
Manage-as-code:Terraform provider
Section titled “Manage-as-code:Terraform provider”terraform-provider-olivares provider 是一个独立的 Go 模块,且是一个纯 REST 客户端
——它从不导入引擎核心或连接器(connector)SDK,从而将庞大的 provider 依赖树排除在核心的供应链之外。
它配置有一个端点、一个敏感的 API token 和一个可选的租户,管理一组刻意保持精简的、声明式的对象:
| 类别 | 名称 | 管理什么 |
|---|---|---|
| resource | olivares_agent | 一个智能体的目录定义(完整 CRUD + 导入) |
| resource | olivares_policy | 一份治理策略声明 |
| resource | olivares_agent_identity_binding | 一个智能体到非人身份(NHI)的绑定 |
| resource | olivares_deployment | 一个部署定义(期望状态,声明式) |
| data source | olivares_policies / olivares_identities | 受治理名册的只读视图 |
| data source | olivares_access_edges | R/RW 访问映射及其 permitted-vs-observed 漂移 |
| data source | olivares_deployment / olivares_server_info | 一个部署定义;引擎元数据 |
这些是该 provider 所提供的唯一资源与数据源。声明一个 olivares_deployment 会在控制平面中记录期望状态
——它不触及基础设施;apply 路径属于 模块 VII,是一个 deny-closed 接缝。
服务引擎是默认安全(secure-by-default)的:TLS 是开启的(若未提供,首次启动时会生成一份自签证书), 绑定默认为 localhost,且本地监听并不豁免授权。一份全新安装没有凭据——它向 stdout 铸造一个一次性的设置 token, 并拒绝每一个受保护端点,直到第一位管理员被创建。审计是仅追加、哈希链式的,并带有 Ed25519 签名的检查点, 使得在某个检查点之前重写历史在密码学上是可被检测的。
事件平台(模块 XIX 的出站一半)
Section titled “事件平台(模块 XIX 的出站一半)”自事件平台(modules/eventing)发布以来,模块 XIX 的面也包含了租户自助式事件订阅:
对总线事件目录(edge.observed、cost.sampled、finding.reported、audit.recorded、…)的类型化订阅,
具有持久的至少一次(at-least-once)投递——带退避的重试、一个死信队列,以及从游标回放——
投递到一个 HMAC 签名的 webhook 或一个 SIEM sink。
通知模块(XV)仍是面向操作员供给目的地的告警路由器;
事件平台则是面向集成者的平台。一个配套的只读姿态导出(posture export)(modules/posture-export)
让一座控制塔得以轮询产品的 ground-truth 姿态——访问图、漂移、清单、发现——仅以 ref/哈希/关系的形式呈现,
导出本身也经审计。
- API 参考 — 为核心面渲染的 OpenAPI 3.1 契约。
- API 稳定性策略 — 本面的版本管理、弃用/日落(sunset)信号传达与支持窗口。
- 使用客户端 SDK — 第一方 Go/Python/TypeScript 客户端。
- CLI 参考 — 来自
olivares二进制的相同功能。 - 将控制平面作为代码管理 — Terraform provider 指南。
- 模块 VII — 部署 —
olivares_deployment驱动之处(那个503接缝)。 - 模块目录 — Govern/Observe 与 Actuate 的划分。
- 诚实与边界 — 今天驱动什么、不驱动什么。
- 架构概览 — 这个面所处的引擎层。