Zum Inhalt springen
Zurück zu Tutorials

AI-Coding-Agent-Pipelines absichern: Sandbox-Konfiguration, Berechtigungsgrenzen und automatisierte Review-Gates

Fortgeschritten · 1 hour · 8 Min. Lesezeit · Byte Smith · · Aktualisiert 14. März 2026

Bevor du beginnst

  • GitHub-Actions-Grundkenntnisse (Erstellen und Bearbeiten von Workflow-YAML-Dateien)
  • Vertrautheit mit CI/CD-Konzepten (Pipelines, Jobs, Steps)
  • Docker-Grundkenntnisse (Images erstellen, Container ausfuehren)
  • Ein GitHub-Repository, in dem Sie Actions aktivieren koennen

Was du lernen wirst

  • AI-generierte Pull Requests anhand von Commit-Metadaten und Labels erkennen
  • Eine Policy-as-Code-Datei definieren, die kontrolliert, was AI-Agenten aendern duerfen
  • Automatisierte Sicherheitsscans (Secrets, Abhaengigkeiten, SAST) bei jedem AI-generierten PR ausfuehren
  • Tests in einer isolierten Docker-Sandbox vor dem Merge ausfuehren
  • Einen Risikoscore berechnen und gestufte Review-Anforderungen durchsetzen
  • Strukturierte Audit-Events fuer Compliance und Incident Response ausgeben
1
2
3
4
5
6
7
8
9
10
Auf dieser Seite

Dieses Tutorial fuehrt durch die Einrichtung der ai-code-gate-Pipeline, einem GitHub-Actions-Workflow, der AI-generierte Pull Requests erkennt, Policy-as-Code durchsetzt, Sicherheitsscans ausfuehrt, Tests in einer Sandbox ausfuehrt und Merges nach Risikostufe gated. Fuer die breitere Strategie hinter diesen Kontrollen, siehe den Begleit-Blogpost: Securing AI Coding Agent Workflows.

Das Repository ist modular: Jede Pipeline-Stufe ist eine eigenstaendige Composite Action, die Sie einzeln uebernehmen koennen, und eine geteilte TypeScript-Bibliothek (src/) enthaelt die Policy-Engine, Erkennungslogik und Risikobewertung, die die Actions konsumieren.

Schritt 1: AI-generierte Pull Requests erkennen (10 min)

Bevor Sie spezielle Kontrollen anwenden koennen, muessen Sie wissen, welche Pull Requests von einem AI-Coding-Agenten stammen. Die meisten Agenten hinterlassen Fingerabdruecke in Commit-Metadaten, Autorenfeldern oder PR-Labels. Dieser Schritt baut eine Composite-Detection-Action, die alle drei Signale prueft und ein Output-Flag setzt, das der Rest der Pipeline konsumiert.

Das Detection-Skript erstellen

Das Skript prueft Commit-Trailer auf AI-Co-Author-Muster, bekannte Bot-Benutzernamen und PR-Labels. Wenn ein Signal zutrifft, markiert es den PR als AI-generiert und identifiziert den Agenten.

File: .github/actions/detect-ai-pr/detect.sh

#!/usr/bin/env bash
set -euo pipefail

IS_AI_PR="false"
AGENT_IDENTITY="none"
DETECTED_VIA="none"

# Check commit co-authors
COMMITS=$(git log --format="%B" origin/main..HEAD 2>/dev/null || git log --format="%B" -10)

check_co_author() {
  local pattern="$1"
  local agent="$2"
  if echo "$COMMITS" | grep -qi "Co-Authored-By:.*${pattern}"; then
    IS_AI_PR="true"
    AGENT_IDENTITY="$agent"
    DETECTED_VIA="co-author"
    return 0
  fi
  return 1
}

check_co_author "anthropic\|claude" "claude" ||
check_co_author "copilot\|github" "copilot" ||
check_co_author "cursor" "cursor" ||
check_co_author "codex\|openai" "codex" ||
check_co_author "cody\|sourcegraph" "cody" || true

# Check PR labels
if [ "$IS_AI_PR" = "false" ] && [ -n "${PR_LABELS:-}" ]; then
  IFS=',' read -ra LABELS <<< "$PR_LABELS"
  for label in "${LABELS[@]}"; do
    label_lower=$(echo "$label" | tr '[:upper:]' '[:lower:]')
    case "$label_lower" in
      ai-generated|copilot|claude|cursor|ai-code|bot)
        IS_AI_PR="true"
        DETECTED_VIA="label"
        case "$label_lower" in
          copilot) AGENT_IDENTITY="copilot" ;;
          claude) AGENT_IDENTITY="claude" ;;
          cursor) AGENT_IDENTITY="cursor" ;;
          *) AGENT_IDENTITY="unknown" ;;
        esac
        break
        ;;
    esac
  done
