Zum Hauptinhalt springen

Tresorstruktur für DevOps

Warum Struktur für die Automatisierung wichtig ist

Wenn ein Mensch Passwork verwendet, kann er nach Namen suchen und visuell navigieren. Automatisierung kann das nicht. Eine CI/CD-Pipeline oder ein Skript muss Secrets über einen vorhersehbaren Identifikator abrufen — eine Ordner-ID oder Tresor-ID — und erwartet, dass sich alle benötigten Secrets an diesem Ort befinden.

Eine gut gestaltete Struktur bedeutet:

  • Ein einzelnes --folder-id ruft alle Secrets ab, die eine Pipeline benötigt, ohne manuelles Zusammenstellen
  • Das Hinzufügen eines neuen Secrets zu einer Pipeline erfordert nur das Hinzufügen eines Datensatzes zum richtigen Ordner — keine Codeänderung
  • Die Zugriffskontrolle bildet die Teamgrenzen sauber ab

Empfohlene Hierarchie

Organisieren Sie Infrastruktur-Secrets zuerst nach Umgebung, dann nach Diensttyp:

Infrastructure (vault)
├── production/
│ ├── databases/
│ │ ├── postgres-order-service
│ │ ├── postgres-analytics
│ │ └── redis-sessions
│ ├── cloud/
│ │ ├── aws-credentials
│ │ └── gcp-service-account
│ ├── message-brokers/
│ │ └── rabbitmq-backend
│ └── external-apis/
│ ├── stripe-secret-key
│ └── twilio-auth-token
├── staging/
│ ├── databases/
│ ├── cloud/
│ └── external-apis/
└── development/
├── databases/
└── local/

Dieses Layout bedeutet:

  • Eine Produktions-Deploy-Pipeline verwendet --folder-id <production folder ID>, um alle Produktions-Secrets zu erhalten
  • Die Zugriffskontrolle erfolgt pro Umgebung: der Account svc-deploy-staging hat nur Lesezugriff auf staging/, nicht auf production/
  • Ein Skript auf dem Laptop eines Entwicklers verwendet --folder-id <development folder ID>, ohne die Produktion zu berühren

Namenskonventionen

Verwenden Sie Namen, die beschreibend und maschinenlesbar sind. Wenn passwork-cli exec Secrets in Umgebungsvariablen einschleust, verwendet es den Elementnamen (und die Namen der benutzerdefinierten Felder) als Variablennamen, wobei Leerzeichen und Sonderzeichen zu Unterstrichen normalisiert werden.

ElementnameEingeschleuste Variable
POSTGRES_PASSWORDPOSTGRES_PASSWORD
postgres order servicePOSTGRES_ORDER_SERVICE
AWS_SECRET_ACCESS_KEYAWS_SECRET_ACCESS_KEY
Stripe Secret KeySTRIPE_SECRET_KEY

Empfohlenes Muster: verwenden Sie SCREAMING_SNAKE_CASE für Infrastruktur-Elemente, die als Umgebungsvariablen eingeschleust werden. Dies macht die Zuordnung explizit und vermeidet Überraschungen.


Was in welches Feld gehört

Passwork-Passwortdatensätze verfügen über mehrere Felder. Verwenden Sie sie gezielt:

FeldWas gespeichert werden soll
LoginBenutzername, Name des Service-Accounts, Key-ID (z. B. AKIAIOSFODNN7EXAMPLE)
PasswortDer primäre Secret-Wert (Passwort, Token, privater Schlüssel)
URLDienst-Endpunkt oder Konsolen-URL (nützlich als menschliche Referenz)
Benutzerdefinierte FelderBenannte zusätzliche Secrets: AWS_SECRET_ACCESS_KEY, DB_HOST, DB_PORT, Verbindungszeichenfolgen
BeschreibungKonfigurationshinweise, Rotationsprozedur, verantwortliches Team
TagsUmgebung, Diensttyp (production, k8s, db)

Datensätze mit mehreren Secrets

Wenn ein Dienst mehrere zusammengehörige Anmeldedaten benötigt, speichern Sie sie in einem Datensatz mithilfe benutzerdefinierter Felder:

Record: "AWS production credentials"
Login: AKIAIOSFODNN7EXAMPLE
Password: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Custom fields:
AWS_REGION: eu-central-1
S3_BUCKET: company-backups-prod
ROLE_ARN: arn:aws:iam::123456789:role/deploy-role

passwork-cli exec --password-id <id> schleust all diese als separate Umgebungsvariablen ein.

Speichern von SSH-Schlüsseln und Zertifikaten

Verwenden Sie für mehrzeilige Secrets (private SSH-Schlüssel, TLS-Zertifikate, kubeconfig-Dateien) ein benutzerdefiniertes Feld mit dem vollständigen Inhalt. Die CLI verarbeitet mehrzeilige Werte korrekt. Alternativ können Sie Anhänge für Binärdateien verwenden.

TOTP-Codes

Wenn ein Service-Account 2FA erfordert, kann Passwork TOTP-Codes generieren. Fügen Sie ein benutzerdefiniertes Feld vom Typ TOTP hinzu und fügen Sie den Authenticator-Seed ein. Die CLI und das Python SDK können den aktuellen TOTP-Code programmatisch abrufen.


Tags zur Umgebungsfilterung

Wenden Sie Tags auf jeden Infrastruktur-Datensatz an:

  • Umgebungs-Tag: production, staging, development
  • Diensttyp-Tag: db, cloud, k8s, messaging, external-api
  • Status-Tag: active, deprecated, rotation-pending

passwork-cli exec --tags "production,db" ruft alle Datensätze ab, die beiden Tags entsprechen. Dies ist nützlich für Skripte, die über mehrere Dienste desselben Typs hinweg operieren.


CSE-Überlegungen

Wenn die client-seitige Verschlüsselung aktiviert ist:

  • Das Passwortfeld und die Werte der benutzerdefinierten Felder werden vor der Speicherung auf dem Client verschlüsselt
  • Der Elementname, das Login, die URL, die Tags und die Beschreibung werden NICHT auf dem Client verschlüsselt — sie sind auf dem Server durchsuchbar

Das bedeutet, dass Sie keine sensiblen Daten in den Elementnamen, die Beschreibung oder die Tags eintragen sollten. Bewahren Sie Secrets im Passwort- und in den benutzerdefinierten Feldern auf.

Die CLI und das Python SDK verarbeiten CSE transparent, wenn PASSWORK_MASTER_KEY gesetzt ist. Beim Wechsel zwischen Passwork-Instanzen mit aktiviertem und deaktiviertem CSE sind keine Codeänderungen erforderlich — es ändert sich nur das Vorhandensein oder Fehlen des Master-Key-Parameters.


Infrastruktur-Tresore von Business-Tresoren trennen

Bewahren Sie Infrastruktur-Secrets in einem dedizierten Tresor auf (z. B. Infrastructure oder DevOps). Vermischen Sie sie nicht mit Business-Anmeldedaten (CRM-Logins, Marketing-Tools). Dies macht:

  • Die Zugriffskontrolle sauberer: geben Sie CI/CD-Service-Accounts nur Zugriff auf den Infrastruktur-Tresor
  • Sicherheitsüberprüfungen einfacher: das Sicherheitsteam weiß genau, wo es nach privilegierten Anmeldedaten suchen muss
  • Den Rotationsumfang klarer: Infrastruktur-Rotationsskripte operieren auf einem bekannten Tresor

Best Practices für das Secret-Management finden Sie unter Secret-Management: Konzepte.