Skip to content

[roadmap] Add evidence object storage client#46

Draft
ewilhelm1979-netizen wants to merge 1 commit into
mainfrom
feature/evidence-object-storage-client
Draft

[roadmap] Add evidence object storage client#46
ewilhelm1979-netizen wants to merge 1 commit into
mainfrom
feature/evidence-object-storage-client

Conversation

@ewilhelm1979-netizen

Copy link
Copy Markdown
Owner

Problemstellung und Ziel

Evidence-Artefakte sollen perspektivisch produktionsnah an S3-kompatible Object-Storage-Backends angebunden werden, ohne die bestehenden ISCY-Sicherheitsgrenzen aufzuweichen. Dieser PR ergänzt deshalb den sicheren Backend-, Konfigurations-, Metadaten-, Audit- und Drill-Unterbau für Evidence Object Storage.

Der PR implementiert bewusst keine Live-S3-Datenoperationen mit echten Credentials. Stattdessen werden Secret-Referenzen, Endpoint-/Bucket-/Key-Validierung, tenantgebundene Objekt-Referenzen, Mock-/Contract-Drills und Management-Review-Signale eingeführt. Damit ist der fachliche Pfad vorbereitet, ohne Secrets, vollständige Objekt-Keys oder Objektinhalte zu persistieren.

Geänderte Funktionen

  • Neuer Evidence-Object-Storage-Domainlayer mit Backend-Typen, Statuswerten, Secret-Reference-Validierung, Endpoint-SSRF-Schutz, Bucket-/Prefix-/Object-Key-Prüfung und Mock-Contract-Client.
  • Tenantgebundene Konfiguration von s3_compatible, local_filesystem und disabled Storage-Backends.
  • Safe-Metadata-Verwaltung für Secret-Referenzen, Object-Key-Hashes und redacted Object-Key-Anzeigen.
  • Object-Reference-Attach und Object-Drill/Verify-Pfade für Evidence-Artefakte.
  • Audit-Events für Backend-Konfiguration, Validierung, Object-Linking und Drill-Ergebnisse.
  • Evidence-Integrity-Status wird aus validierten Object-Drill-Ergebnissen aktualisiert.
  • Management-Review-Snapshots enthalten neue Object-Storage-Kennzahlen und Gaps.
  • Web-UI zeigt konfigurierte Backends als Betriebs-/Integritätsmetadaten an.

Betroffene Dateien

  • rust/iscy-backend/src/evidence_object_storage.rs
  • rust/iscy-backend/src/evidence_store.rs
  • rust/iscy-backend/src/lib.rs
  • rust/iscy-backend/src/db_admin.rs
  • rust/iscy-backend/src/report_store.rs
  • rust/iscy-backend/tests/http_tests.rs
  • CHANGELOG.md
  • docs/ISCY_Handbuch.md
  • docs/ISCY_Handbuch.pdf
  • docs/ISCY_STRATEGIC_ROADMAP.md
  • docs/GUI_SCREENSHOTS.md

Datenbankmigrationen

Neue Migration:

  • 0038_rust_evidence_object_storage_client

Neue Tabellen:

  • evidence_storage_backend_config
  • evidence_storage_secret_reference_status
  • evidence_object_reference
  • evidence_storage_backend_event

Die Migration ist additiv und enthält tenantgebundene Unique Keys, Indizes und Foreign Keys zwischen Backend-Konfiguration, Secret-Status und Object-References. Bestehende Evidence-Daten werden nicht verändert oder gelöscht.

Neue oder geänderte API-Endpunkte

Geändert:

  • GET /api/v1/evidence/storage/backends ergänzt tenantgebundene konfigurierte Backends.

Neu:

  • POST /api/v1/evidence/storage/backends
  • PATCH /api/v1/evidence/storage/backends/{backend_id}
  • POST /api/v1/evidence/storage/backends/{backend_id}/validate
  • GET /api/v1/evidence/storage/backends/{backend_id}/events
  • GET /api/v1/evidence/{evidence_id}/storage/object-reference
  • POST /api/v1/evidence/{evidence_id}/storage/object-reference
  • POST /api/v1/evidence/{evidence_id}/storage/attach-object
  • POST /api/v1/evidence/{evidence_id}/storage/verify-object
  • POST /api/v1/evidence/{evidence_id}/storage/object-drill

