Push-Ingest: Vertrag und Auswertung

Handbuch · API und Verfügbarkeit · Datenquellen einrichten · Adapter

Diese Referenz gilt für die Push-Erweiterung nach v1.25.0. Die maschinenlesbaren Schemas stehen in der OpenAPI-Spezifikation der eigenen Instanz. Für die erste Einrichtung die Schrittfolge für Datenquellen verwenden.

Endpunkte

Basispfad auf der eigenen Instanz: /api/v1/integrations. Authentifizierung, Größenbegrenzung und Rate-Limit sind in der API-Anleitung beschrieben. Schreibanfragen benötigen Content-Type: application/json.

Methode Pfad relativ zum Basispfad Zweck / Scope
GET /identity Schlüssel-ID und zugeordnete Quellen; ingest:write
GET /sources Quellenliste; integrations:read
POST /sources Quelle anlegen; integrations:manage und Fachrechte
GET /sources/{id} Konfiguration und Aktualität; integrations:read
PUT /sources/{id} Vollständige Konfiguration mit Revision ändern; integrations:manage und Fachrechte
GET /sources/{id}/bindings Zuordnungen und Fehlstatus; integrations:read
POST /sources/{id}/bindings Explizite Zuordnung und Feldzuständigkeit; integrations:manage und Fachrechte
POST /sources/{id}/batches Atomarer Import; der Quelle zugeordneter Schlüssel mit ingest:write
GET /sources/{id}/observations Nachweismetadaten; integrations:read
GET /sources/{id}/observations/{childId} Nachweis mit entschlüsseltem Inhalt; integrations:read
GET /sources/{id}/deviations Abweichungsliste; integrations:read
GET /sources/{id}/deviations/{childId} Abweichung samt Begründung; integrations:read
PUT /sources/{id}/deviations/{childId} Fallentscheidung; integrations:manage
GET /sources/{id}/deviations/{childId}/decisions Unveränderliche Entscheidungshistorie mit entschlüsselten Begründungen; integrations:read

Fachrechte bei Quellen und Bindings: assets:read plus assets:write bzw. backup-jobs:read plus backup-jobs:write. Beim Verknüpfen einer Maßnahme zusätzlich measures:read und measures:write.

Listen antworten mit { "items": [], "offset": 0, "limit": 100 }. offset beginnt bei 0, limit liegt zwischen 1 und 100 und ist standardmäßig 100. Für vollständige Ergebnisse den Offset um die Seitengröße erhöhen, bis eine kürzere oder leere Seite zurückkommt. Alle Pfad-IDs sind UUIDs.

Quellenkonfiguration und Binding

Feld Vertrag
name Nicht leer, höchstens 200 Zeichen
apiKeyId UUID des zugeordneten Adapter-Schlüssels
enabled Boolean
objectKind asset oder backup_job; nach Anlage unveränderlich
coverage Nicht leer, höchstens 200 Zeichen; nach Anlage unveränderlich
expectedIntervalHours 1 bis 8760 Stunden
missingGraceHours 0 bis 8760 Stunden
createAssets null oder Vorgaben für neue Assets: ownerId, criticality (Ganzzahl 1 bis 5), assetType, managedFields; nur bei asset
rules rpo, restore, sourceStale als Boolean; backupFailures als Ganzzahl 1 bis 20 oder null

Erlaubte assetType-Werte: server, database, service, software, network, cloud_service, other. managedFields enthält nur name, location, ip_address, os_platform, höchstens vier Einträge. Alle Konfigurationsfelder sind erforderlich; unbekannte Felder werden abgelehnt.

Ein Binding enthält externalId (nicht leer, maximal 200 Zeichen), targetId (UUID) und managedFields. Für ein bestehendes Binding muss das Ziel unverändert bleiben. Die Quellenanlage antwortet mit { "id": "UUID", "revision": 1 }; Änderungen verwenden { "revision": 1, "source": { ... } } und liefern die erhöhte Revision. Lesende Antworten enthalten die Regeln und fachlichen Vorgaben unter config sowie Zeitstempel wie last_received_at und last_observed_at.

Batch-Vertrag

Beispiel für eine bereits gebundene Assetquelle mit Compliance-Nachweis. UUID, Quellenrevision, Coverage, Zeitpunkte und externe ID durch tatsächliche Werte ersetzen:

