Secrets gaan naar de servers die ze gebruiken, niet naar de pipeline ertussen
De agent crunu draait op je Linux-servers, houdt ontsleutelde omgevingen in het geheugen en start je programma’s ermee. CI krijgt een token voor de omgeving die het bouwt, gebonden aan één repository en branch. Waarden van production hoeven helemaal niet door CI te gaan.
Vragen die teams zoals het jouwe stellen
De vragen die opkomen als een team zoals het jouwe zijn secrets op één plek samenbrengt. De handleiding hieronder beantwoordt ze allemaal.
- Hoe krijgt een server zijn omgeving zonder bestand op schijf?
- Hoe houden we waarden van production buiten CI?
- Hoe koppelen we een CI-token aan één repository en branch?
- Wat gebeurt er met draaiende services als de kluis onbereikbaar is?
- Hoe snel werkt het intrekken van een machine?
- Kunnen we production alleen aan onze eigen netwerken leveren?
- Wie kan machines inschrijven zonder de waarden te zien?
- Hoe ziet een deployscript waarom crunu faalde?
De delen van Crunu die het dekken
Elk deel werkt volgens dezelfde regel: de server bewaart versleutelde data, publieke sleutels en ondertekende documenten, en heeft nooit een sleutel die je waarden opent.
Machines
Schrijf een server in met een eenmalige code, en de agent crunu houdt de omgevingen in het geheugen en start je programma’s ermee.
Lees meer
CI/CD
Geef elke pipeline een servicetoken dat beperkt is tot de eigen omgevingen, en bind het met OIDC aan je CI-provider, zodat een gelekt token niet op zichzelf kan inloggen.
Lees meer
Netwerkregels
Lever de inhoud van een omgeving alleen aan toegestane IPv4- en IPv6-netwerken, met ondertekende regels die niet stilletjes kunnen worden versoepeld.
Lees meer
Auditlog
Inlogpogingen, toekenningen, versies, rotaties en weigeringen komen in een log met hashketen die je met één klik verifieert en exporteert.
Lees meer
Toegangsbeheer
Geef elke persoon, machine en pipeline alleen de omgevingen die nodig zijn, met rollen die op versleutelingssleutels steunen en niet alleen op controles door de server.
Lees meer
Zo werkt het voor platformteams
Op deze pagina
Waar secrets lekken op weg naar een proces
Een waarde in een draaiend proces krijgen, is waar hij meestal ontsnapt: een .env die in een image is gebakken, een sleutel van production in de variabelen van CI, een deploygebruiker die alles kan lezen.
De taak is dat elke machine en pipeline precies de eigen omgevingen krijgt, dat er niets op schijf belandt tenzij je dat kiest, en dat intrekken één handeling is.
Vier stappen van een nieuwe server naar een draaiende service
- Maak de machine aan. Kies de omgevingen en hoe ze worden geleverd: een Environment key, die altijd de nieuwste versie van elk bestand geeft, of Selected files, een versleutelde kopie van alleen de bestanden die de machine nodig heeft. Selected files kun je intrekken zonder de omgevingssleutel te wijzigen.
- Installeer en schrijf in. Het venster Enroll machine toont één opdracht die de agent installeert, de SHA-256 ervan controleert en de machine inschrijft met een code voor eenmalig gebruik. De code is standaard 15 minuten geldig en hooguit 24 uur, en wordt gelezen uit stdin of een variabele, nooit uit een argument.
- Keur goed op vingerafdruk.
crunu enrolltoont de vingerafdruk van de machine. Keur de machine goed nadat je hebt gecontroleerd dat die overeenkomt met de vingerafdruk in de app. - Start je service via de agent. De servicegebruiker moet in de groep
crunuzitten. Met--restart on-changestart het programma opnieuw met de nieuwe waarden zodra die veranderen.
# /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/serverWat de agent en tokens voor je doen
| Behoefte | Wat Crunu doet |
|---|---|
| Geen secrets op schijf | De agentservice houdt ontsleutelde omgevingen alleen in het geheugen en geeft ze aan crunu run via een lokale socket die open is voor de groep crunu. Zie systemd. |
| Bestanden waar een tool ze verwacht | crunu pull schrijft bestanden met rechten 0600 in twee fasen, bewaart de vorige versie als .prev, volgt geen symlinks en weigert opstartbestanden van de shell, .ssh/ en systemd-mappen. --env-out schrijft één env-bestand voor EnvironmentFile=. |
| Een agent die je kunt doorlichten | Een statische Go-binary die alleen de standaardbibliotheek gebruikt. Op Linux is hij afgeschermd van andere processen van dezelfde gebruiker, staan core dumps uit, en draait de service in een systemd-sandbox. Updates controleren een Ed25519-handtekening. |
| Servers die een storing doorstaan | De agent controleert de server elke minuut en verlengt zijn lease elke 5 minuten. Is de server onbereikbaar, dan levert hij de laatst geverifieerde staat tot de lease afloopt, standaard na 24 uur. |
| CI zonder production | Servicetokens krijgen alleen de omgevingen die je toekent, met een lease, een gebruikslimiet en netwerken. Een CI-binding (OIDC) koppelt een token aan een repository, branch en deployment-omgeving in GitHub Actions, GitLab CI, Bitbucket Pipelines of bij elke OIDC-issuer. Een hergebruikt CI-token wordt geweigerd. |
| Production alleen vanaf bekende netwerken | Ondertekende netwerklijsten en netwerkbeleid per omgeving voor IPv4 en IPv6. Aanscherpen geldt meteen; versoepelen wacht 15 minuten met een waarschuwing en een mogelijkheid om het terug te draaien, of geldt meteen met een tweede handtekening. Machinepassen vangen adreswijzigingen op, standaard 24 uur. |
| Intrekken in één handeling | Een machine intrekken wist binnen enkele minuten de omgevingen uit het geheugen zolang de machine online is, en roteert de omgevingssleutels die ze had. Een hergebruikte inschrijfcode wijst op mogelijke onderschepping. |
| Signalen | Waarschuwingen bij inloggen vanaf nieuwe apparaten, hergebruikte inschrijfcodes, machines op nieuwe adressen, hergebruikte CI-tokens, verlopen leases en netwerkgebeurtenissen, verstuurd naar een webhook die met HMAC is ondertekend of per e-mail. Slack, Microsoft Teams en PagerDuty koppel je via hun inkomende webhooks. |
Fouten die je uit elkaar kunt houden
Als crunu geen variabelen kan doorgeven, zegt de exitcode waarom, zodat een deployscript kan reageren. Anders geeft crunu run de eigen exitcode van je programma terug.
| Code | Betekenis |
|---|---|
3 | De machine is niet ingeschreven, of er is niemand ingelogd |
4 | Toegang is ingetrokken of de lease is verlopen |
5 | Geen verbinding en geen geldige geverifieerde staat |
6 | Een controle van een handtekening of certificaat is mislukt |
7 | Dit adres is niet toegestaan door het netwerkbeleid van de omgeving |
Waar de agent ophoudt
- De service draait op Linux met systemd. Op macOS werkt
crunuals opdrachtregeltool, zonder achtergrondservice. Er is geen build voor Windows. - Geen Kubernetes-operator, Helm-chart of CSI-driver, geen Terraform-provider en geen SDK’s. Programma’s krijgen waarden via
crunu run. - Geen ingebouwde sync naar Vercel, Cloudflare, AWS Secrets Manager of GitHub Secrets. Je kunt waarden vanuit CI erin zetten met
crunu runen de eigen CLI van het platform. - Geen dynamische secrets. Crunu maakt geen kortlevende databasewachtwoorden aan; daarvoor zou een sleutel op de server nodig zijn.
- Een machine is een legitieme ontvanger. Root op die machine kan lezen wat ze heeft gekregen, en een draaiend proces houdt zijn variabelen tot het opnieuw start.
- Netwerkbeperkingen worden door de server afgedwongen, niet door versleuteling. Een overgenomen server zou ze niet naleven, en elke machine achter één NAT heeft hetzelfde adres.
Elke grens, met wat je eraan doet, staat op de pagina met beperkingen.
Als je ook de server draait
Teams die de server in eigen huis willen, kunnen hem draaien op Docker, Cloudflare Workers, Vercel of Google Cloud Run, en ertussen verhuizen met één archief zonder onversleutelde waarden. Een opdracht doctor controleert een deployment, en een statusendpoint toont metrics in Prometheus-formaat. De server is niet als publieke download gepubliceerd. Mail naar support@crunu.com. De pagina over zelf hosten vergelijkt de platforms.
Verwante documentatie en integraties
- De agent op een server installeren
- Machines en leases
- crunu run
- crunu pull
- Een machine inschrijven en de service draaien
- Omgevingsvariabelen en exitcodes
- Een servicetoken met OIDC aan CI binden
- Production beperken tot een kantoornetwerk
- Zelf hosten: overzicht en platforms
- systemd
- Docker
- GitHub Actions
- GitLab CI
- Bitbucket Pipelines
Veelgestelde vragen
Staat je vraag er niet bij? Mail naar support@crunu.com, dan antwoordt een mens.
Wat gebeurt er met draaiende services als Crunu onbereikbaar is?
Ze blijven werken. De agent levert de laatst geverifieerde staat tot de lease afloopt, standaard na 24 uur. Is er geen geldige staat, dan stopt crunu run met code 5.
Hoe snel werkt het intrekken van een machine?
Binnen enkele minuten zolang de machine online is: de agent controleert de server elke minuut en wist de omgevingen zodra de machine is ingetrokken. Een machine die offline blijft, verliest de toegang als de lease afloopt.
Kan CI naar production deployen zonder de secrets van production te zien?
Ja, en dat is de opzet die Crunu aanraadt. De productieserver draait de agent en haalt zijn eigen omgeving op; de pipeline levert de code en herstart de service.
Werkt crunu in containers?
Het installatiescript heeft een modus zonder root voor CI en containers, getest in images van node:24, Ubuntu 24.04 en Alpine 3.22. Met een servicetoken logt crunu in en ontsleutelt in het eigen proces, zonder statusbestanden.
Kan iemand machines inschrijven zonder waarden te zien?
Ja. De rol Operator op een omgeving heeft geen sleutel: wie die rol heeft, voegt machines toe en vraagt er toegang voor aan, en een eigenaar of admin keurt goed.
Ondersteunen jullie Kubernetes?
Nee. Er is geen operator, Helm-chart of CSI-driver.