GUI-Änderungen

  • Evidence-Integrity-Ansicht zeigt konfigurierte Storage-Backends mit Backend-ID, Typ, Status, Endpoint-Policy, Bucket, Prefix und Validierungsstatus.
  • UI-Hinweise bleiben bewusst metadata-only: keine Secret-Werte, keine vollständigen Object-Keys, keine Objektinhalte.

Tenant- und Berechtigungsgrenzen

  • Alle Reads/Writes laufen über den bestehenden Tenant-Kontext.
  • Backend-Konfiguration, Object-References, Drills und Events sind in den DB-Queries tenant-scoped.
  • Schreibende Endpunkte verwenden bestehende Write-Rollenprüfungen.
  • Read-only Rollen können sichere Metadaten lesen, aber keine Backends konfigurieren oder Object-References schreiben.
  • Foreign-Tenant-Evidence und manipulierte Tenant-/Evidence-IDs werden blockiert.

Security-Entscheidungen

  • Keine neue Runtime-Dependency und keine Änderungen an Cargo.toml/Cargo.lock.
  • Keine echten Secret-Werte in DB, Logs, API-Antworten oder Events.
  • Secret-Felder akzeptieren nur Referenzen wie env:, file:, vault:, secret: oder external:.
  • Endpoint-Validierung blockiert Credentials in URLs, unsichere Schemes, bekannte Metadata-Service-Hosts, Loopback, Link-local, private IP-Ranges, CGNAT und .local in Production-Policy.
  • Object-Keys werden nicht vollständig persistiert; gespeichert werden redacted Anzeige und SHA-256.
  • Object-Keys müssen Prefix und tenants/{tenant_id}/evidence/{evidence_id}/ erfüllen.
  • Keine Objekt-Löschoperationen, keine Bucket-Deletes, keine unkontrollierten Remote-Deletes.
  • Live-S3-Operationen bleiben bewusst nicht implementiert; der PR liefert sichere Abstraktion, Validierung und Contract-Drills.

Ausgeführte Tests

Lokal erfolgreich:

  • cargo fmt --manifest-path rust/iscy-backend/Cargo.toml -- --check
  • cargo clippy --locked --manifest-path rust/iscy-backend/Cargo.toml --all-targets -- -D warnings
  • cargo test --locked --manifest-path rust/iscy-backend/Cargo.toml
  • cargo audit --file rust/iscy-backend/Cargo.lock --ignore RUSTSEC-2023-0071
  • cargo deny --manifest-path rust/iscy-backend/Cargo.toml check advisories licenses sources
  • make rust-smoke
  • make rust-restore-smoke
  • SQLite migration/restartability test for 0038
  • PostgreSQL empty migration test for 0038 with local throwaway DB
  • PostgreSQL restart/upgrade-style test preserving Object-Storage metadata and re-running 0038
  • Object-storage unit tests for endpoint SSRF protection, secret references, object-key tenant/prefix/traversal rules and mock contract results
  • HTTP integration test for tenant scoping, write-role enforcement, redacted metadata, object attach, drill and safe events
  • make docs-pdf

Additional local checks performed earlier in the same branch validation:

  • Nix smoke succeeded with local SQLite throwaway database.
  • Docker Compose config validation succeeded using a temporary empty env file and dummy non-secret variables.

Local Docker image build was not completed because the local Docker daemon/socket was unavailable in this environment. CI should provide the authoritative hardened Docker build result.

Bekannte Einschränkungen

  • No live S3 SDK/client is wired in this PR.
  • No object byte upload/download/list/delete operation is performed.
  • Drill results use the safe metadata/contract path, not a real remote HEAD/GET call.
  • Secret presence is represented as references/status metadata only; secret values are not resolved by this PR.
  • Endpoint DNS revalidation is marked where required but no network probing is introduced.

Bewusst nicht umgesetzt

  • No PR B / Zero-Trust-Agent work.
  • No Dependency, Dependabot, Docker base image, Nix platform or toolchain upgrades.
  • No CI, CodeQL, cargo-audit or cargo-deny weakening.
  • No Evidence engine rewrite, no Risk/Control/Notification engine rewrite, no PKI/release work.
  • No production cloud credentials, no real bucket integration and no remote delete semantics.

Notes for reviewers

This PR should remain a Draft until GitHub CI, CodeQL Default Setup and the hardened Docker build have completed successfully and a human review confirms that the metadata-only Object-Storage boundary is the desired first production step.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant