Zum Inhalt springen

Integrationen & Token

Ein Integrations-Token ist ein Zugang für Maschinen, nicht für Menschen: Ein Skript oder Cron-Job holt damit Daten aus Resilic, ohne dass sich jemand anmeldet. Der erste Anwendungsfall ist die security.txt, die alle sechs Monate erneuert werden muss: Ein nächtlicher Job holt die frisch signierte Datei und legt sie auf Ihrem Webserver ab – die Erneuerung entfällt.

Sie finden die Seite unter Einstellungen → Integrationen. Nur Inhaberinnen/Inhaber und Administratorinnen/Administratoren sehen sie.

Token sind nur lesend und tragen einen ausdrücklichen Geltungsbereich:

Geltungsbereich Was das Skript abrufen kann
security-txt:read die signierte security.txt für Ihre Unternehmensdomain
provider-bundle:read das CSAF-Provider-Bundle als ZIP (Provider-Metadaten, Schlüssel, Advisories)

Ein Token kann nichts ändern, nichts veröffentlichen und keine Mitglieder verwalten. Schreibende Geltungsbereiche gibt es bewusst nicht.

  1. Vergeben Sie einen Namen, der sagt, wo der Token verwendet wird (z. B. „security.txt-Erneuerung auf www-01”). Er erscheint später in der Liste und im Audit-Protokoll.
  2. Wählen Sie den Geltungsbereich und ein Ablaufdatum (90 Tage, ein Jahr oder nie). Ein Ablauf ist die sichere Wahl: Ein vergessener Token läuft von selbst aus.
  3. Klicken Sie auf Token erzeugen. Der Token wird genau einmal angezeigt – kopieren Sie ihn direkt in Ihr Skript oder Ihren Secret-Store. Resilic speichert nur einen Hash; verloren heißt neu erzeugen.

Der Token beginnt mit rsl_ und wird als Bearer-Token gesendet:

Authorization: Bearer rsl_…

Auf einem eigenen Linux-Webserver (nginx, Apache, Caddy) genügt ein täglicher Cron-Job. Das Beispiel ist vollständig und so gebaut, dass ein Fehler nie eine kaputte Datei ausliefert.

1. Token sicher ablegen – nur für root lesbar, nie im Skript selbst und nie im Repository:

Terminal-Fenster
sudo install -m 600 /dev/null /etc/resilic/token
sudo sh -c 'echo "rsl_…" > /etc/resilic/token'

2. Skript anlegen unter /usr/local/bin/resilic-security-txt:

#!/bin/sh
# Holt die signierte security.txt von Resilic und tauscht sie atomar ein.
set -eu
TOKEN="$(cat /etc/resilic/token)"
TARGET="/var/www/html/.well-known/security.txt" # an Ihren Webroot anpassen
TMP="$(mktemp "${TARGET}.XXXXXX")"
trap 'rm -f "$TMP"' EXIT
curl -sSf --max-time 30 --retry 3 --retry-delay 10 \
-H "Authorization: Bearer $TOKEN" \
https://api.resilic.ai/api/integrations/v1/security-txt \
-o "$TMP"
# Nur einsetzen, was wie die signierte Datei aussieht – nie eine leere oder halbe Antwort.
grep -q '^-----BEGIN PGP SIGNED MESSAGE-----' "$TMP"
grep -q '^Expires: ' "$TMP"
chmod 644 "$TMP"
mv -f "$TMP" "$TARGET"
Terminal-Fenster
sudo chmod 755 /usr/local/bin/resilic-security-txt
sudo /usr/local/bin/resilic-security-txt # einmal von Hand prüfen
curl -s https://ihre-domain.example/.well-known/security.txt | head -3

3. Cron-Eintrag – einmal täglich, zu einer krummen Uhrzeit:

/etc/cron.d/resilic-security-txt
17 4 * * * root /usr/local/bin/resilic-security-txt

Warum so:

  • Einmal täglich reicht. Jede Antwort ist frisch signiert, das Expires:-Datum liegt rund sechs Monate in der Zukunft. Häufigere Aufrufe bringen nichts; ein wöchentlicher Job wäre ebenfalls sicher.
  • mktemp + mv tauscht die Datei atomar ein. Fällt der Abruf aus (Netz, Token widerrufen, Wartung), bleibt die bisherige gültige Datei liegen – und die ist noch monatelang gültig.
  • Die beiden grep-Prüfungen stellen sicher, dass nur eine echte signierte Datei eingesetzt wird.
  • Die Antwort ist die exakte Datei (text/plain, LF-Zeilenenden, abschließender Zeilenumbruch) – bitte nicht nachbearbeiten, sonst passt die Signatur nicht mehr.

Windows / IIS: dasselbe als PowerShell-Skript, geplant über die Aufgabenplanung (täglich):

Terminal-Fenster
$token = Get-Content 'C:\ProgramData\Resilic\token' -Raw
$target = 'C:\inetpub\wwwroot\.well-known\security.txt'
$tmp = "$target.tmp"
Invoke-WebRequest -Uri 'https://api.resilic.ai/api/integrations/v1/security-txt' `
-Headers @{ Authorization = "Bearer $($token.Trim())" } -OutFile $tmp -TimeoutSec 30
if (-not (Select-String -Path $tmp -Pattern '^-----BEGIN PGP SIGNED MESSAGE-----' -Quiet)) { Remove-Item $tmp; throw 'Unerwartete Antwort' }
Move-Item -Force $tmp $target

In IIS muss das Verzeichnis .well-known freigegeben sein (Anforderungsfilterung: verborgene Segmente) und .txt als text/plain ausgeliefert werden.

Betreiben Sie Ihre Website mit einem Baukasten oder CMS ohne Dateizugriff, ist die Weiterleitung auf den CSAF-Host der einfachere Weg – dafür brauchen Sie keinen Token.

  • Widerrufen Sie einen Token sofort, wenn ein Skript außer Betrieb geht oder der Token offengelegt wurde. Der nächste Aufruf wird abgewiesen.
  • Die Liste zeigt Zuletzt verwendet, damit Sie erkennen, welche Token noch gebraucht werden.
  • Erzeugen, Widerrufen und Verwendung landen im Audit-Protokoll.
  • Ein abgewiesener Token erhält eine nackte 401-Antwort ohne Begründung; ein Token ohne den nötigen Geltungsbereich eine 403. Aufrufe sind je Token begrenzt (30 pro Minute) – für einen täglichen Job mehr als genug.
  • Token gelten je Organisation. Ein Token einer anderen Organisation kann Ihre Daten nicht lesen.