Secrets erreichen die Server, auf denen sie laufen, nicht die Pipeline dazwischen
Der Agent crunu läuft auf Ihren Linux-Servern, hält entschlüsselte Umgebungen im Arbeitsspeicher und startet Ihre Programme damit. CI bekommt ein Token für die Umgebung, die sie baut, gebunden an ein Repository und einen Branch. Werte für production müssen überhaupt nicht durch CI laufen.
Was Teams wie Ihres fragen
Die Fragen, die aufkommen, wenn ein Team wie Ihres seine Secrets an einen Ort bringt. Der Leitfaden unten beantwortet jede davon.
- Wie bekommt ein Server seine Umgebung ohne Datei auf der Festplatte?
- Wie halten wir Werte für production aus CI heraus?
- Wie binden wir ein CI-Token an ein Repository und einen Branch?
- Was passiert mit laufenden Diensten, wenn der Tresor nicht erreichbar ist?
- Wie schnell wirkt das Widerrufen einer Maschine?
- Können wir production nur an unsere eigenen Netzwerke ausliefern?
- Wer kann Maschinen registrieren, ohne die Werte zu sehen?
- Wie erkennt ein Deploy-Skript, warum crunu fehlgeschlagen ist?
Die Teile von Crunu, die das abdecken
Jeder Teil folgt derselben Regel: Der Server bewahrt Chiffretext, öffentliche Schlüssel und signierte Dokumente auf und hat nie einen Schlüssel, der Ihre Werte öffnet.
Maschinen
Registrieren Sie einen Server mit einem Einmalcode. Der Agent crunu hält seine Umgebungen im Arbeitsspeicher und startet Ihre Programme damit.
Mehr erfahren
CI/CD
Geben Sie jeder Pipeline ein Service-Token, das auf ihre Umgebungen beschränkt ist, und binden Sie es per OIDC an Ihren CI-Anbieter, damit sich ein geleaktes Token nicht allein anmelden kann.
Mehr erfahren
Netzwerkregeln
Liefern Sie den Inhalt einer Umgebung nur an erlaubte IPv4- und IPv6-Netze aus, mit signierten Regeln, die sich nicht unbemerkt lockern lassen.
Mehr erfahren
Audit-Log
Anmeldungen, Freigaben, Versionen, Rotationen und Ablehnungen landen in einem Log als Hash-Kette, das Sie mit einem Klick prüfen und exportieren können.
Mehr erfahren
Zugriffskontrolle
Geben Sie jeder Person, Maschine und Pipeline nur die Umgebungen, die sie braucht, mit Rollen, hinter denen Schlüssel stehen und nicht nur Prüfungen auf dem Server.
Mehr erfahren
So funktioniert es für plattform-teams
Auf dieser Seite
Wo Secrets auf dem Weg zum Prozess entweichen
Einen Wert in einen laufenden Prozess zu bringen, ist die Stelle, an der er meist entweicht: eine .env, die in ein Image eingebacken ist, ein Schlüssel für production in den Variablen der CI, ein Deploy-Benutzer, der alles lesen kann.
Die Aufgabe: Jede Maschine und jede Pipeline bekommt genau ihre Umgebungen, nichts landet auf der Festplatte, wenn Sie es nicht wollen, und Widerrufen ist ein einziger Schritt.
Vier Schritte vom neuen Server zum laufenden Dienst
- Legen Sie die Maschine an. Wählen Sie ihre Umgebungen und wie sie ausgeliefert werden: per Environment key, der immer die neueste Version jeder Datei liefert, oder per Selected files, einer versiegelten Kopie nur der Dateien, die die Maschine braucht. Selected files lassen sich widerrufen, ohne den Umgebungsschlüssel zu ändern.
- Installieren und registrieren. Der Dialog „Enroll machine“ zeigt einen Befehl, der den Agenten installiert, seine SHA-256-Prüfsumme kontrolliert und die Maschine mit einem Einmalcode registriert. Der Code gilt standardmäßig 15 Minuten und höchstens 24 Stunden und wird aus stdin oder einer Variablen gelesen, nie aus einem Argument.
- Per Fingerabdruck freigeben.
crunu enrollgibt den Fingerabdruck der Maschine aus. Geben Sie die Maschine frei, nachdem Sie geprüft haben, dass er mit dem in der App übereinstimmt. - Starten Sie Ihren Dienst über den Agenten. Der Dienstbenutzer muss in der Gruppe
crunusein. Mit--restart on-changestartet das Programm nach einer Änderung mit den neuen Werten neu.
# /etc/systemd/system/payments-api.service
[Service]
User=payments
ExecStart=/usr/local/bin/crunu run --env payments-api/production --restart on-change -- /opt/payments-api/bin/serverWas Agent und Tokens für Sie tun
| Bedarf | Was Crunu tut |
|---|---|
| Keine Secrets auf der Festplatte | Der Dienst des Agenten hält entschlüsselte Umgebungen nur im Arbeitsspeicher und übergibt sie über einen lokalen Socket, offen für die Gruppe crunu, an crunu run. Siehe systemd. |
| Dateien dort, wo ein Werkzeug sie erwartet | crunu pull schreibt Dateien mit den Rechten 0600 in zwei Phasen, behält die vorherige Version als .prev, folgt keinen Symlinks und verweigert Startdateien der Shell, .ssh/ und systemd-Verzeichnisse. --env-out schreibt eine env-Datei für EnvironmentFile=. |
| Ein Agent, den Sie prüfen können | Ein statisches Go-Binary, das nur die Standardbibliothek nutzt. Unter Linux ist es vor anderen Prozessen desselben Benutzers abgeschirmt, Core-Dumps sind aus, und der Dienst läuft in einer systemd-Sandbox. Updates prüfen eine Ed25519-Signatur. |
| Server, die einen Ausfall überstehen | Der Agent fragt den Server jede Minute ab und erneuert seine Lease alle 5 Minuten. Ist der Server nicht erreichbar, liefert er den letzten geprüften Stand aus, bis die Lease endet, standardmäßig nach 24 Stunden. |
| CI ohne production | Service-Tokens bekommen nur die Umgebungen, die Sie freigeben, mit Lease, Nutzungslimit und Netzwerken. Eine CI-Bindung (OIDC) knüpft ein Token an Repository, Branch und Deployment-Umgebung in GitHub Actions, GitLab CI, Bitbucket Pipelines oder bei jedem OIDC-Aussteller. Ein wiederverwendetes CI-Token wird abgelehnt. |
| production nur aus bekannten Netzwerken | Signierte Netzwerklisten und Netzwerkrichtlinien der Umgebung für IPv4 und IPv6. Eine Verschärfung greift sofort; eine Lockerung wartet 15 Minuten, mit Warnung und Möglichkeit zum Rückgängigmachen, oder greift mit einer zweiten Signatur sofort. Maschinenpässe überbrücken Adresswechsel, standardmäßig 24 Stunden. |
| Widerrufen in einem Schritt | Das Widerrufen einer Maschine löscht ihre Umgebungen innerhalb von Minuten aus dem Arbeitsspeicher, solange die Maschine online ist, und rotiert die Umgebungsschlüssel, die sie hatte. Ein erneut verwendeter Registrierungscode weist auf ein mögliches Abfangen hin. |
| Signale | Warnungen bei Anmeldungen von neuen Geräten, erneut verwendeten Registrierungscodes, Maschinen unter neuen Adressen, wiederverwendeten CI-Tokens, abgelaufenen Leases und Netzwerkereignissen, gesendet an einen per HMAC signierten Webhook oder per E-Mail. Slack, Microsoft Teams und PagerDuty werden über ihre eingehenden Webhooks angebunden. |
Fehler, die Sie unterscheiden können
Wenn crunu keine Variablen übergeben kann, sagt der Exit-Code, warum, damit ein Deploy-Skript reagieren kann. Andernfalls gibt crunu run den Exit-Code Ihres Programms zurück.
| Code | Bedeutung |
|---|---|
3 | Die Maschine ist nicht registriert, oder niemand ist angemeldet |
4 | Der Zugriff wurde widerrufen, oder die Lease ist abgelaufen |
5 | Keine Verbindung und kein gültiger geprüfter Stand |
6 | Eine Prüfung von Signatur oder Zertifikat ist fehlgeschlagen |
7 | Die Netzwerkrichtlinie der Umgebung lässt diese Adresse nicht zu |
Wo der Agent aufhört
- Der Dienst läuft unter Linux mit systemd. Unter macOS funktioniert
crunuals Kommandozeilenwerkzeug, ohne Hintergrunddienst. Einen Build für Windows gibt es nicht. - Kein Kubernetes-Operator, kein Helm-Chart und kein CSI-Treiber, kein Terraform-Provider und keine SDKs. Programme erhalten Werte über
crunu run. - Keine eingebaute Synchronisierung mit Vercel, Cloudflare, AWS Secrets Manager oder GitHub Secrets. Sie können Werte aus CI mit
crunu runund der eigenen CLI der Plattform übertragen. - Keine dynamischen Secrets. Crunu erzeugt keine kurzlebigen Datenbankpasswörter; dafür bräuchte es einen Schlüssel auf dem Server.
- Eine Maschine ist eine legitime Empfängerin. Root auf ihr kann lesen, was sie erhalten hat, und ein laufender Prozess behält seine Variablen bis zum Neustart.
- Netzwerkbeschränkungen setzt der Server durch, nicht die Verschlüsselung. Ein kompromittierter Server würde sie nicht beachten, und alle Maschinen hinter demselben NAT haben dieselbe Adresse.
Jede Grenze und was Sie dagegen tun können, steht auf der Seite zu den Grenzen.
Wenn Sie auch den Server betreiben
Teams, die den Server im eigenen Haus wollen, können ihn auf Docker, Cloudflare Workers, Vercel oder Google Cloud Run betreiben und mit einem Archiv ohne Klartextwerte zwischen ihnen umziehen. Der Befehl doctor prüft ein Deployment, und ein Status-Endpunkt stellt Metriken im Prometheus-Format bereit. Der Server wird nicht als öffentlicher Download angeboten. Schreiben Sie an support@crunu.com. Die Seite zum Self-Hosting vergleicht die Plattformen.
Verwandte Dokumentation und Integrationen
- Den Agenten auf einem Server installieren
- Maschinen und Leases
- crunu run
- crunu pull
- Eine Maschine registrieren und den Dienst betreiben
- Umgebungsvariablen und Exit-Codes
- Ein Service-Token per OIDC an CI binden
- production auf ein Büronetz beschränken
- Self-Hosting: Überblick und Plattformen
- systemd
- Docker
- GitHub Actions
- GitLab CI
- Bitbucket Pipelines
Fragen aus der Praxis
Nicht dabei? Schreiben Sie an support@crunu.com, und ein Mensch antwortet.
Was passiert mit laufenden Diensten, wenn Crunu nicht erreichbar ist?
Sie laufen weiter. Der Agent liefert den letzten geprüften Stand aus, bis seine Lease endet, standardmäßig nach 24 Stunden. Gibt es keinen gültigen Stand, endet crunu run mit Code 5.
Wie schnell wirkt das Widerrufen einer Maschine?
Innerhalb von Minuten, solange die Maschine online ist: Der Agent fragt den Server jede Minute ab und löscht seine Umgebungen, sobald er widerrufen ist. Eine Maschine, die offline bleibt, verliert den Zugriff, wenn ihre Lease endet.
Kann CI auf production deployen, ohne die Secrets von production zu sehen?
Ja, und Crunu empfiehlt genau diese Einrichtung. Der Produktionsserver führt den Agenten aus und holt seine Umgebung selbst; die Pipeline liefert den Code und startet den Dienst neu.
Funktioniert crunu in Containern?
Das Installationsskript hat einen Modus ohne Root für CI und Container, getestet in den Images node:24, Ubuntu 24.04 und Alpine 3.22. Mit einem Service-Token meldet sich crunu an und entschlüsselt innerhalb seines eigenen Prozesses, ohne Zustandsdateien.
Kann jemand Maschinen registrieren, ohne Werte zu sehen?
Ja. Die Rolle Operator für eine Umgebung hat keinen Schlüssel: Sie fügt Maschinen hinzu und fragt Zugriff für sie an, und ein Owner oder Admin gibt frei.
Unterstützen Sie Kubernetes?
Nein. Es gibt keinen Operator, kein Helm-Chart und keinen CSI-Treiber.