Polycrate API für Teams: Zentrales Monitoring und Remote-Triggering
TL;DR Die Polycrate API macht aus einzelnen Workspaces eine Team-Plattform: alle Workspaces, Action …
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.
check) und Korrigieren (remediate), generiert Audit-Reports als JSON/CSV und legt sie strukturiert im Workspace ab – inklusive Git-Historie als Audit-Trail.Viele Compliance-Teams arbeiten noch mit Excel-Checklisten oder Word-Dokumenten:
Das funktioniert, solange Sie wenige Systeme und seltene Audits haben. Spätestens bei:
wird das Modell brüchig:
Policy as Code dreht das um: Die Checkliste wird zu ausführbarem Code. Die Frage lautet dann nicht mehr „Wer hat was wie geprüft?“, sondern:
Genau hier setzt Polycrate mit Ansible an – ohne dass Sie Entwickler sein müssen.
Policy as Code bedeutet: Compliance-Anforderungen werden in maschinenlesbarer Form beschrieben. Für unsere Zwecke:
Beispiel: Ein CIS-Benchmark fordert, dass /etc/passwd nur lesbar, aber nicht schreibbar für „Others“ ist. Statt in Excel „OK“ anzukreuzen, definieren Sie einen Task:
Der Vorteil:
Mit Polycrate koppeln Sie diese Playbooks an eine strukturierte Umgebung (Workspace), Container-basiertes Tooling und Git – das macht Policy as Code für Compliance-Verantwortliche beherrschbar.
Was unterscheidet Polycrate von „plain“ Ansible aus Compliance-Sicht?
Mit klassischem Ansible müssen Sie oft:
Das „Dependency-Problem“ führt zu:
Mit Polycrate:
Sie starten eine Compliance-Prüfung mit einem Befehl, ohne sich um die lokale Technik zu kümmern. Details zur Ansible-Integration finden Sie in der Dokumentation zu Ansible und Polycrate.
Polycrate zwingt Ihre Automatisierung in eine klare Struktur:
acme-corp-automation)cis-linux-baseline)check, remediate)Das verhindert, dass überall lose Playbooks liegen, die niemand mehr zuordnen kann. Mehr dazu in den Best Practices.
Compliance-Prüfungen arbeiten oft mit:
Der Polycrate-Workspace kann mit age verschlüsselt werden – ohne zusätzliches Tool wie Vault. Damit liegen sensible Informationen geschützt im Repository. Die Details dazu stehen in der Dokumentation zur Workspace-Verschlüsselung.
Ein zentraler Baustein für Audits: jede Änderung, jede Prüfung, jeder Report ist in Git nachvollziehbar. Polycrate arbeitet ideal mit Git zusammen, etwa:
artifacts/-Verzeichnis,Die Git-Integration von Polycrate ist in der Doku zu Git-Workflows beschrieben.
Im Folgenden bauen wir einen einfachen Block, der zwei Dinge tut:
check: CIS-ähnliche Checks auf Linux-Servern ausführen.remediate: einige Abweichungen automatisch korrigieren.Zielgruppe: Linux-Server (z. B. Ubuntu 22.04) in einer Domain acme-corp.com.
Im Workspace-Root legen Sie die workspace.poly an:
name: acme-corp-automation
organization: acme
blocks:
- name: cis-linux-baseline
from: registry.acme-corp.com/acme/compliance/cis-linux-baseline:0.1.0
config:
report_format: "json"Der Block kommt per from: aus einer OCI-Registry (hier fiktiv registry.acme-corp.com/...; öffentlich z. B. cargo.ayedo.cloud oder PolyHub). Die Version ist im from: gepinnt (:0.1.0). Ausgabepfade für Reports gehören nicht in workspace.poly/block.poly, sondern werden im Playbook aus block.artifacts.path abgeleitet – siehe Artefakte.
Das YAML-Inventory liegt ebenfalls im Workspace-Root als inventory.yml:
all:
hosts:
server01.acme-corp.com:
ansible_user: ubuntu
server02.acme-corp.com:
ansible_user: ubuntuPolycrate setzt ANSIBLE_INVENTORY automatisch auf dieses File. Die Playbooks können einfach hosts: all verwenden – sie laufen im Container, greifen aber per SSH auf Ihre Server zu.
Nach polycrate blocks pull liegt der Block unter blocks/registry.acme-corp.com/acme/compliance/cis-linux-baseline/. Dort legen Sie die block.poly an (name = vollständiger Registry-Pfad ohne Tag):
name: registry.acme-corp.com/acme/compliance/cis-linux-baseline
version: 0.1.0
kind: generic
config:
report_format: "json"
actions:
- name: check
playbook: check.yml
- name: remediate
playbook: remediate.ymlWichtige Punkte:
version pinnt den Block-Stand – wichtig für Nachvollziehbarkeit im Audit.workspace.poly können Sie z. B. report_format pro Instanz überschreiben – nur literale YAML-Werte, keine Jinja2-Ausdrücke. In workspace.poly und block.poly gibt es keine Template-Substitution (kein Jinja2); dynamische Pfade setzen Sie in Ansible, z. B. über block.artifacts.path. Details: Konfiguration – Einschränkungen und Blöcke.Nun die check.yml im gleichen Verzeichnis:
- name: CIS Linux Baseline Check
hosts: all
become: true
gather_facts: false
vars:
cis_results: []
report_dir: "{{ block.artifacts.path }}/reports"
tasks:
- name: Check 1 – /etc/passwd permissions
ansible.builtin.stat:
path: /etc/passwd
register: passwd_stat
- name: Evaluate 1 – /etc/passwd should be 0644
ansible.builtin.assert:
that:
- passwd_stat.stat.mode == "0644"
fail_msg: "/etc/passwd permissions are not 0644"
success_msg: "/etc/passwd permissions are 0644"
register: passwd_check
- name: Check 2 – SSH root login disabled
ansible.builtin.command: "sshd -T"
register: sshd_config
changed_when: false
- name: Evaluate 2 – PermitRootLogin should be no
ansible.builtin.assert:
that:
- "'permitrootlogin no' in sshd_config.stdout_lines"
fail_msg: "SSH root login is not disabled"
success_msg: "SSH root login is disabled"
register: ssh_root_check
- name: Build CIS result structure
ansible.builtin.set_fact:
cis_results: >-
{{
cis_results + [
{
"control": "CIS-5.4.1",
"description": "/etc/passwd permissions 0644",
"passed": passwd_check is succeeded
},
{
"control": "CIS-5.2.8",
"description": "SSH root login disabled",
"passed": ssh_root_check is succeeded
}
]
}}
- name: Ensure report directory exists
ansible.builtin.file:
path: "{{ report_dir }}"
state: directory
mode: "0750"
- name: Write JSON report
ansible.builtin.copy:
dest: "{{ report_dir }}/cis-linux-{{ inventory_hostname }}.json"
content: "{{ cis_results | to_nice_json }}"
mode: "0640"Was hier passiert:
ansible.builtin.stat prüft Dateirechte.ansible.builtin.command liest die aktuelle SSHD-Konfiguration.ansible.builtin.assert bewertet, ob der Soll-Zustand erfüllt ist.ansible.builtin.file legt das Report-Verzeichnis unter {{ block.artifacts.path }}/reports an (nicht als festen Pfad in block.poly – siehe Artefakte).ansible.builtin.copy schreibt einen JSON-Report je Host in dieses Verzeichnis.Die Module sind bewusst einfach gehalten – Compliance-Verantwortliche können den Text in description und fail_msg leicht nachvollziehen.
Jetzt die remediate.yml:
- name: CIS Linux Baseline Remediation
hosts: all
become: true
gather_facts: false
tasks:
- name: Fix 1 – Set /etc/passwd permissions to 0644
ansible.builtin.file:
path: /etc/passwd
mode: "0644"
- name: Fix 2 – Disable SSH root login in sshd_config
ansible.builtin.lineinfile:
path: /etc/ssh/sshd_config
regexp: '^PermitRootLogin'
line: 'PermitRootLogin no'
create: no
backup: yes
- name: Reload SSH service
ansible.builtin.command: "systemctl reload sshd"
changed_when: trueDieses Playbook nutzt:
ansible.builtin.file, um Dateirechte zu setzen.ansible.builtin.lineinfile (zusätzlich zum verlangten Modulsatz), um die SSH-Konfiguration anzupassen.ansible.builtin.command, um den Dienst neu zu laden.Wichtig: Idempotenz. Wenn ein System bereits compliant ist, ändern sich Dateien nicht unnötig – ein Kernprinzip von Ansible.
Aus dem Workspace-Root können Sie die Aktionen direkt starten:
polycrate run cis-linux-baseline checkNach Abschluss finden Sie für jeden Host einen JSON-Report unter {{ block.artifacts.path }}/reports/ (typisch artifacts/blocks/<registry-pfad>/reports/).
Wenn Sie Abweichungen korrigieren möchten:
polycrate run cis-linux-baseline remediateUnd anschließend erneut prüfen:
polycrate run cis-linux-baseline checkMit „plain“ Ansible müssten Sie:
Mit Polycrate reduziert sich das auf klare, nicht-technische Befehle – gut geeignet, um z. B. einem ISO eine eigene „Compliance-Konsole“ an die Hand zu geben.
Typischer Ablauf für eine dokumentierte Prüfung:
# Workspace ggf. entschlüsseln
polycrate workspace decrypt
# Compliance-Check ausführen
polycrate run cis-linux-baseline check
# Ergebnisse einsehen (Pfad = Block-Artefakte + /reports)
ls artifacts/blocks/registry.acme-corp.com/acme/compliance/cis-linux-baseline/reports/
cat artifacts/blocks/registry.acme-corp.com/acme/compliance/cis-linux-baseline/reports/cis-linux-server01.acme-corp.com.json
# Änderungen ins Git-Repository übernehmen
git add artifacts/blocks/
git commit -m "CIS Linux baseline check 2026-03-25"
git pushIm Audit können Sie dann konkret zeigen:
version) verwendet wurde,NIS‑2 (Richtlinie (EU) 2022/2555) ist am 16.01.2023 in Kraft getreten; die Mitgliedstaaten müssen die Vorgaben bis zum 17.10.2024 umsetzen. Die Maßnahmen sind ab dem 18.10.2024 anzuwenden. Die DSGVO gilt bereits seit dem 25.05.2018.
Beide Regime fordern, stark vereinfacht:
Mit Policy as Code können Sie z. B. automatisiert prüfen:
Diese technischen Controls sind nicht nur „nice to have“ – sie stützen:
Polycrate hilft hier, weil:
Für komplexere Umgebungen (z. B. gemischte Linux/Windows-Landschaften oder OT/IoT-Komponenten) lassen sich weitere Blöcke bauen oder aus der PolyHub bzw. eigenen Registries beziehen und versioniert teilen („Sharable Automation“).
Nein. Sie sollten:
Die eigentliche Technik (Container, Ansible, Python) kapselt Polycrate. Viele Compliance-Teams arbeiten so: Ein technisch versierter Kollege oder ein externer Partner baut die Blocks, das Compliance-Team führt sie mit einfachen Befehlen aus und interpretiert die Berichte.
Policy as Code ergänzt Ihre bestehenden Richtlinien:
Über Git-Historie und Polycrate-Workspaces entsteht ein konsistenter Nachweis, der sehr gut in bestehende GRC-Tools oder Auditdokumentationen integriert werden kann.
Die Erfahrung zeigt: Wenn die ersten zwei, drei Blöcke stehen, sinkt die Einstiegshürde drastisch. Wichtig ist eine klare Rollenverteilung:
Polycrate unterstützt diese Trennung durch klare Actions und eine einfache CLI. Zusätzlich bietet die Polycrate API höherwertige Schnittstellen: Workspaces, Blöcke und Actions lassen sich dort ansprechen und in andere Tools oder Self-Service-Frontends einbinden – sinnvoll, wenn nicht alle Stakeholder mit der Kommandozeile arbeiten.
Weitere Fragen? Siehe unsere FAQ
Mit dem gezeigten Beispiel haben Sie gesehen:
check- und remediate-Actions macht,block.artifacts.path landen und per Git zu einem belastbaren Audit-Trail werden,Für viele Organisationen ist der entscheidende Schritt nicht das einzelne Playbook, sondern der Aufbau einer wiederholbaren Plattform für Compliance-Automatisierung:
Genau hier setzt ayedo an: Wir verbinden Open-Source-Tools wie Polycrate mit erprobten Platform Engineering-Ansätzen und unterstützen Sie dabei, Policy as Code so einzuführen, dass sie für Compliance-Teams verständlich, für IT-Abteilungen handhabbar und für Auditoren belastbar ist.
Wenn Sie den nächsten Schritt gehen und eine auf Ihre Umgebung zugeschnittene Lösung erarbeiten möchten, starten wir gern mit einem praxisorientierten Format – Übersicht und Buchung:
TL;DR Die Polycrate API macht aus einzelnen Workspaces eine Team-Plattform: alle Workspaces, Action …
TL;DR Polycrate protokolliert nicht nur Action Runs (Ansible-Playbooks), sondern auch SSH-Sessions, …
TL;DR Ein sauber benannter, klar strukturierter Polycrate-Workspace ist die halbe Miete: ein …