[{"data":1,"prerenderedAt":20},["ShallowReactive",2],{"blog-post-de-audit-log-ki-agenten-eu-ai-act":3},{"slug":4,"lang":5,"title":6,"description":7,"heading":6,"translationKey":8,"date":9,"keywords":10,"readingMinutes":16,"html":17,"alternates":18},"audit-log-ki-agenten-eu-ai-act","de","Audit-Log für KI-Agenten: Was der EU AI Act verlangt","Was ein Audit-Log für KI-Agenten enthalten sollte, warum das Protokoll des KI-Anbieters kein unabhängiger Nachweis ist und was EU AI Act und DSGVO fordern.","audit-trail","2026-09-18",[11,12,13,14,15],"Audit-Log KI-Agenten","EU AI Act Protokollierung","KI-Agenten Nachvollziehbarkeit","EU AI Act Aufzeichnungspflicht","KI Governance Audit",7,"\u003Cp>KI-Agenten beantworten in Entwicklungsteams längst nicht mehr nur Fragen. Sie legen Jira-Tickets\nan, kommentieren Pull Requests, fragen Tabellen in Databricks ab und schreiben Nachrichten in\nSlack. Jede dieser Aktionen ist ein Aufruf gegen ein echtes System, ausgeführt mit echten\nZugangsdaten. Wenn etwas schiefgeht oder ein Prüfer oder Kunde wissen möchte, was ein Agent getan\nhat, braucht das Team ein Protokoll, das diese Frage genau beantwortet. In vielen Unternehmen gibt\nes dieses Protokoll nicht, oder es liegt ausschließlich beim KI-Anbieter.\u003C\u002Fp>\n\u003Cp>Dieser Beitrag beschreibt, was ein Audit-Log für KI-Agenten enthalten sollte, warum der Ort des\nProtokolls genauso wichtig ist wie sein Inhalt und welchen Rahmen EU AI Act und DSGVO dafür setzen.\nEr gehört zu unserer Reihe über \u003Ca href=\"\u002Fde\u002Fblog\u002Fki-agenten-softwareentwicklung\">KI-Agenten in der Softwareentwicklung\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2>Warum das Thema gerade jetzt aufkommt\u003C\u002Fh2>\n\u003Cp>Hier treffen zwei Entwicklungen zusammen. Erstens greifen Agenten auf deutlich mehr Systeme zu als\nfrüher. Über das Model Context Protocol (MCP) kann ein Client wie Claude Code, Cursor oder VS Code\ndirekt Tools in Jira, GitHub oder Confluence aufrufen. Zweitens verlangt die Regulierung\nzunehmend Nachweise. Der \u003Ca href=\"https:\u002F\u002Feur-lex.europa.eu\u002Feli\u002Freg\u002F2024\u002F1689\u002Foj\">EU AI Act (Verordnung (EU) 2024\u002F1689)\u003C\u002Fa>\nenthält ausdrückliche Aufzeichnungspflichten, und die DSGVO fordert seit 2018 Rechenschaft für jede\nVerarbeitung personenbezogener Daten.\u003C\u002Fp>\n\u003Cp>Der Zeitplan wird häufig falsch dargestellt, deshalb lohnt sich ein genauer Blick. Verbotene\nPraktiken gelten seit dem 2. Februar 2025, die Pflichten für KI-Modelle mit allgemeinem\nVerwendungszweck seit dem 2. August 2025. Die Transparenzpflichten nach Artikel 50 gelten ab dem\n2. August 2026. Die Pflichten für Hochrisiko-Systeme wurden durch den Digital Omnibus (Verordnung\n(EU) 2026\u002F1744, in Kraft seit dem 27. Juli 2026) verschoben: Für eigenständige Hochrisiko-Systeme\nnach Anhang III gelten sie ab dem 2. Dezember 2027, für KI in regulierten Produkten nach Anhang I\nab dem 2. August 2028.\u003C\u002Fp>\n\u003Cp>Genauso wichtig ist eine ehrliche Einordnung. Die meisten Agenten, die Sprints planen, Code\nreviewen oder Dokumentation pflegen, sind keine Hochrisiko-Systeme im Sinne des AI Act. Die\nstrengen Protokollierungspflichten nach Artikel 12 gelten für sie daher nicht unmittelbar. Die\nFrage wird dadurch jedoch nicht bedeutungslos. Sobald ein Agent personenbezogene Daten liest oder\nweitergibt, gilt die DSGVO, und der Verantwortliche muss nachweisen können, was passiert ist\n(Art. 5 Abs. 2 DSGVO). Hinzu kommt, dass Security-Teams und Kunden immer öfter genau die Frage\nstellen, die auch ein Prüfer stellen würde: Welcher Agent hat was getan, mit wessen Berechtigung,\nund war das erlaubt?\u003C\u002Fp>\n\u003Ch2>Was ein Audit-Log für KI-Agenten enthalten sollte\u003C\u002Fh2>\n\u003Cp>Ein brauchbares Audit-Log beantwortet für jeden einzelnen Aufruf fünf Fragen. Die folgenden\nAngaben sind ein sinnvolles Minimum.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Wer hat gehandelt?\u003C\u002Fstrong> Die Identität hinter dem Aufruf: welcher Agent oder welche Person, mit\nwelchem API-Key, in welchem Projekt oder Workspace. „Das war die KI“ ist keine Antwort, die ein\nPrüfer akzeptiert. Das Protokoll muss die verantwortliche Identität benennen.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Was wurde angefragt?\u003C\u002Fstrong> Das Zielsystem, die Operation (zum Beispiel \u003Ccode>jira_create_issue\u003C\u002Fcode> oder\n\u003Ccode>github_merge_pr\u003C\u002Fcode>) und die Parameter, etwa der Projektschlüssel oder das Repository. Parameter\nkönnen personenbezogene oder geheime Daten enthalten und sollten deshalb vor dem Schreiben\ngeschwärzt werden. Das Protokoll darf nicht zur zweiten Kopie genau der Daten werden, die es\neigentlich schützen soll.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Was wurde entschieden, und warum?\u003C\u002Fstrong> Genau dieser Teil fehlt in den meisten Protokollen. Es reicht\nnicht, erfolgreiche Aufrufe festzuhalten. Ein vollständiges Audit-Log enthält auch abgelehnte\nAufrufe samt Begründung (zum Beispiel „Operation in diesem Workspace nicht freigeschaltet“ oder\n„Repository nicht in der Allowlist“), Aufrufe, die auf eine manuelle Freigabe warten, Aufrufe, die\nan ein Rate Limit gestoßen sind, und Aufrufe, die mit einem Fehler geendet haben. Gerade die\nabgelehnten Aufrufe sind oft am aufschlussreichsten, weil sie zeigen, was ein Agent außerhalb\nseiner Befugnisse versucht hat.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Wann?\u003C\u002Fstrong> Ein genauer Zeitstempel in einer einheitlichen Zeitzone, damit sich Einträge mit\nEreignissen in anderen Systemen abgleichen lassen.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Ist der Eintrag unverändert?\u003C\u002Fstrong> Ein Audit-Log ist nur dann ein Nachweis, wenn niemand es\nnachträglich unbemerkt ändern kann. Dafür braucht es einen technischen Schutz, nicht nur eine\nRichtlinie, die das Bearbeiten verbietet.\u003C\u002Fp>\n\u003Cp>Ein guter Test: Nehmen Sie einen echten Vorfall und versuchen Sie, ihn ausschließlich anhand des\nProtokolls nachzuvollziehen. Wenn Sie dafür Screenshots, Chatverläufe oder das Gedächtnis von\nKollegen brauchen, ist das Protokoll unvollständig.\u003C\u002Fp>\n\u003Ch2>Warum das Protokoll des Anbieters kein unabhängiger Nachweis ist\u003C\u002Fh2>\n\u003Cp>Mehrere KI-Anbieter bieten inzwischen eigene Audit-Logs für ihre Tools und Konnektoren an. Für den\nBetrieb dieser Tools sind sie nützlich, und es gibt keinen Grund, sie zu ignorieren. Als Nachweis\nhaben sie jedoch eine strukturelle Schwäche: Die Partei, deren Handeln geprüft wird, führt auch\ndas Protokoll.\u003C\u002Fp>\n\u003Cp>Das ist aus drei Gründen relevant. Erstens die Unabhängigkeit: Ein Prüfer bewertet ein Protokoll,\ndas der Betreiber des geprüften Systems selbst führt, anders als eines aus einer getrennten\nKontrollinstanz. Das Prinzip kennt man aus der Buchhaltung, in der Buchführung und Prüfung\nbewusst getrennt sind. Zweitens die Abdeckung: Das Protokoll eines Anbieters erfasst nur dessen\neigene Tools. Ein Team, das Claude Code für Code, Cursor in der IDE und einen internen Chatbot im\nSupport einsetzt, hat drei Teilprotokolle in drei Formaten, und keines davon zeigt das\nGesamtbild. Drittens die Kontrolle über Aufbewahrung und Zugriff: Aufbewahrungsdauer,\nExportformat und Zugriffsrechte legt der Anbieter fest, nicht das Unternehmen, das für die Daten\ngeradestehen muss.\u003C\u002Fp>\n\u003Cfigure class=\"post-figure\">\n\u003Csvg viewBox=\"0 0 760 300\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" role=\"img\" aria-labelledby=\"audit-where-title\">\n  \u003Ctitle id=\"audit-where-title\">Anbieter-Logs erfassen nur das eigene Tool des Anbieters; ein selbst gehostetes Gateway führt ein Protokoll für jeden Agenten-Aufruf und leitet es weiter.\u003C\u002Ftitle>\n  \u003Ctext class=\"fig-h fig-c-deny\" x=\"20\" y=\"32\">PROTOKOLLE DER ANBIETER\u003C\u002Ftext>\n  \u003Ctext class=\"fig-h fig-c-primary\" x=\"392\" y=\"32\">EIGENES GATEWAY\u003C\u002Ftext>\n  \u003Cpath class=\"fig-edge fig-edge--faint\" d=\"M370 20 V290\"\u002F>\n  \u003Crect class=\"fig-box fig-box--ai\" x=\"20\" y=\"60\" width=\"112\" height=\"44\" rx=\"8\"\u002F>\n  \u003Ctext class=\"fig-t\" x=\"76\" y=\"87\" text-anchor=\"middle\">Claude Code\u003C\u002Ftext>\n  \u003Cpath class=\"fig-edge\" d=\"M132 82 H196\"\u002F>\n  \u003Cpath class=\"fig-head--muted\" d=\"M196 82 l-7 -4 v8 z\"\u002F>\n  \u003Crect class=\"fig-box fig-box--muted fig-box--dashed\" x=\"196\" y=\"60\" width=\"152\" height=\"44\" rx=\"8\"\u002F>\n  \u003Ctext class=\"fig-t\" x=\"272\" y=\"79\" text-anchor=\"middle\">Log A\u003C\u002Ftext>\n  \u003Ctext class=\"fig-s\" x=\"272\" y=\"95\" text-anchor=\"middle\">Frist des Anbieters\u003C\u002Ftext>\n  \u003Crect class=\"fig-box fig-box--ai\" x=\"20\" y=\"130\" width=\"112\" height=\"44\" rx=\"8\"\u002F>\n  \u003Ctext class=\"fig-t\" x=\"76\" y=\"157\" text-anchor=\"middle\">Cursor\u003C\u002Ftext>\n  \u003Cpath class=\"fig-edge\" d=\"M132 152 H196\"\u002F>\n  \u003Cpath class=\"fig-head--muted\" d=\"M196 152 l-7 -4 v8 z\"\u002F>\n  \u003Crect class=\"fig-box fig-box--muted fig-box--dashed\" x=\"196\" y=\"130\" width=\"152\" height=\"44\" rx=\"8\"\u002F>\n  \u003Ctext class=\"fig-t\" x=\"272\" y=\"149\" text-anchor=\"middle\">Log B\u003C\u002Ftext>\n  \u003Ctext class=\"fig-s\" x=\"272\" y=\"165\" text-anchor=\"middle\">Frist des Anbieters\u003C\u002Ftext>\n  \u003Crect class=\"fig-box fig-box--ai\" x=\"20\" y=\"200\" width=\"112\" height=\"44\" rx=\"8\"\u002F>\n  \u003Ctext class=\"fig-t\" x=\"76\" y=\"227\" text-anchor=\"middle\">Chatbot\u003C\u002Ftext>\n  \u003Cpath class=\"fig-edge\" d=\"M132 222 H196\"\u002F>\n  \u003Cpath class=\"fig-head--muted\" d=\"M196 222 l-7 -4 v8 z\"\u002F>\n  \u003Crect class=\"fig-box fig-box--muted fig-box--dashed\" x=\"196\" y=\"200\" width=\"152\" height=\"44\" rx=\"8\"\u002F>\n  \u003Ctext class=\"fig-t\" x=\"272\" y=\"219\" text-anchor=\"middle\">Log C\u003C\u002Ftext>\n  \u003Ctext class=\"fig-s\" x=\"272\" y=\"235\" text-anchor=\"middle\">Frist des Anbieters\u003C\u002Ftext>\n  \u003Crect class=\"fig-box fig-box--ai\" x=\"392\" y=\"60\" width=\"104\" height=\"44\" rx=\"8\"\u002F>\n  \u003Ctext class=\"fig-t\" x=\"444\" y=\"87\" text-anchor=\"middle\">Claude Code\u003C\u002Ftext>\n  \u003Cpath class=\"fig-flow fig-flow--ai\" d=\"M496 82 C508 82 508 152 520 152\"\u002F>\n  \u003Crect class=\"fig-box fig-box--ai\" x=\"392\" y=\"130\" width=\"104\" height=\"44\" rx=\"8\"\u002F>\n  \u003Ctext class=\"fig-t\" x=\"444\" y=\"157\" text-anchor=\"middle\">Cursor\u003C\u002Ftext>\n  \u003Cpath class=\"fig-flow fig-flow--ai\" d=\"M496 152 C508 152 508 152 520 152\"\u002F>\n  \u003Crect class=\"fig-box fig-box--ai\" x=\"392\" y=\"200\" width=\"104\" height=\"44\" rx=\"8\"\u002F>\n  \u003Ctext class=\"fig-t\" x=\"444\" y=\"227\" text-anchor=\"middle\">Chatbot\u003C\u002Ftext>\n  \u003Cpath class=\"fig-flow fig-flow--ai\" d=\"M496 222 C508 222 508 152 520 152\"\u002F>\n  \u003Cpath class=\"fig-flow fig-flow--ok\" d=\"M624 152 C638 152 638 82 652 82\"\u002F>\n  \u003Crect class=\"fig-box fig-box--ok\" x=\"652\" y=\"60\" width=\"96\" height=\"44\" rx=\"8\"\u002F>\n  \u003Ctext class=\"fig-t\" x=\"700\" y=\"87\" text-anchor=\"middle\">Audit-Log\u003C\u002Ftext>\n  \u003Cpath class=\"fig-flow fig-flow--ok\" d=\"M624 152 C638 152 638 152 652 152\"\u002F>\n  \u003Crect class=\"fig-box\" x=\"652\" y=\"130\" width=\"96\" height=\"44\" rx=\"8\"\u002F>\n  \u003Ctext class=\"fig-t\" x=\"700\" y=\"157\" text-anchor=\"middle\">CSV · JSON\u003C\u002Ftext>\n  \u003Cpath class=\"fig-flow fig-flow--ok\" d=\"M624 152 C638 152 638 222 652 222\"\u002F>\n  \u003Crect class=\"fig-box\" x=\"652\" y=\"200\" width=\"96\" height=\"44\" rx=\"8\"\u002F>\n  \u003Ctext class=\"fig-t\" x=\"700\" y=\"227\" text-anchor=\"middle\">SIEM\u003C\u002Ftext>\n  \u003Crect class=\"fig-box fig-box--primary\" x=\"520\" y=\"60\" width=\"104\" height=\"184\" rx=\"12\"\u002F>\n  \u003Ctext class=\"fig-t fig-c-primary\" x=\"572\" y=\"148\" text-anchor=\"middle\">Vordix\u003C\u002Ftext>\n  \u003Ctext class=\"fig-s\" x=\"572\" y=\"166\" text-anchor=\"middle\">selbst gehostet\u003C\u002Ftext>\n  \u003Ctext class=\"fig-s\" x=\"20\" y=\"272\">× 3 Teilprotokolle, 3 Formate\u003C\u002Ftext>\n  \u003Ctext class=\"fig-s\" x=\"20\" y=\"288\">× geführt von der geprüften Partei\u003C\u002Ftext>\n  \u003Ctext class=\"fig-s fig-c-ok\" x=\"392\" y=\"272\">✓ ein vollständiges Protokoll\u003C\u002Ftext>\n  \u003Ctext class=\"fig-s fig-c-ok\" x=\"392\" y=\"288\">✓ gehört dem Unternehmen\u003C\u002Ftext>\n\u003C\u002Fsvg>\n\u003Cfigcaption>Links: Jeder KI-Client schreibt in das Log seines Anbieters, mit dessen Format und Aufbewahrungsfrist. Rechts: Jeder Aufruf läuft über ein selbst gehostetes Gateway, das ein einziges Audit-Log führt und weiterleitet.\u003C\u002Ffigcaption>\n\u003C\u002Ffigure>\n\n\u003Cp>Eine unabhängige Kontrollinstanz vermeidet diese Probleme schon durch ihre Architektur. Laufen\nalle Aufrufe der Agenten über ein Gateway, das das Unternehmen selbst betreibt, ist das Protokoll\nanbieterübergreifend vollständig und gehört dem Unternehmen, das die Verantwortung trägt. Der\nBeitrag \u003Ca href=\"\u002Fde\u002Fblog\u002Fwas-ist-ein-mcp-gateway\">Was ist ein MCP Gateway?\u003C\u002Fa> erklärt diese Architektur\ngenauer.\u003C\u002Fp>\n\u003Ch2>Wie Vordix die Aktivität von Agenten protokolliert\u003C\u002Fh2>\n\u003Cp>Vordix ist ein selbst gehostetes Gateway zwischen KI-Agenten und Tools wie Jira, GitHub,\nConfluence, Slack und Databricks. Jede Anfrage läuft durch dieses Gateway und wird daher an einer\nStelle protokolliert. Das Audit-Log orientiert sich an den oben genannten Fragen:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Jedes Ergebnis wird erfasst:\u003C\u002Fstrong> erlaubt, abgelehnt mit Begründung, zur Freigabe angehalten,\ndurch das Rate Limit gebremst und fehlgeschlagen. Jeder Eintrag enthält den Entscheidungspfad,\nalso welche Regel zu welcher Entscheidung geführt hat.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Parameter werden vor dem Schreiben geschwärzt\u003C\u002Fstrong>, damit personenbezogene Daten aus einer Anfrage\nnicht im Klartext im Protokoll landen.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Das Protokoll ist append-only und über eine HMAC-Hashkette verkettet.\u003C\u002Fstrong> Keine Rolle, auch nicht\nder Administrator, kann Einträge bearbeiten, und die Integrität der Kette lässt sich jederzeit\nprüfen. Ein geänderter oder gelöschter Eintrag bricht die Kette.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Die Aufbewahrung beträgt mindestens 180 Tage\u003C\u002Fstrong>, und ein Legal Hold kann Einträge darüber hinaus\nsichern.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Export und Weiterleitung:\u003C\u002Fstrong> Einträge lassen sich als CSV oder JSON exportieren, als Live-Stream\nverfolgen oder über einen signierten Webhook an ein SIEM (Security Information and Event\nManagement) übergeben.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Regulatorische Kennzeichnung:\u003C\u002Fstrong> Audit-Einträge tragen Tags für die Artikel 10 und 12 des AI\nAct, und die Compliance-Seite der Dokumentation ordnet die Kontrollen den Artikeln 10, 12 und 14\ndes AI Act sowie ISO 27001 Anhang A zu.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cfigure class=\"post-figure\">\n\u003Csvg viewBox=\"0 0 760 290\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" role=\"img\" aria-labelledby=\"audit-chain-title\">\n  \u003Ctitle id=\"audit-chain-title\">Ein append-only Audit-Log: Jeder Eintrag, auch ein abgelehnter Aufruf mit Begründung, trägt einen HMAC über den vorherigen Hash, und die Kette wird exportiert oder an ein SIEM gesendet.\u003C\u002Ftitle>\n  \u003Ctext class=\"fig-h fig-c-primary\" x=\"16\" y=\"28\">AUDIT-LOG · APPEND-ONLY\u003C\u002Ftext>\n  \u003Cg>\n    \u003Crect class=\"fig-box\" x=\"16\" y=\"44\" width=\"164\" height=\"178\" rx=\"10\"\u002F>\n    \u003Ctext class=\"fig-s\" x=\"28\" y=\"66\">#1041 · 09:14:02\u003C\u002Ftext>\n    \u003Ctext class=\"fig-t fig-c-ok\" x=\"28\" y=\"102\">ERLAUBT\u003C\u002Ftext>\n    \u003Ctext class=\"fig-s\" x=\"28\" y=\"122\">jira_create_issue\u003C\u002Ftext>\n    \u003Ctext class=\"fig-s\" x=\"28\" y=\"158\">agent: sprint-bot\u003C\u002Ftext>\n    \u003Cpath class=\"fig-edge fig-edge--faint\" d=\"M28 170 H168\"\u002F>\n    \u003Ctext class=\"fig-s\" x=\"28\" y=\"188\">prev 3f9a…c21e\u003C\u002Ftext>\n    \u003Ctext class=\"fig-s fig-c-primary\" x=\"28\" y=\"206\">hash 9c1e…07b4\u003C\u002Ftext>\n  \u003C\u002Fg>\n  \u003Cg>\n    \u003Crect class=\"fig-box\" x=\"206\" y=\"44\" width=\"164\" height=\"178\" rx=\"10\"\u002F>\n    \u003Ctext class=\"fig-s\" x=\"218\" y=\"66\">#1042 · 09:14:07\u003C\u002Ftext>\n    \u003Ctext class=\"fig-t fig-c-deny\" x=\"218\" y=\"102\">ABGELEHNT\u003C\u002Ftext>\n    \u003Ctext class=\"fig-s\" x=\"218\" y=\"122\">github_merge_pr\u003C\u002Ftext>\n    \u003Ctext class=\"fig-s fig-c-deny\" x=\"218\" y=\"140\">nicht in Allowlist\u003C\u002Ftext>\n    \u003Ctext class=\"fig-s\" x=\"218\" y=\"158\">agent: review-bot\u003C\u002Ftext>\n    \u003Cpath class=\"fig-edge fig-edge--faint\" d=\"M218 170 H358\"\u002F>\n    \u003Ctext class=\"fig-s\" x=\"218\" y=\"188\">prev 9c1e…07b4\u003C\u002Ftext>\n    \u003Ctext class=\"fig-s fig-c-primary\" x=\"218\" y=\"206\">hash 4b7a…e913\u003C\u002Ftext>\n  \u003C\u002Fg>\n  \u003Cg>\n    \u003Crect class=\"fig-box\" x=\"396\" y=\"44\" width=\"164\" height=\"178\" rx=\"10\"\u002F>\n    \u003Ctext class=\"fig-s\" x=\"408\" y=\"66\">#1043 · 09:15:31\u003C\u002Ftext>\n    \u003Ctext class=\"fig-t fig-c-primary\" x=\"408\" y=\"102\">ANGEHALTEN\u003C\u002Ftext>\n    \u003Ctext class=\"fig-s\" x=\"408\" y=\"122\">confluence_update_page\u003C\u002Ftext>\n    \u003Ctext class=\"fig-s fig-c-primary\" x=\"408\" y=\"140\">wartet auf Freigabe\u003C\u002Ftext>\n    \u003Ctext class=\"fig-s\" x=\"408\" y=\"158\">agent: docs-bot\u003C\u002Ftext>\n    \u003Cpath class=\"fig-edge fig-edge--faint\" d=\"M408 170 H548\"\u002F>\n    \u003Ctext class=\"fig-s\" x=\"408\" y=\"188\">prev 4b7a…e913\u003C\u002Ftext>\n    \u003Ctext class=\"fig-s fig-c-primary\" x=\"408\" y=\"206\">hash d25f…6a08\u003C\u002Ftext>\n  \u003C\u002Fg>\n  \u003Cg>\n    \u003Crect class=\"fig-box fig-box--dashed\" x=\"586\" y=\"44\" width=\"164\" height=\"178\" rx=\"10\"\u002F>\n    \u003Ctext class=\"fig-s\" x=\"598\" y=\"80\">#1044 · 09:15:40\u003C\u002Ftext>\n    \u003Ctext class=\"fig-s fig-c-primary\" x=\"738\" y=\"62\" text-anchor=\"end\">wird angehängt\u003C\u002Ftext>\n    \u003Ctext class=\"fig-t fig-c-ok\" x=\"598\" y=\"102\">ERLAUBT\u003C\u002Ftext>\n    \u003Ctext class=\"fig-s\" x=\"598\" y=\"122\">slack_post_message\u003C\u002Ftext>\n    \u003Ctext class=\"fig-s\" x=\"598\" y=\"158\">agent: sprint-bot\u003C\u002Ftext>\n    \u003Cpath class=\"fig-edge fig-edge--faint\" d=\"M598 170 H738\"\u002F>\n    \u003Ctext class=\"fig-s\" x=\"598\" y=\"188\">prev d25f…6a08\u003C\u002Ftext>\n    \u003Ctext class=\"fig-s fig-c-primary\" x=\"598\" y=\"206\">hash 71c0…b3d2\u003C\u002Ftext>\n  \u003C\u002Fg>\n  \u003Cpath class=\"fig-flow\" d=\"M176 202 C194 202 192 184 206 184\"\u002F>\n  \u003Cpath class=\"fig-head\" d=\"M206 184 l-7 -4 v8 z\"\u002F>\n  \u003Cpath class=\"fig-flow\" d=\"M366 202 C384 202 382 184 396 184\"\u002F>\n  \u003Cpath class=\"fig-head\" d=\"M396 184 l-7 -4 v8 z\"\u002F>\n  \u003Cpath class=\"fig-flow\" d=\"M556 202 C574 202 572 184 586 184\"\u002F>\n  \u003Cpath class=\"fig-head\" d=\"M586 184 l-7 -4 v8 z\"\u002F>\n  \u003Ctext class=\"fig-s\" x=\"16\" y=\"256\">Hash = HMAC(vorh. Hash, Eintrag)\u003C\u002Ftext>\n  \u003Ctext class=\"fig-s\" x=\"16\" y=\"274\">keine Rolle kann Einträge ändern\u003C\u002Ftext>\n  \u003Cpath class=\"fig-flow fig-flow--ok\" d=\"M478 222 V244\"\u002F>\n  \u003Cpath class=\"fig-flow fig-flow--ok\" d=\"M668 222 V244\"\u002F>\n  \u003Crect class=\"fig-box fig-box--ok\" x=\"396\" y=\"244\" width=\"164\" height=\"36\" rx=\"8\"\u002F>\n  \u003Ctext class=\"fig-t\" x=\"478\" y=\"267\" text-anchor=\"middle\">Export CSV · JSON\u003C\u002Ftext>\n  \u003Crect class=\"fig-box fig-box--ok\" x=\"586\" y=\"244\" width=\"164\" height=\"36\" rx=\"8\"\u002F>\n  \u003Ctext class=\"fig-t\" x=\"668\" y=\"267\" text-anchor=\"middle\">SIEM-Webhook\u003C\u002Ftext>\n\u003C\u002Fsvg>\n\u003Cfigcaption>Vier Einträge in einer append-only Kette: Jeder speichert den vorherigen Hash und einen HMAC über sich selbst, sodass ein abgelehnter Aufruf samt Begründung genauso fest steht wie ein erlaubter. Die Kette lässt sich exportieren oder an ein SIEM senden.\u003C\u002Ffigcaption>\n\u003C\u002Ffigure>\n\n\u003Cp>Da Vordix auf der eigenen Infrastruktur des Unternehmens läuft, liegt das Protokoll dort, wo das\nUnternehmen es festlegt, und Vordix als Anbieter ist nicht in den Datenfluss eingebunden.\u003C\u002Fp>\n\u003Cp>Für schreibende Operationen, die ein Vier-Augen-Prinzip brauchen, etwa das Mergen eines Pull\nRequests (siehe \u003Ca href=\"\u002Fde\u002Fblog\u002Fki-code-review-berechtigungen-github-azure-devops\">Berechtigungen für KI Code Review auf GitHub und Azure DevOps\u003C\u002Fa>),\nkann ein Administrator eine Freigaberegel einrichten. Angehaltene Aufrufe erscheinen dann\nebenfalls im Protokoll, zusammen mit der anschließenden Freigabe oder Ablehnung. Beim\nDatenzugriff zeigt dasselbe Protokoll, welche Tabellen und Spalten ein Agent gelesen hat, wie im\nBeitrag \u003Ca href=\"\u002Fde\u002Fblog\u002Fki-agenten-databricks-datenzugriff\">KI-Agenten und Datenzugriff in Databricks\u003C\u002Fa>\nbeschrieben.\u003C\u002Fp>\n\u003Ch2>Grenzen und Abwägungen\u003C\u002Fh2>\n\u003Cp>Ein Audit-Log ist ein notwendiger Teil von Governance, reicht allein aber nicht aus. Einige\nEinschränkungen sollten klar benannt werden.\u003C\u002Fp>\n\u003Cp>Erstens dokumentiert ein Protokoll, es verhindert nichts. Seinen Wert entfaltet es erst zusammen\nmit der Durchsetzung: Eingeschränkte Berechtigungen, Allowlists und Freigaben legen fest, was ein\nAgent tun darf, und das Protokoll belegt, was er tatsächlich getan hat. Ein Protokoll ohne\nDurchsetzung dokumentiert vor allem den Schaden.\u003C\u002Fp>\n\u003Cp>Zweitens kann ein Gateway nur erfassen, was durch das Gateway läuft. Besitzt ein Agent weiterhin\nein direktes API-Token für GitHub, umgehen Aufrufe mit diesem Token das Gateway und fehlen im\nProtokoll. Direkte Zugangsdaten zu entfernen ist daher Teil der Einführung und kein optionaler\nSchritt.\u003C\u002Fp>\n\u003Cp>Drittens ist Vordix nicht zertifiziert, und der Einsatz von Vordix macht ein Unternehmen nicht\nautomatisch konform mit dem AI Act, der DSGVO oder ISO 27001. Die Kontrollen und die Zuordnung\nhelfen dabei, Nachweise zu erbringen. Ob ein konkreter Anwendungsfall ein Hochrisiko-System ist\nund ob die Maßnahmen insgesamt ausreichen, bleibt eine Bewertung des Unternehmens und seiner\nBerater.\u003C\u002Fp>\n\u003Cp>Schließlich ist das Schwärzen eine Abwägung. Je mehr Parameter vor dem Schreiben maskiert werden,\ndesto weniger personenbezogene Daten enthält das Protokoll, desto schwieriger werden aber manche\nAnalysen. Die richtige Balance hängt von den Daten ab, mit denen die Agenten arbeiten, und sollte\ngemeinsam mit dem Datenschutzbeauftragten festgelegt werden.\u003C\u002Fp>\n\u003Ch2>Fazit\u003C\u002Fh2>\n\u003Cp>Ein Audit-Log für KI-Agenten sollte festhalten, wer gehandelt hat, was angefragt wurde, was\nentschieden wurde und warum, und wann das geschah, und zwar für abgelehnte ebenso wie für\nerfolgreiche Aufrufe. Außerdem muss es gegen nachträgliche Änderungen geschützt sein. Für die\nmeisten Agenten in der Softwareentwicklung gelten die Hochrisiko-Pflichten des AI Act nicht\nunmittelbar, doch die Rechenschaftspflicht der DSGVO und die Erwartungen von Kunden führen zur\nselben Anforderung. Wer dieses Protokoll in einer unabhängigen, selbst gehosteten Kontrollinstanz\nführt statt verteilt in den Tools der einzelnen Anbieter, erhält ein vollständiges Protokoll, das\ndem Unternehmen gehört, das dafür verantwortlich ist.\u003C\u002Fp>\n\u003Cp>Die Vordix-Dokumentation beschreibt das Audit-Log im Detail, und in einer Demo lässt es sich mit\nechten Agenten-Aufrufen ansehen.\u003C\u002Fp>\n",{"de":4,"en":19},"ai-agent-audit-trail-eu-ai-act",1790588073351]