ENG-06: Prüfprotokoll
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
Archive-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
Archive-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
Mail-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
Archive-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
Archive-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
Mail-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
7996c3e96f
commit
760e755621
1 file changed
+45
@@ -0,0 +1,45 @@
|
||||
# ENG-06 – Prüfprotokoll: Connector-Audit-Kopplung (Core AUD)
|
||||
|
||||
Datum: 2026-09-24. Host: 204 (Wegwerf-Postgres, `dms_dev`-Rolle über `TEST_TENANT_DSN`).
|
||||
|
||||
## Umsetzung
|
||||
|
||||
- `connect/internal/httpclient` — hardened outbound `*http.Client` (15s Timeout, keine Weiterleitungen), Kopie des Musters aus `archive/internal/httpclient`.
|
||||
- `connect/internal/auditclient` — schlanker Client gegen Cores `POST /audit/ingest` (AUD-01), `X-Service-Token`-Auth, Kopie aus `archive/internal/auditclient`.
|
||||
- `connect/internal/audittrail` — outage-toleranter Recorder: `Record` versucht sofortige Zustellung, puffert bei jedem Fehler in `connect_audit_outbox` statt einen Fehler zurückzugeben (AC3); `Replay` meldet den Puffer vollständig und in Reihenfolge nach. Kopie aus `archive/internal/audittrail` (CMP-04).
|
||||
- Migration `0005_connector_audit_outbox` — legt `connect_audit_outbox` an.
|
||||
- `credential.Store.PutWithActor` — neue, zusätzliche Methode neben dem unveränderten `Put` (kein Umbau bestehender Aufrufer wie `Refresher`). Erkennt per `RETURNING (xmax = 0)` Neuanlage vs. Änderung und meldet `connect.connection.created` bzw. `connect.credential.changed` mit Actor, Zeitpunkt (serverseitig `now()`) und betroffenem Connector (`connector_name/connector_instance_id`) als Target.
|
||||
- `syncjob.Store.CompleteRunAudited` — neue, zusätzliche Methode neben dem unveränderten `CompleteRun`. Meldet `connect.sync.executed` mit Actor `svc:connect` (automatisierter Vorgang), Zeitpunkt und betroffenem Connector.
|
||||
- Beide Stores erhalten optionales `SetAudit(*audittrail.Recorder)`; ohne Aufruf bleibt der Store unaudited (Rückwärtskompatibilität, kein Bruch bestehender Tests).
|
||||
|
||||
## Akzeptanzkriterien
|
||||
|
||||
1. **Jede sicherheitsrelevante Connector-Aktion erzeugt einen Audit-Eintrag** — erfüllt: `PutWithActor` (Verbindung anlegen/Zugangsdaten ändern) und `CompleteRunAudited` (Sync ausgeführt) rufen `Recorder.Record`.
|
||||
2. **Audit-Eintrag enthält Person, Zeitpunkt und betroffenen Connector** — erfüllt: `actor`-Feld (Person/Dienst), `occurred_at`/Core-seitiger Zeitstempel, `target` = `connector_name/connector_instance_id`.
|
||||
3. **Fehlende Audit-Kopplung verhindert die Aktion nicht, wird aber protokolliert** — erfüllt: `Recorder.Record` gibt bei Core-Ausfall keinen Fehler zurück (puffert lokal, `slog.WarnContext`), der Fachvorgang (Schreiben der Zugangsdaten / Abschließen des Runs) läuft immer durch.
|
||||
|
||||
## Prüfungen vor der Abnahme
|
||||
|
||||
| # | Prüfung | Ergebnis |
|
||||
|---|---|---|
|
||||
| 1 | Verbindung anlegen erzeugt nachweisbaren Audit-Eintrag | **Bestanden.** `TestPutWithActor_ConnectionCreated_RecordsAuditEvent`: erster `PutWithActor` für einen Ref löst genau 1 Aufruf gegen den Test-Core mit `action=connect.connection.created`, korrektem `actor` und `target` aus. |
|
||||
| 2 | Zugangsdaten ändern erzeugt nachweisbaren Audit-Eintrag | **Bestanden.** `TestPutWithActor_CredentialChanged_RecordsAuditEvent`: zweiter `PutWithActor` für denselben Ref löst `action=connect.credential.changed` mit neuem Actor aus, unterscheidbar vom ersten Ereignis. Zusätzlich `TestCompleteRunAudited_RecordsAuditEvent` für den Sync-Fall (`connect.sync.executed`). |
|
||||
| 3 | Ausfall des Audit-Dienstes blockiert Connector-Betrieb nicht | **Bestanden.** `TestPutWithActor_AuditServiceDown_DoesNotBlockCredentialWrite` und `TestCompleteRunAudited_AuditServiceDown_DoesNotBlockRunCompletion`: bei simuliertem 503 vom Core liefert die jeweilige Aktion keinen Fehler, der Fachdatensatz (Secret bzw. Run-Status) ist danach korrekt gespeichert. Zusätzlich auf Paketebene `TestRecord_BuffersWithoutErrorWhenCoreUnreachable` und `TestReplay_DeliversAllBufferedEventsAfterOutageEnds` (vollständige, lückenlose Nachmeldung in Anlege-Reihenfolge). |
|
||||
|
||||
## Testlauf (real, Host 204)
|
||||
|
||||
```
|
||||
go vet ./... → keine Ausgabe (sauber)
|
||||
ok connect/internal/audittrail 0.151s
|
||||
ok connect/internal/credential 1.582s
|
||||
ok connect/internal/fieldmapping 0.947s
|
||||
ok connect/internal/httpclient 0.208s
|
||||
ok connect/internal/registry 0.003s
|
||||
ok connect/internal/syncjob 1.940s
|
||||
```
|
||||
|
||||
Alle Pakete `ok`, kein `FAIL`, kein `panic`. Keine Regressionen an bereits bestehenden Tests (Refresher/`Put`/`CompleteRun` unverändert und weiterhin grün).
|
||||
|
||||
## Nicht Bestandteil dieser Kachel
|
||||
|
||||
`QA-02` (Prüfgate Connector-Engine) — nicht umgesetzt, nur die audit-fähige Schnittstelle (`SetAudit`) vorbereitet.
|
||||
Reference in new issue
Block a user