fi

# Check PR author
if [ "$IS_AI_PR" = "false" ] && [ -n "${PR_AUTHOR:-}" ]; then
  case "$PR_AUTHOR" in
    *\[bot\])
      IS_AI_PR="true"
      DETECTED_VIA="author"
      case "$PR_AUTHOR" in
        *copilot*) AGENT_IDENTITY="copilot" ;;
        *claude*) AGENT_IDENTITY="claude" ;;
        *) AGENT_IDENTITY="unknown-bot" ;;
      esac
      ;;
  esac
fi

echo "is_ai_pr=$IS_AI_PR" >> "$GITHUB_OUTPUT"
echo "agent_identity=$AGENT_IDENTITY" >> "$GITHUB_OUTPUT"

echo "::notice::AI PR Detection: is_ai_pr=$IS_AI_PR, agent=$AGENT_IDENTITY, via=$DETECTED_VIA"

Die Erkennungslogik ist auch als TypeScript-Modul in src/detect.ts mit exportierten Funktionen wie detectFromCoAuthors, detectFromLabels und detectFromAuthor verfuegbar. Das Shell-Skript wird in der Composite Action fuer Null-Abhaengigkeits-Ausfuehrung verwendet.

Tipp

Claude Code fuegt standardmaessig einen Co-Authored-By: Claude-Trailer zu jedem Commit hinzu. GitHub Copilot Agent PRs kommen von dedizierten Bot-Konten. Cursor und Aider enthalten typischerweise Tool-Identifikatoren in Commit-Nachrichten. Alle drei Signale zu pruefen gibt Ihnen hohe Abdeckung ohne False Negatives.

Schritt 2: Ihre Policy-Datei definieren (10 min)

Policy-as-Code ist die Grundlage fuer alles andere. Statt sich auf Ad-hoc-Review-Entscheidungen zu verlassen, definieren Sie, was AI-Agenten aendern duerfen, was sie nie beruehren duerfen und wie viel Review verschiedene Risikostufen erfordern.

Die Policy-Datei erstellen

File: .ai-code-gate.yml

detection:
  labels: ["ai-generated", "copilot", "claude"]
  co_authors: ["*[bot]@*", "*noreply@anthropic.com"]

policy:
  allowed_patterns:
    - "src/**/*.ts"
    - "src/**/*.tsx"
    - "tests/**"
    - "docs/**"
  blocked_patterns:
    - "*.env*"
    - "**/auth/**"
    - "docker-compose*.yml"
    - ".github/workflows/**"
  scope_limits:
    max_files: 20
    max_lines_added: 500

review:
  risk_tiers:
    low:
      threshold: 30
      approvals: 0
      auto_merge: true
    medium:
      threshold: 70
      approvals: 1
    high:
      threshold: 100
      approvals: 2
      require_security_team: true

audit:
  enabled: true
  output_format: json
  retention_days: 90

Jeden Abschnitt verstehen

Der detection-Block definiert, welche PR-Labels und Co-Author-Muster einen AI-generierten PR signalisieren. allowed_patterns und blocked_patterns verwenden minimatch-Glob-Syntax, um zu definieren, was ein AI-Agent beruehren darf und was nicht. Wenn ein PR eine Datei aendert, die einem Blocked-Pattern entspricht, schlaegt die Pipeline sofort fehl. scope_limits verhindern, dass ein AI-Agent massive PRs einreicht, die schwer sinnvoll zu reviewen sind. Der review.risk_tiers-Abschnitt bildet Risikoscore-Bereiche auf Approval-Anforderungen ab. Der audit-Abschnitt kontrolliert strukturiertes Event-Logging und Artefakt-Retention.

Warnung

Blockieren Sie CI/CD-Konfigurationsdateien standardmaessig. Ein AI-Agent, der Workflow-YAML aendern kann, kann potenziell seine eigenen Berechtigungen eskalieren oder die Gates deaktivieren, die Sie hier aufbauen.

Schritt 3: Policy-Checks ausfuehren (10 min)

Die Policy-Check-Action liest die Liste geaenderter Dateien von der GitHub-API, vergleicht jede Datei mit den erlaubten und blockierten Mustern, erzwingt Scope-Limits und schreibt ein strukturiertes Ergebnis fuer nachgelagerte Schritte.

Die geteilte Policy-Engine lebt in src/policy.ts und exportiert zwei Schluesselfunktionen:

  • loadPolicyFromString(content) — parst YAML und validiert es gegen das Zod-Schema
  • validateDiff(policy, changedFiles) — prueft jede geaenderte Datei gegen erlaubte/blockierte Muster und Scope-Limits
Tipp

