Add recoverable encrypted integration keys and web management

This commit is contained in:
Nico committed 2026-10-23 08:46:24 +02:00
1 parent ca4ab48fdc
commit cbf112b0f8
14 files changed
+285 -5

No files matched your search

+45
View File
@@ -0,0 +1,45 @@
# Integrationsschlüssel
Angemeldete Webnutzer finden unter **API-Schlüssel** eine eigene Verwaltungsseite.
Programmname und mindestens ein Projekt auswählen, dann den Schlüssel erstellen.
**Anzeigen** ruft ihn bei Bedarf erneut ab; **Verbergen** entfernt ihn aus dem
Eingabefeld. **Kopieren** verwendet die Zwischenablage (HTTPS oder localhost).
**Widerrufen** sperrt ihn sofort für nachfolgende API-Anfragen. Bereits laufende
Anfragen werden dadurch nicht abgebrochen. Ein widerrufener Schlüssel wird nicht
mehr angezeigt; für einen Ersatz einen neuen Schlüssel erstellen.
Alle angemeldeten menschlichen Nutzer haben dieselben Verwaltungsrechte.
Maschinenzugänge können weder Schlüssel verwalten noch andere Schlüssel anzeigen.
Webmutationen einschließlich Anzeigen benötigen die vorhandene CSRF-Absicherung.
Das aufrufende Programm sendet `Authorization: Bearer <Schlüssel>` an die
Übergabe-API. Neue Schlüssel erlauben Auftragsübergabe einschließlich Rückgaben
und lesenden Zugriff auf die ausgewählten Projekte. Sie erlauben keine
Betriebssteuerung oder Beantwortung menschlicher Testanfragen. Zugriff auf weitere
Projekte erfordert einen neuen Schlüssel. Bestehende env-basierte Integrationen
bleiben unverändert nutzbar und erscheinen nicht in der SQLite-Schlüsselliste.
## Speicherung und Sicherung
- SQLite unter `<workspace>/runtime/integrations/keys.sqlite3` speichert Metadaten,
SHA-256-Prüfwerte und mit Fernet authentifiziert verschlüsselte Schlüssel.
- Der separate Serverschlüssel entsteht beim ersten Erstellen automatisch unter
`<workspace>/runtime/integration-secrets/master.key`, Dateimodus 0600.
Nutzerkonten und ihre root-verwaltete SQLite-Datei werden nicht verändert.
- Mit `VIANO_INTEGRATION_KEY_FILE` kann die API stattdessen eine separate
Schlüsseldatei verwenden. Vorhandene Dateien müssen einen gültigen Fernet-Key
enthalten und für den API-Dienst lesbar sein; fehlt die Datei beim ersten
Erstellen, muss der Dienst sie im gewählten Verzeichnis anlegen dürfen.
- SQLite und Serverschlüssel getrennt geschützt sichern. Das Laufzeitverzeichnis
enthält damit dauerhaft notwendige Integrationsdaten und darf bei einer
Bereinigung von Sessions nicht pauschal gelöscht werden. Unter Windows passende
Dateisystem-ACLs verwenden; POSIX-Modusbits ersetzen dort keine ACLs.
- Geht der Serverschlüssel verloren oder wird er unpassend ausgetauscht, können
Schlüssel nicht mehr angezeigt werden. Das System ersetzt ihn bei bestehenden
Einträgen nicht stillschweigend. Vorhandene Schlüssel können anhand ihrer
Prüfwerte weiterhin authentifiziert und über die Weboberfläche widerrufen werden.
Zur Wiederherstellung die richtige Schlüsseldatei aus der Sicherung zurückspielen.
Nach einem Update die API-Abhängigkeiten neu installieren (`.[api]` umfasst jetzt
`cryptography`) und den API-Dienst neu starten. Eine Datenbankmigration per Hand
ist nicht nötig. Keine Änderung oder Neueingabe des Gemini-Schlüssels erforderlich.
+4
View File
@@ -26,6 +26,10 @@ API und Worker erhalten unterschiedliche Dateien: Nur der Worker erhält Cloud-
und DB-Zugangsdaten. Die Diensthärtung und EnvironmentFile-Nutzung folgen der
[systemd-Dokumentation](https://www.freedesktop.org/software/systemd/man/latest/systemd.exec.html).
Die [Webverwaltung für Integrationsschlüssel](integration-keys.md) ergänzt die
env-basierte Maschinenanmeldung. Ihre SQLite und separate Schlüsseldatei müssen
ebenfalls gesichert werden; beide liegen standardmäßig unter der Fallablage.
## Installation
Den vertrauenswürdigen BugAnalysis-Checkout als root unter
@@ -0,0 +1,33 @@
# Webverwaltung für Integrationsschlüssel – 2026-10-23
Ergebnis: eigene Webseite mit Programmname, Projektauswahl, Erstellen,
erneutem Anzeigen, Verbergen, Kopieren und Widerrufen. API-Schlüssel werden
authentifiziert verschlüsselt in separater SQLite gespeichert; die separate
Serverschlüsseldatei wird beim ersten Erstellen angelegt. Bestehende env-Zugänge
bleiben nutzbar. Menschliche Nutzerverwaltung unverändert ausschließlich per CLI.
Lokale Prüfung ohne LLM-Aufrufe:
```text
python -m pytest tests/test_integration_keys.py tests/test_web_auth.py tests/test_deployment.py tests/test_human_web.py tests/test_dashboard.py tests/profiles/vcore/test_intake_api.py -q
43 passed, 1 dependency deprecation warning
node tests/dashboard-smoke.mjs
PASS, console_errors: []
```
Abgedeckt: Session-/CSRF-Pflicht, keine Maschinenverwaltung von Schlüsseln,
Projektbeschränkung, kein Operatorzugriff, kein Klartext in SQLite oder Listen,
Wiederabruf nach neuer Store-Instanz, sofortiger Widerruf auch für bereits laufende
API-Prozesse, fehlende Masterdatei ohne stille Neuerzeugung, bestehende Web-/API-
Regressionen. Echter Headless-Edge-Test für Erstellen/Anzeigen/Verbergen/Widerrufen
und Löschen sichtbarer Schlüsseldaten beim Logout. Kopieren nutzt die native
Clipboard-API; deren Interaktion wurde nicht automatisiert geprüft.
Die Entwicklungsversion der neuen API-Abhängigkeit cryptography wurde lokal
installiert. Keine realen Schlüssel erzeugt oder ausgegeben; Browser nutzt
temporäre isolierte Testdaten, die nach dem Test entfernt werden.
Vor Testbeginn Trials 16.939.129.428 Bytes, Fehlerkorpus 2.471.041 Bytes;
kleine synthetische Testdaten bleiben innerhalb des 20-GB-Budgets.
Keine kostenpflichtigen Modellaufrufe, keine neuen Token-/Cache-/Kostenwerte.
Kein Deployment und kein Push. Anleitung: `docs/integration-keys.md`.