{
  "schemaVersion": 1,
  "batchId": "8d2ce318-9ab1-4e50-b715-94e690c1d250",
  "sourceRevision": 1,
  "coverage": "site-a-managed-assets",
  "mode": "delta",
  "observedAt": "2026-09-19T08:00:00Z",
  "totalObjects": 1,
  "objects": [
    {
      "externalId": "device-123",
      "observations": [
        {
          "eventId": "device-123-compliance-20260919T080000Z",
          "checkType": "device_compliance",
          "result": "passed",
          "observedAt": "2026-09-19T08:00:00Z",
          "validUntil": "2026-09-20T08:00:00Z",
          "evidence": { "summary": "Die zugeordneten Geräterichtlinien sind erfüllt." }
        }
      ]
    }
  ]
}
Feld Vertrag
schemaVersion Aktuell exakt 1
batchId UUID, vor dem ersten Senden dauerhaft speichern
sourceRevision, coverage Müssen zur aktuellen Quellenkonfiguration passen
mode delta für Teillieferung, full für den gesamten konfigurierten Bereich
observedAt Erhebungszeitpunkt mit Zeitzone; höchstens fünf Minuten in der Zukunft
totalObjects Exakte Länge von objects, auch bei 0
objects[].externalId Stabile ID, nicht leer, maximal 200 Zeichen und pro Batch eindeutig
objects[].asset Optional; bei Neuanlage erforderlich. name ist Pflicht, bis 200 Zeichen; location, ip_address, os_platform optional, jeweils bis 200 Zeichen oder null
objects[].observations Pflicht-Array, auch leer zulässig

Grenzen je Anfrage: 1 MiB JSON, 500 Objekte, insgesamt 1000 Beobachtungen, höchstens 20 Beobachtungen pro Objekt. Unbekannte Felder sind unzulässig. Ein full-Batch wird nicht über mehrere Requests zusammengesetzt. Die Anzahl bestätigt nur den Inhalt des Requests; sie beweist keinen vollständigen Herstellerabruf.

Alle Änderungen eines Batches werden gemeinsam angenommen oder zurückgerollt. Erfolg antwortet mit HTTP 200:

{
  "batchId": "8d2ce318-9ab1-4e50-b715-94e690c1d250",
  "objects": [{ "externalId": "device-123", "targetId": "UUID-IN-ISMS-LITE" }],
  "observations": 1
}

observations zählt neu eingefügte Beobachtungen. Identische bekannte Ereignisse werden nicht erneut gespeichert.

Beobachtungen und Evidence

Feld Vertrag
eventId Innerhalb der Quelle unveränderliche Ereignis-ID, maximal 200 Zeichen
checkType backup_point, backup_run, restore_test, device_compliance, config_backup
result passed, failed oder unknown
observedAt Tatsächlicher Erhebungszeitpunkt mit Zeitzone, nicht später als der Batch-Zeitpunkt
validUntil Später als observedAt, höchstens 366 Tage danach
restorePointAt Optional oder null, nicht später als die Beobachtung; bei backup_point mit passed erforderlich
evidence.summary Nicht leere Zusammenfassung, höchstens 4000 Zeichen
evidence.reference Optionaler HTTPS-Link, höchstens 2000 Zeichen
evidence.sha256 Optionale SHA-256-Prüfsumme als 64 kleine Hex-Zeichen

Nachweisinhalte werden verschlüsselt gespeichert und beim berechtigten Detailabruf entschlüsselt; der Abruf wird protokolliert. Der Server lädt verlinkte Inhalte nicht herunter und prüft nicht selbst den behaupteten Hash einer externen Datei. Die Erreichbarkeit und Aufbewahrung externer Nachweise liegen beim Betreiber. Dokumentdateien über die Fach-API ablegen, keine Rohlogs, Backup-Dateien, Konfigurationen oder Geheimnisse als Summary einliefern.

Wiederholung, Reihenfolge und Vollabgleich

Dieselbe batchId mit demselben Inhalt liefert bei einer Wiederholung das ursprüngliche Ergebnis. Dieselbe ID mit verändertem Inhalt führt zu batchConflict. Identische eventId und Ereignisinhalte dürfen in späteren Batches erneut vorkommen. Veränderte Inhalte unter derselben Ereignis-ID führen zu eventConflict.

Neue Bewertungen erhalten neue Ereignis-IDs und neue Erhebungszeitpunkte. Die Kombination aus Objekt, Prüftyp und Zeitpunkt darf nicht durch ein anderes Ereignis mehrdeutig werden. Verspätete Nachweise bleiben historisch erhalten und ersetzen keinen neueren Bewertungsstand.

Ein neuer Vollabgleich muss zeitlich neuer sein als der zuletzt angenommene Vollabgleich. Fehlende Objekte werden nur durch einen erfolgreichen full-Batch und nach der konfigurierten Karenzzeit markiert. Ein verspäteter Delta-Stand hebt eine neuere Fehlmarkierung nicht auf. Der fachliche Assetstatus wird nicht automatisch auf stillgelegt gesetzt.

Bewertungsregeln

ISMS Lite wertet beim Import und ungefähr jede Minute aus. Es trennt das Prüfergebnis passed / failed / unknown vom Bearbeitungsstand eines Vorgangs.

Regel Bewertung
rpo Nur bei aktivierter Regel, Assetzuordnung und fachlich gesetztem Asset-RPO. Alter des gültig als verwendbar gemeldeten Restore-Punkts gegen das RPO: überschritten = failed, eingehalten = passed. Ohne gültigen verwendbaren Punkt = unknown.
restore_test Bei aktivierter Restore-Regel Ergebnis des neuesten Nachweises; fehlend oder abgelaufen = unknown.
backup_failures Die konfigurierte Anzahl neuester, aufeinanderfolgender, gültiger Fehlversuche ergibt failed. Neuester gültiger Erfolg = passed; nicht erreichte Fehlerschwelle oder unklare Daten = unknown.
source_stale Bei aktivierter Regel nach Überschreiten von expectedIntervalHours seit letzter Erhebung = unknown; ohne Erhebung zählt die Quellenanlage.
object_missing Seit vollständigem Abgleich nach Karenzzeit nicht mehr gesehen = unknown.
target_deleted Fachliches Zielobjekt gelöscht = unknown; Historie bleibt bestehen.
device_compliance, config_backup Ergebnis der neuesten gelieferten Beobachtung; nach Ablauf = unknown. Ohne bisherige Beobachtung dieses Typs keine solche Regelbewertung.

Abgelaufene Nachweise werden nicht als Erfolg fortgeschrieben. Ein Backup-Jobfehler beweist keine RPO-Verletzung. Die Auswertung des tatsächlichen Restore-Punkt-Alters ist getrennt von der bestehenden fachlichen Prüfung eines konfigurierten Backup-Intervalls.

Abweichungen bearbeiten

Für failed und unknown kann ein Integrationsvorgang entstehen. Pro Quelle, Objekt und Regel gibt es höchstens einen aktiven Vorgang. Er ist kein Audit-Finding und keine BCM-Übung.

state Bedeutung
open Fehler oder unbekannter Zustand besteht
recovered Technisch wieder passed; fachlicher Abschluss steht aus
closed Berechtigter Abschluss mit Begründung

Ein erneuter Fehler vor Abschluss öffnet denselben Vorgang wieder. Nach einem abgeschlossenen Vorgang kann eine neue Abweichung einen neuen Vorgang erzeugen. Zur Bearbeitung PUT /sources/{id}/deviations/{childId} mit allen vier Feldern senden:

{
  "state": "keep",
  "measureId": null,
  "exceptionUntil": null,
  "reason": "Ursache wird geprüft; nächste Bewertung nach dem geplanten Lauf."
}

keep behält den Bearbeitungsstand. measureId verknüpft eine vorhandene Maßnahme; null entfernt die Verknüpfung. Eine Maßnahme bei Bedarf zuerst über die Fach-API anlegen. exceptionUntil setzt eine begründete Ausnahme in der Zukunft, höchstens 365 Tage ab Entscheidung; null entfernt sie. excepted zeigt eine aktive Ausnahme, das Prüfergebnis bleibt sichtbar. reason ist erforderlich und höchstens 4000 Zeichen lang. Vorhandene Verknüpfungen und Ausnahmen vor einer Änderung lesen und bewusst wieder mitsenden.

state: "close" schließt nach Prüfung einen erholten Vorgang. Noch aktive Vorgänge dürfen nur geschlossen werden, wenn die Quelle oder die zugehörige abschaltbare Regel deaktiviert wurde. Bereits geschlossene Vorgänge sind nicht weiter änderbar. Entscheidungen und Begründungen bleiben verschlüsselt als unveränderliche Historie unter /decisions erhalten.

Weder Erholung noch Abschluss erzeugen eine Risikoakzeptanz, Control-Freigabe oder Maßnahmenerledigung. Die automatische Anlage oder Erledigung von Maßnahmen ist nicht enthalten.

Konflikte beheben

Integrationsfehler verwenden beispielsweise HTTP 409, code: "conflict" und details.reason. Die folgende Tabelle nennt reason-Werte, keine eigenständigen Fehlercodes.

details.reason Vorgehen
sourceRevision Aktuelle Quelle lesen; Revision und Coverage prüfen. Bereits angenommene Batches unverändert lassen.
batchConflict Dieselbe Batch-ID wurde anders verwendet. Originaldatei erneut senden oder für eine neue Lieferung eine neue ID erzeugen.
eventConflict Ereignisinhalt wurde nachträglich verändert. Ursprüngliches Ereignis erhalten; eine neue Bewertung als neues Ereignis liefern.
observationTimeConflict Objekt, Prüftyp und Zeitpunkt bereits durch anderes Ereignis belegt. Ereignisidentität und tatsächliche Erhebungszeiten prüfen.
oldSnapshot Vollabgleich ist nicht neuer als der vorige. Tatsächlich neuen vollständigen Bestand erheben.
bindingRequired Vorhandenes Ziel zuordnen oder bei Assetquellen die fachlich zulässige Neuanlage konfigurieren.
manualFieldConflict Manuelle Änderung prüfen und Feldzuständigkeit im Binding bewusst korrigieren.
targetDeleted Gelöschtes Ziel nicht erneut importieren; bei beabsichtigter Neuerfassung eine neue Quellenidentität verwenden.
deviationActive Nur erholte oder ausdrücklich aus der Bewertung genommene Vorgänge schließen; geschlossene Vorgänge unverändert lassen.
exceptionDate HTTP 400: Ausnahme muss zukünftig und höchstens 365 Tage entfernt sein.

Bei einem fachlichen Konflikt bleibt der gesamte Batch ohne Teilimport. Ein unverändert wiederholter 400 oder 409 löst die Ursache nicht. Bei unklarer Transportantwort dagegen dieselbe gespeicherte Datei erneut senden.