Policy-Verletungen werden als GitHub-Actions-Warnungen protokolliert, sodass Reviewer genau sehen, welche Dateien und Regeln den Fehler ausgeloest haben, ohne Workflow-Logs durchsuchen zu muessen.

Schritt 4: Automatisiertes Sicherheits-Scanning ausfuehren (10 min)

Jeder AI-generierte PR wird auf geleakte Secrets, anfaellige Abhaengigkeiten und haeufige Code-Schwachstellen gescannt. Das Scan-Orchestrierungsskript fuehrt jedes Tool aus, wenn es verfuegbar ist, sammelt Ergebnisse und produziert Pass/Fail-Outputs fuer den Risikobewertungsschritt.

Das Skript ueberspringt elegant Tools, die nicht auf dem Runner installiert sind, mit command -v-Checks. Das bedeutet, Sie koennen die Action sofort verwenden und Tools schrittweise hinzufuegen.

Warnung

Secret-Erkennung ist kritisch, weil ein geleakter Key in einem AI-generierten PR ausgenutzt werden kann, bevor ein menschlicher Reviewer den Diff oeffnet. Selbst ein einzelnes Secret-Finding setzt scan_passed=false und traegt stark zum Risikoscore bei.

Schritt 5: Tests in einer Sandbox ausfuehren (10 min)

Tests von AI-generiertem Code auf nackten Runnern auszufuehren ist riskant. Der Code koennte Netzwerkaufrufe machen, auf geteilte Dateisysteme schreiben oder unbegrenzt Ressourcen verbrauchen. Dieser Schritt baut und fuehrt Tests in einem Docker-Container mit deaktiviertem Netzwerk und begrenzter CPU und Speicher aus.

Das --network=none-Flag verhindert jede ausgehende Verbindung. Die --memory=512m- und --cpus=1-Flags begrenzen die Ressourcennutzung, damit AI-generierter Code nicht unbegrenzt Runner-Ressourcen verbrauchen kann.

Tipp

Die Sandbox fuehrt den bestehenden npm test-Befehl des Repositorys aus. Das sample-app/-Verzeichnis im ai-code-gate-Repository enthaelt eine minimale Express-API, die die Pipeline Ende-zu-Ende demonstriert.

Schritt 6: Risiko berechnen und Review-Gates erzwingen (5 min)

Die Risikobewertung kombiniert Signale aus Policy-Check, Sicherheitsscans und Testergebnissen in einen einzelnen Score. Der Score bildet auf eine Review-Stufe ab, die kontrolliert, wie viele Approvals vor dem Merge erforderlich sind.

Die Risikobewertungslogik lebt in src/risk.ts und verwendet ein gewichtetes, additives Modell mit Pro-Kategorie-Obergrenzen:

KategoriePunkte pro FindingObergrenze
Policy-Verletungen+30 pro Verletung40
Secret-Findings+50 pro Finding50
Abhaengigkeits-Schwachstellen (kritisch)+40 je50 (kombiniert)
Abhaengigkeits-Schwachstellen (hoch)+25 je50 (kombiniert)
SAST-Fehler+20 je40 (kombiniert)
Testfehler+3030
Scope ueberschritten+2020

Die drei Stufen funktionieren wie folgt. LOW (0-30): Der PR wird automatisch gemergt, weil Scans sauber sind, Tests bestehen und der Diff klein ist. MEDIUM (31-70): Mindestens ein menschlicher Reviewer muss vor dem Merge genehmigen. HIGH (71-100): Zwei Reviewer sind erforderlich und einer muss aus dem Sicherheitsteam sein.

Hinweis

Der Risikoscore ist additiv mit Pro-Kategorie-Obergrenzen. Ein einzelnes geleaktes Secret (50 Punkte) plus fehlschlagende Tests (30 Punkte) landet bei 80, weit in der HIGH-Stufe. Das stellt sicher, dass jede Kombination schwerwiegender Findings die strengste Review-Stufe ausloest.

Schritt 7: Workflow und Audit-Logging verdrahten (5 min)

Der Top-Level-Workflow verbindet alle fuenf Composite Actions zu einer Parallel-Job-Pipeline. Policy-Checks, Sicherheitsscans und Sandbox-Tests laufen gleichzeitig nach der Erkennung. Die Risikobewertung laeuft zuletzt, nachdem alle Upstream-Jobs abgeschlossen sind, mit always(), damit sie auch laeuft, wenn ein Upstream-Job fehlschlaegt.

Wichtige architektonische Entscheidungen

Parallele Jobs statt sequentieller Steps. Policy-Checks, Sicherheitsscans und Sandbox-Tests haengen alle nur vom Detect-Job ab, sodass sie gleichzeitig laufen. Das verkuerzt die Wanduhrzeit fuer AI-generierte PRs erheblich im Vergleich zu einer sequentiellen Pipeline.

