Zum Inhalt springen

Modul XIX — die eigene API und die Manage-as-Code-Fläche

Modul XIX ist kein Feature, das an die Engine geschraubt ist — es ist die Fläche der Engine. Jedes andere Modul erreicht die Außenwelt über dieselbe First-Party-API, und die Web-UI ist eine Präsentationsschicht über genau diesem Vertrag, keine parallele. Diese Seite ist die Referenz dafür, was diese Fläche heute exponiert und wie man den Control Plane als Code verwaltet, mit ihren realen Grenzen.

Die Engine spricht eine REST-API unter /v1 (chi-Router, gehärteter http.Server) und einen fokussierten, eingefrorenen gRPC-Spiegel davon (olivares.api.v1: Server-Info, Agent-Lesen/-Erstellen, Audit-Verifikation, plus den standardmäßigen Health-Service). gRPC ist ein bewusster Teilausschnitt, keine vollständige Parität — neue Endpunkte landen zuerst in REST. Beide Leitungen durchlaufen die gleiche Kette authenticate → resolve-tenant → authorize und mappen Fehler identisch, sodass ein Not-Found auf beiden Leitungen nicht von einer mandantenübergreifenden Ressource unterscheidbar ist.

Die REST-Fläche wird als OpenAPI-3.1-Vertrag veröffentlicht, der in der API-Referenz direkt aus dem verfassten Schema des Produkts gerendert wird. Dieses Dokument ist der maßgebliche Vertrag für die stabile Kernfläche; die Modulrouten werden separat als Beta-Dokument veröffentlicht — in der Modulrouten-Referenz (siehe die ehrlichen Grenzen unten). Dieselbe Funktionalität ist auch vom Terminal aus steuerbar — siehe die CLI-Referenz —, weil die CLI die Engine ist, kein Wrapper darüber.

Die Authentifizierung erfolgt über opake serverseitige Bearer-Tokens, nicht JWT. Ein Token ist zweck-präfigiert (Session vs. API-Key); der Server persistiert nur einen öffentlichen Selektor und einen SHA-256 des Secrets und vergleicht das Secret in konstanter Zeit. Die Konsequenzen, die für einen Manage-as-Code-Workflow zählen: Tokens sind sofort widerrufbar, tragen keine Claims oder Secrets und fügen keine Crypto-Parsing-Angriffsfläche hinzu. Ein API-Token ist an ein (tenant, role) gebunden oder ist ein ungebundenes Credential auf System-Ebene; eine Anfrage, deren Tenant-Header einem gebundenen Token widerspricht, wird abgewiesen, niemals still ausgeweitet.

Der Provider terraform-provider-olivares ist ein separates Go-Modul und ein reiner REST-Client — er importiert niemals den Engine-Kern oder das Connector-SDK, was den großen Abhängigkeitsbaum des Providers aus der Supply-Chain des Kerns heraushält. Konfiguriert mit einem Endpunkt, einem sensiblen API-Token und einem optionalen Tenant verwaltet er eine bewusst kleine, deklarierte Menge von Objekten:

ArtNameVerwaltet
resourceolivares_agentdie Katalog-Definition eines Agenten (volles CRUD + Import)
resourceolivares_policyeine Governance-Policy-Deklaration
resourceolivares_agent_identity_bindingdie Bindung eines Agenten an eine non-human Identity
resourceolivares_deploymenteine Deployment-Definition (Soll-Zustand, deklarativ)
data sourceolivares_policies / olivares_identitiesread-only Sichten auf den gesteuerten Roster
data sourceolivares_access_edgesdie R/RW-Access-Map und ihr Permitted-vs-Observed-Drift
data sourceolivares_deployment / olivares_server_infoeine Deployment-Definition; Engine-Metadaten

Dies sind die einzigen Resources und Data-Sources, die der Provider bedient. Das Deklarieren eines olivares_deployment zeichnet einen Soll-Zustand im Control Plane auf — es berührt die Infrastruktur nicht; der Apply-Pfad gehört zu Modul VII und ist eine deny-closed Naht.

Die bedienende Engine ist secure-by-default: TLS ist an (ein selbstsigniertes Zertifikat wird beim ersten Boot generiert, falls keines bereitgestellt ist), der Bind defaultet auf localhost, und lokal zu lauschen ist keine Ausnahme von der Autorisierung. Eine frische Installation hat keine Credentials — sie prägt ein einmaliges Setup-Token nach stdout und weist jeden geschützten Endpunkt ab, bis der erste Administrator erstellt ist. Audit ist append-only und hash-chained, mit Ed25519-signierten Checkpoints, die das Umschreiben von Historie vor einem Checkpoint kryptografisch erkennbar machen.

Die Eventing-Plattform (die ausgehende Hälfte von Modul XIX)

Abschnitt betitelt „Die Eventing-Plattform (die ausgehende Hälfte von Modul XIX)“

Seitdem die Eventing-Plattform ausgeliefert wurde (modules/eventing), umfasst die Fläche von Modul XIX auch mandanten-self-service Event-Subscriptions: typisierte Subscriptions über den Katalog der Bus-Events (edge.observed, cost.sampled, finding.reported, audit.recorded, …) mit durabler At-least-once-Zustellung — Retries mit Backoff, eine Dead-Letter-Queue und Replay ab einem Cursor — an einen HMAC-signierten Webhook oder einen SIEM-Sink. Das Notify-Modul (XV) bleibt der Alert-Router zu betreiberbereitgestellten Zielen; Eventing ist die integratorseitige Plattform. Ein begleitender read-only Posture-Export (modules/posture-export) lässt einen Control-Tower die Ground-Truth-Posture des Produkts pollen — Access-Graph, Drift, Inventar, Findings — nur als Refs/Hashes/Relationen, wobei der Export selbst auditiert wird.