Infisical Agent (Secrets-Management)¶
Host-nativer Background-Daemon auf dem NUC, der Secrets aus Infisical als env_file-Dateien nach /run/infisical/ rendert. Loest das fruehere infisical run ---Wrapper-Pattern ab: Compose-Stacks starten wieder mit plain docker compose up -d und beziehen Secrets ueber env_file.
Zugriff¶
| Wo laeuft's | NUC (10.10.10.3) als systemd-Service infisical-agent.service |
| Konfig | /etc/infisical/agent.yaml (lokal, nicht im Repo) |
| Output | /run/infisical/<stack>.env (tmpfs, root:robin 0640) |
| Logs | sudo journalctl -u infisical-agent.service |
| Traefik | Nein (interner Host-Dienst, kein Container) |
Architektur¶
Infisical Cloud (EU) ◄── HTTPS-Poll (60s) ── infisical-agent.service (systemd)
│
▼
/run/infisical/<stack>.env (tmpfs, root:robin 0640)
│
▼
Docker-Compose-Stacks (env_file: …)
Der Agent authentifiziert sich per Universal Auth (Machine Identity) gegen die EU-Instanz und pollt alle 60 s. Jeder konfigurierte Stack erhaelt ein eigenes gerendertes .env-File im tmpfs.
Angebundene Stacks¶
Pro Stack ein Template-Block in agent.yaml (Infisical-Pfad → Ziel-File):
| Infisical-Pfad | Ziel-File |
|---|---|
/ollama |
/run/infisical/ollama.env |
/speedtest-tracker |
/run/infisical/speedtest-tracker.env |
/paperless-ngx |
/run/infisical/paperless-ngx.env |
Konfigurationsbesonderheiten¶
- Universal Auth: Machine Identity mit Client-ID/-Secret unter
/etc/infisical/client-{id,secret}(root:root0600). - Daten-Region:
address: https://eu.infisical.com(EU-Instanz). US waerehttps://app.infisical.com. Falsche Region → Login401 Invalid credentialstrotz korrekter Credentials. - Polling-Interval: 60 s pro Template. Rotierte Secrets landen in max. 1 min im File; der Container behaelt das alte Secret bis zu einem
--force-recreate. - Boot-Order:
Before=docker.service— der Agent startet vor Docker, damit dieenv_files beim Container-Start vorhanden sind. - Hardening: systemd-Sandbox mit
NoNewPrivileges,ProtectSystem=strict,ProtectHome=true,UMask=0027.RuntimeDirectory=infisicallegt/run/infisicalals0750 root:robinan (trotzProtectSystem=strictbeschreibbar).
Anbindung in Compose-Stacks¶
services:
<service>:
image: <pinned>
env_file:
- /run/infisical/<stack>.env
environment:
# Nicht-geheime Werte bleiben inline
- TZ=Europe/Berlin
Kein infisical run ---Wrapper mehr — plain docker compose up -d.
Wichtige Pfade¶
| Pfad | Zweck |
|---|---|
/etc/infisical/agent.yaml |
Agent-Config (root:root 0640) |
/etc/infisical/client-id |
Universal-Auth Client-ID (root:root 0600) |
/etc/infisical/client-secret |
Universal-Auth Client-Secret (root:root 0600) |
/run/infisical/access-token |
Auth-Token-Sink (tmpfs) |
/run/infisical/<stack>.env |
Gerenderte Secrets pro Stack (tmpfs, root:robin 0640) |
/etc/systemd/system/infisical-agent.service |
systemd-Unit |
Wartung¶
Neuen Stack anbinden
- Secrets in der Infisical-UI unter
/<stack>anlegen - Template-Block in
/etc/infisical/agent.yamlergaenzen sudo systemctl reload infisical-agent.service- Pruefen:
sudo cat /run/infisical/<stack>.env - Im Compose:
env_file: - /run/infisical/<stack>.env
Secret rotieren
- Secret in der Infisical-UI aendern
- Agent rendert das File innerhalb von max. 60 s neu
- Container neu erzeugen:
docker compose -f <stack>/docker-compose.yaml up -d --force-recreate
Troubleshooting¶
| Symptom | Ursache | Fix |
|---|---|---|
Status failed, "unable to authenticate" |
Client-ID/-Secret falsch oder falsche Region | /etc/infisical/client-{id,secret} und address (EU/US) pruefen |
.env leer/fehlt |
Template-Block falsch oder Permissions | journalctl -u infisical-agent |
Container: ENOENT /run/infisical/x.env |
Agent laeuft nicht oder Template fehlt | systemctl status infisical-agent.service, agent.yaml pruefen |
| Rotation propagiert nicht | polling-interval zu gross oder Agent crashed |
Logs pruefen |
Vollstaendige Bootstrap-Anleitung (Machine Identity anlegen, Credentials ablegen, Unit deployen) im Quell-Repo: infrastructure/infisical-agent/README.md.