always() bei der Risikobewertung. Der Risikobewertungsjob laeuft auch wenn Upstream-Jobs fehlschlagen. Wenn Policy-Checks oder Scans fehlschlagen, erhaelt die Risikobewertung 'false' fuer die Outputs des fehlgeschlagenen Jobs und bezieht das in den Score ein.

Audit als Artefakt. Die Risikobewertungs-Action schreibt audit-event.json mit den vollstaendigen Bewertungsdetails. Diese Datei wird als GitHub-Actions-Artefakt mit 90-Tage-Retention hochgeladen.

Tipp

Setzen Sie die Artefakt-Retention auf 90 Tage oder laenger, um die meisten Compliance-Frameworks zu erfuellen.

Individuelle Actions in Ihrem eigenen Repo verwenden

Jede Composite Action kann unabhaengig von jedem Repository referenziert werden. Sie muessen nicht die vollstaendige Pipeline uebernehmen.

Haeufige Einrichtungsprobleme

Gitleaks meldet False Positives bei Test-Fixtures

  • Symptom: Gitleaks markiert Beispiel-API-Keys in Testdateien oder Dokumentation.
  • Loesung: Fuegen Sie eine .gitleaks.toml-Datei mit [allowlist]-Regeln hinzu, die auf spezifische Pfade oder Regex-Muster fuer bekannte Testwerte abzielen.

Docker-Build schlaegt im Sandbox-Schritt fehl

  • Symptom: Das Sandbox-Dockerfile kann keine Abhaengigkeiten installieren oder der Build-Kontext ist zu gross.
  • Loesung: Fuegen Sie eine .dockerignore hinzu, die node_modules, .git, dist und alle Scan-Output-Verzeichnisse ausschliesst.

Erkennung gibt immer false zurueck

  • Symptom: Der is_ai_pr-Output ist immer false, selbst fuer bekannte AI-generierte PRs.
  • Loesung: Stellen Sie fetch-depth: 0 im Checkout-Schritt sicher. Fuer Tools, die keine Trailer hinzufuegen, verwenden Sie PR-Labels als primaeres Erkennungssignal.

Sandbox-Tests laufen in Timeout

  • Symptom: Der Sandbox-Schritt laeuft die volle Dauer und schlaegt dann fehl.
  • Loesung: Konfigurieren Sie Ihren Test-Runner, um Integrationstests zu ueberspringen, die Netzwerkzugriff erfordern. Wenn das Speicherlimit das Problem ist, passen Sie das --memory-Flag an.

Zusammenfassung

Sie haben nun eine vollstaendige AI-Coding-Agent-Governance-Pipeline mit fuenf modularen Composite Actions: AI-generierte PR-Erkennung, Policy-as-Code-Durchsetzung, automatisiertes Sicherheitsscanning, Sandbox-Testausfuehrung und risikogestufte Review-Gates mit strukturiertem Audit-Logging.

Die Pipeline fuehrt Policy-Checks, Sicherheitsscans und Sandbox-Tests parallel aus, kombiniert dann alle Ergebnisse in einen einzelnen Risikoscore, der die Review-Anforderungen bestimmt. Jeder Durchlauf produziert ein strukturiertes Audit-Event, das als GitHub-Actions-Artefakt hochgeladen wird.

Das ai-code-gate auf GitHub-Repository enthaelt alle Actions, geteilten TypeScript-Module, Tests, Beispiel-Policies und den vollstaendigen Workflow. Fuer die breitere Strategie und das Bedrohungsmodell hinter diesen Kontrollen, siehe den Begleit-Blogpost: Securing AI Coding Agent Workflows.

Holen Sie sich die kostenlose AI Code Governance Checklist →

Verwandte Tutorials, die diese Arbeit erweitern:

  • CI/CD mit Sigstore, SLSA, SBOMs haerten behandelt Artefakt-Signierung, Provenance und Supply-Chain-Verifikations-Gates fuer die Artefakte, die Ihre Pipeline produziert.
  • Agentische AI-Apps absichern behandelt Guardrails, Tool-Berechtigungen und Audit-Logging fuer agentische AI-Anwendungen, die Tools aufrufen und Aktionen ausfuehren.

Governance ist die fehlende Schicht zwischen AI-Coding-Tool-Adoption und Enterprise-Readiness. Teams, die AI-generierten Code ohne Erkennung, Policy-Durchsetzung, Sicherheitsscanning, Sandbox-Testing und risikobasiertes Review ausliefern, akzeptieren unquantifiziertes Risiko. Die Pipeline, die Sie hier gebaut haben, macht dieses Risiko sichtbar, messbar und erzwingbar.