Dein erster produktiver Polycrate-Workspace: Eine Checkliste für den Start
TL;DR Ein sauber benannter, klar strukturierter Polycrate-Workspace ist die halbe Miete: ein …
Diese Serie zeigt Schritt für Schritt, wie Ansible mit Polycrate zu einer strukturierten, teilbaren und compliance-fähigen Automatisierungsplattform wird – von den Grundlagen bis zu Enterprise-Szenarien.
age verschlüsselt und können sicher im Git-Repository versioniert werden.secrets.poly enthält sensible Block-Konfiguration (Overrides zu workspace.poly), die zusammen mit Dateien unter artifacts/secrets/ mit einem Workspace-Encryption-Key (v. a. über die Polycrate API oder WORKSPACE_ENCRYPTION_KEY) per age verschlüsselt wird; beim Ausführen stellt Polycrate entschlüsselte Pfade bereit – Zugriff im Playbook über workspace.secrets[...].polycrate workspace decrypt zum Arbeiten, Änderungen vor dem Commit mit polycrate workspace encrypt absichern – keine externen Tools, kein zusätzliches Secret-Management-System.Wer länger mit Ansible, Shell-Skripten oder manueller Administration arbeitet, kennt typische Muster:
group_vars/all.yml in Klartext.Unter DSGVO und NIS‑2 ist das nicht mehr nur unschön, sondern ein reales Risiko:
Mit plain Ansible gibt es zwar Ansible Vault, aber:
Polycrate setzt genau hier an: Workspace-Verschlüsselung ist ein Kernfeature – nicht ein nachträglicher Zusatz.
Polycrate nutzt age als Verschlüsselungsformat. Das bedeutet:
WORKSPACE_ENCRYPTION_KEY → interaktiver Prompt (siehe Architektur in der Dokumentation).secrets.poly und Dateien unter artifacts/secrets/** werden zu .age-Artefakten; im Git-Repository liegen nur die verschlüsselten Varianten.Die Details sind in der Polycrate-Dokumentation beschrieben:
Workspace-Verschlüsselung in Polycrate
Die Grundidee:
artifacts/secrets/ ab (z. B. id_rsa, DB-Passwort-Datei, Kubeconfig) und optional sensible Einträge in secrets.poly (Block-Overrides).polycrate workspace encrypt – Polycrate bezieht den Key aus API oder Umgebungsvariable (s. o.).secrets.poly.age und artifacts/secrets/**/*.age.workspace.secrets[...] auf Pfade zu den Klartext-Dateien zu.Keine zusätzliche Binary wie sops, kein externer Storage wie HashiCorp Vault, kein „nur für Ansible“ wie Ansible Vault. Alles bleibt innerhalb des Polycrate-Workspaces.
secrets.poly liegt im Workspace-Root (neben workspace.poly). So wie in der offiziellen Dokumentation enthält sie keine recipients-Liste, sondern sensible Block-Konfiguration, die Werte aus workspace.poly überschreibt – Merge-Priorität: block.poly < workspace.poly < secrets.poly. Siehe Workspace-Verschlüsselung – secrets.poly.
Ein Beispiel (angepasst an unser Szenario – fiktive Werte):
# secrets.poly – sensible Overrides (werden mitverschlüsselt)
blocks:
- name: linux-user-ssh
config:
# Beispiel: zusätzliche, nicht öffentliche Block-Config
deploy_key_comment: "acme-deploy@2026"Die Verschlüsselung selbst nutzt einen Workspace-Encryption-Key (nicht pro Person eine Empfängerliste in secrets.poly). Schlüsselquellen und Ablauf: Workspace-Verschlüsselung – Überblick und Architektur.
Polycrate verschlüsselt u. a. secrets.poly und alle relevanten Dateien unter artifacts/secrets/. In Playbooks greifst du auf entschlüsselte Dateien über workspace.secrets['<dateiname>'] zu (Pfad im Action-Container).
Beispiel-block.poly (nach Pull aus der Registry; name = vollständiger Registry-Pfad ohne Tag):
# blocks/registry.acme-corp.com/acme/ops/linux-user-ssh/block.poly
name: registry.acme-corp.com/acme/ops/linux-user-ssh
version: 0.1.0
kind: generic
config:
username: "deploy"
ssh_private_key_file: "id_deploy" # Dateiname in artifacts/secrets/
actions:
- name: provision
playbook: provision.ymlIm Ansible-Playbook referenzierst du das Secret über workspace.secrets[...]:
# blocks/registry.acme-corp.com/acme/ops/linux-user-ssh/provision.yml
- name: Linux-User für Deployments anlegen
hosts: all
become: true
vars:
deploy_user: "{{ block.config.username }}"
tasks:
- name: Benutzer anlegen
ansible.builtin.user:
name: "{{ deploy_user }}"
shell: /bin/bash
state: present
- name: .ssh-Verzeichnis anlegen
ansible.builtin.file:
path: "/home/{{ deploy_user }}/.ssh"
state: directory
owner: "{{ deploy_user }}"
group: "{{ deploy_user }}"
mode: "0700"
- name: Private Key deployen (aus Workspace-Secret)
ansible.builtin.copy:
src: "{{ workspace.secrets[block.config.ssh_private_key_file] }}"
dest: "/home/{{ deploy_user }}/.ssh/id_rsa"
owner: "{{ deploy_user }}"
group: "{{ deploy_user }}"
mode: "0600"Was hier passiert:
workspace.secrets["id_deploy"] ist ein Pfad im Polycrate-Container, unter dem die entschlüsselte Datei bereitgestellt wird.Mit plain Ansible müsstest du jetzt mit Ansible Vault arbeiten, die Datei außerhalb der Playbooks verwalten oder eigene Scripte rundherum bauen. Mit Polycrate reicht die Referenz über workspace.secrets.
Nehmen wir einen simplen Workspace acme-corp-automation, der Linux-Server von ACME verwaltet:
# workspace.poly
name: acme-corp-automation
organization: acme
blocks:
- name: linux-user-ssh
from: registry.acme-corp.com/acme/ops/linux-user-ssh:0.1.0
config:
username: "deploy"
ssh_private_key_file: "id_deploy"Das Inventory liegt im Workspace-Root als inventory.yml. Kein Jinja in der Inventory-Datei: {{ workspace.secrets[...] }} wird dort nicht ausgewertet. Für den SSH-Login von Ansible nutzt Polycrate typischerweise den Private Key unter artifacts/secrets/id_rsa, wenn er existiert (siehe Workspace-Verschlüsselung):
# inventory.yml
all:
hosts:
server01.acme-corp.com:
ansible_user: ubuntuWir nutzen damit zwei Secret-Dateien:
artifacts/secrets/id_rsa – SSH-Key für den Ansible-Zugriff auf die Hosts (üblicher Standard)artifacts/secrets/id_deploy – Key für den neuen Deploy-User (wird im Playbook über workspace.secrets referenziert)Die unverschlüsselten Dateien liegen lokal unter:
artifacts/secrets/id_rsa
artifacts/secrets/id_deployIn Git landen nur die verschlüsselten Varianten (.age).
Stelle sicher, dass der Workspace-Encryption-Key verfügbar ist (Polycrate API, WORKSPACE_ENCRYPTION_KEY oder Eingabe beim Prompt – siehe Architektur). Anschließend:
# Workspace einmalig einrichten
polycrate workspace decrypt # falls schon verschlüsselt geklont
polycrate workspace encrypt # verschlüsselt alle Dateien in artifacts/secrets/Um den Block auszuführen:
# Aus Polycrate-Sicht immer im Container
polycrate run linux-user-ssh provisionPolycrate sorgt dafür, dass:
ANSIBLE_INVENTORY automatisch auf inventory.yml gesetzt wird,Damit adressiert Polycrate nicht nur das Secrets-Problem, sondern auch das klassische Dependency-Problem von Automation-Stacks: Alle Tools sind im Container definiert (Dockerfile.poly / Bash-Script), überall gleich und müssen nicht auf jedem Laptop per Hand nachgezogen werden.
Workspace-Verschlüsselung ist nur dann hilfreich, wenn sie den Alltag nicht ausbremst. Ein typischer Tagesablauf:
Workspace klonen
git clone git@git.acme-corp.com:platform/acme-corp-automation.git
cd acme-corp-automationSecrets lokal entschlüsseln
Wenn du den Workspace-Encryption-Key hast (z. B. via API, WORKSPACE_ENCRYPTION_KEY oder Team-Prozess):
polycrate workspace decryptPolycrate erkennt verschlüsselte Dateien unter artifacts/secrets/ sowie secrets.poly.age und legt unverschlüsselte Versionen an – nur auf deinem lokalen Filesystem.
Änderungen vornehmen
Neue Secret-Datei anlegen, z. B. neues DB-Passwort:
echo "super-secure-db-password" > artifacts/secrets/db_passwordBlock anpassen, um das Secret zu verwenden.
Playbook erweitern.
Lokales Testen
polycrate run linux-user-ssh provisionVor dem Commit: wieder verschlüsseln
polycrate workspace encrypt
git status
git add .
git commit -m "Neuen Deploy-User + DB-Secret hinzugefügt"Im Git-Repository liegen u. a. verschlüsselte Artefakte (*.age, secrets.poly.age). Ohne den Workspace-Encryption-Key sind sie nicht nutzbar – ein starkes Argument in jeder DSGVO- oder NIS‑2-Risikoanalyse.
Die Verschlüsselung arbeitet mit einem Workspace-Encryption-Key pro Workspace (keine Empfängerliste in secrets.poly). Best Practice: Schlüssel und Credentials über die Polycrate API verwalten lassen – dann müssen Entwickler den Key nicht manuell verteilen. Zweitbester Weg ohne API: Key mit polycrate tools pwgen -a age erzeugen, die Zeile AGE-SECRET-KEY-... sicher ablegen (z. B. Keeper, Bitwarden, Vaultwarden) und bei polycrate workspace encrypt / decrypt als WORKSPACE_ENCRYPTION_KEY setzen bzw. einfügen (siehe Dokumentation).
Organisatorisch bleibt wichtig: Wer den Key oder API-Zugang erhält, wer Commits an Secrets reviewt und wie Rotation und Offboarding laufen – das ergänzt die technische Verschlüsselung, ersetzt sie aber nicht.
Natürlich ersetzt Workspace-Verschlüsselung keine vollständige Datenschutz-Folgenabschätzung, aber sie ist ein starker technischer Pfeiler:
secrets.poly, an Secret-Dateien und an den .age-Artefakten sind versioniert. Du kannst nachvollziehen, wann welche Konfiguration oder welches Secret geändert wurde.Seit dem 25.05.2018 verlangt die DSGVO, dass du technische und organisatorische Maßnahmen zum Schutz personenbezogener Daten nachweisen kannst. Für NIS‑2-pflichtige Unternehmen (mit Stichtag 17.10.2024) gilt ähnliches für kritische Infrastrukturen.
Polycrate hilft dir dabei, diese Anforderungen in deiner Infrastruktur-Automatisierung umzusetzen, ohne ein zusätzliches Secret-Management-System einführen zu müssen. Gerade in Kombination mit einem sauberen Platform Engineering-Ansatz entsteht so eine einheitliche, audit-fähige Basis.
Vault ist mächtig – aber:
Für viele Teams ist das „mit Kanonen auf Spatzen geschossen“, insbesondere wenn es „nur“ um Secrets innerhalb von Automation-Workspaces geht.
Polycrate setzt niedriger an:
SOPS ist ein hervorragendes Tool für verschlüsselte YAML/JSON-Dateien, aber:
Mit Polycrate kommen:
aus einer Hand. Kein Bruch im Developer-Workflow.
Ansible Vault ist eng in Ansible integriert, aber damit auch begrenzt:
Polycrate geht weiter:
artifacts/secrets/ – unabhängig vom verwendeten Tool.workspace.secrets[...] zur Verfügung – egal ob Ansible, kubectl, ein Bash-Script oder ein eigenes Binary.Workspace-Verschlüsselung nutzt einen gemeinsamen Workspace-Encryption-Key (nicht pro Person unterschiedliche Empfänger in secrets.poly). Empfohlen ist, den Key nicht per Chat zu verteilen, sondern über die Polycrate API oder einen Passwort-Manager / vertrauliche Übergabe – analog zur offiziellen Doku. Zugriff entziehen funktioniert organisatorisch (API-Rechte, Rotation des Keys, Entfernen aus dem Passwort-Manager) und über eure Git-/Review-Prozesse, nicht durch „Empfänger aus secrets.poly streichen“.
Die verschlüsselten Dateien unter artifacts/secrets/ und secrets.poly.age sind im Repo sichtbar, aber ohne den Workspace-Encryption-Key nutzlos. polycrate workspace decrypt schlägt dann fehl bzw. fordert den Key an. Das ist das gewünschte Verhalten: Code ist lesbar, Secrets nicht – ideal für getrennte Rollen (z. B. Entwickler ohne Produktionszugriff).
Workspace-Verschlüsselung ist ein Baustein in einem technischen Kontroll-Set, z. B. für DSGVO-TOMs oder NIS‑2-Maßnahmenkataloge. In Kombination mit sauber definierter Rollenverteilung, Logging der Automation-Läufe und klaren Prozessen für Key-Management kannst du gegenüber Prüfern zeigen, dass:
Weitere Fragen? Siehe unsere FAQ
Workspace-Verschlüsselung mit Polycrate ist kein theoretisches Sicherheitsfeature, das im Alltag vergessen wird. Sie ist unmittelbar im Workflow verankert:
ayedo begleitet Organisationen genau an dieser Schnittstelle aus Automatisierung, Security und Compliance – ob als Erweiterung bestehender Ansible-Landschaften oder im Rahmen eines modernen Platform Engineering-Ansatzes. Wir helfen dabei,
Wenn du sehen möchtest, wie sich das konkret anfühlt – inklusive polycrate workspace encrypt/decrypt, secrets.poly und der Nutzung von workspace.secrets in deinen eigenen Playbooks –, lohnt sich ein Blick auf unsere Workshops.
TL;DR Ein sauber benannter, klar strukturierter Polycrate-Workspace ist die halbe Miete: ein …
TL;DR Plain Ansible ist ein starkes Werkzeug für Ad-hoc-Automatisierung, schnelle Skripte und …
TL;DR Manuelles Compliance-Checking mit Excel-Listen ist langsam, fehleranfällig und kaum …