Jamf Concepts
Anleitungen

Anleitungen

Form to Wipe — GitHub Actions Deployment

~5 min read
War das hilfreich?

Form to Wipe — GitHub Actions Deployment

Dieses Handbuch behandelt die GitHub Actions-Implementierung von Form to Wipe. Jede Löschanfrage ist ein Pull Request. Branch-Schutzregeln erzwingen, dass der Anfragender seinen eigenen PR nicht zusammenführen kann. Wenn ein Genehmiger ihn zusammenführt, führt der Workflow den Löschbefehl aus und postet Ergebnisse als PR-Kommentar. Die gesamte Historie befindet sich in Git — dauerhaft, durchsuchbar und fälschungssicher. Keine Infrastruktur erforderlich.

Funktionsweise

1. Anfragender öffnet ein Issue mithilfe der Wipe Request-Vorlage
2. Anfragender erstellt einen Branch und PR, der auf das Issue verweist
3. Ein Kollege (nicht der Anfragender) überprüft und führt den PR zusammen
4. GitHub Actions läuft: analysiert PR-Body, löst Geräte-IDs auf, sendet Löschbefehle
5. Ergebnisse werden als PR-Kommentar gepostet
6. Der zusammengeführte PR ist Ihr Audit-Log

Voraussetzungen

  • GitHub-Repository (öffentlich oder privat mit Actions-Minuten)
  • Jamf Platform API OAuth2-Client mit Löschberechtigungen (siehe Form to Wipe)
  • Ein designiertes Genehmiger-Team in Ihrer GitHub-Organisation

Setup

Schritt 1 — Repository forken oder klonen

git clone https://github.com/YOUR_ORG/FTW-Form-to-Wipe.git
cd FTW-Form-to-Wipe

Oder kopieren Sie den Inhalt des Verzeichnisses github-workflow/ in Ihr Repository-Root.

Schritt 2 — Repository-Geheimnisse

Gehen Sie zu Settings → Secrets and variables → Actions → New repository secret und fügen Sie hinzu:

Secret Wert
JAMF_CLIENT_ID Ihre Jamf Platform API-Client-ID
JAMF_CLIENT_SECRET Ihr Jamf Platform API-Client-Secret
JAMF_TOKEN_URL Token-Endpoint, z.B. https://YOUR_INSTANCE.jamfcloud.com/api/oauth/token
JAMF_REGION us, eu oder apac — bestimmt das API Gateway URL-Präfix

GitHub-Geheimnisse werden niemals in Workflow-Ausgabe protokolliert oder offengelegt. Das zur Laufzeit abgerufene Token wird über add-mask maskiert.

Schritt 3 — Branch-Schutzregeln

Dies ist der kritischste Schritt. Branch-Schutz ist es, was erzwingt, dass niemand seine eigene Löschanfrage genehmigen kann.

  1. Gehen Sie zu Settings → Branches → Add branch protection rule

  2. Branch-Name-Muster: main (oder Ihr Standard-Branch)

  3. Aktivieren Sie die folgenden Einstellungen:

    Einstellung Erforderlich
    Require a pull request before merging
    Require approvals — auf 1 gesetzt
    Dismiss stale reviews when new commits are pushed
    Require review from Code Owners Empfohlen
    Restrict who can dismiss pull request reviews Empfohlen
    Do not allow bypassing the above settings ✅ Kritisch

"Do not allow bypassing" verhindert, dass Repository-Admins ihre eigenen Anfragen zusammenführen. Ohne diese Einstellung können Admins die Genehmigung vollständig umgehen.

Schritt 4 — CODEOWNERS (Empfohlen)

Erstellen Sie .github/CODEOWNERS, um eine Überprüfung durch ein bestimmtes Team für jede Datei im Verzeichnis requests/ zu erfordern:

# .github/CODEOWNERS
requests/   @your-org/jamf-admins

Dies bedeutet, dass jeder PR, der requests/ berührt, automatisch eine Überprüfung vom Team jamf-admins erfordert. Mitglieder des Teams können immer noch nicht ihre eigenen PRs genehmigen.

Schritt 5 — Anfrageverzeichnis erstellen

mkdir requests
echo "# Wipe Requests\n\nMerged PRs in this directory represent executed device wipes." > requests/README.md
git add requests/
git commit -m "Add requests directory"
git push

Der Workflow wird bei pull_request → closed-Ereignissen für jeden PR ausgelöst, der requests/**.md berührt.

Einreichen einer Löschanfrage

Als Anfragender

  1. Öffnen Sie ein Issue mithilfe der Device Wipe Request-Vorlage. Füllen Sie alle Felder genau wie beschriftet aus. Beachten Sie die Issue-Nummer (z.B. #42).

  2. Erstellen Sie einen Branch:

    git checkout -b wipe/issue-42-device-wipe
    
  3. Erstellen Sie die Anfragedatei:

    cat > requests/wipe-$(date +%Y%m%d-%H%M%S).md << 'EOF'
    **Tenant Name:** Production
    **Tenant ID:** aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
    **Device Type:** computer
    **Device IDs:** 42,87
    **Reason:** Employee offboarding — devices not returned
    **Find My PIN:**
    EOF
    
    git add requests/
    git commit -m "Wipe request for devices 42, 87 - fixes #42"
    git push -u origin wipe/issue-42-device-wipe
    
  4. Öffnen Sie einen Pull Request — Titel: Device Wipe Request — fixes #42. Fordern Sie eine Überprüfung von einem Kollegen an.

Als Genehmiger

  1. Überprüfen Sie den PR — verifizieren Sie, dass die Geräte-IDs und der Grund legitim sind
  2. Bestätigen Sie, dass Sie nicht der PR-Autor sind (GitHub erzwingt dies, aber überprüfen Sie)
  3. Genehmigen und Führen zusammen, indem Sie einen Merge-Commit verwenden (nicht Squash, nicht Rebase — Merge-Commit bewahrt die vollständige Historie)
  4. Der Workflow wird automatisch beim Zusammenführen ausgeführt
  5. Überprüfen Sie die PR-Kommentare auf Ergebnisse

Audit-Trail

Jeder zusammengeführte Löschanfrage-PR ist ein permanenter Audit-Datensatz, der Folgendes enthält:

Feld Quelle
Wer angefordert hat PR-Autor
Wer genehmigt hat Zusammengeführt von
Welche Geräte PR-Body / Anfragedatei
Welcher Tenant PR-Body
Wann genehmigt Zeitstempel zusammenführen
Ergebnis Workflow PR-Kommentar

So durchsuchen Sie frühere Löschungen:

# Liste alle zusammengeführten Wipe-PRs nach Label auf
gh pr list --label wipe-request --state merged

# Nach Geräte-ID suchen
gh pr list --state merged --search "device 42"

Sicherheitsüberlegungen

  • Jamf Platform API-Credentials live als Repository-Geheimnisse — niemals in Workflow-Code oder Request-Bodies
  • Branch-Schutz verhindert Selbstgenehmigung auf der Plattformebene
  • CODEOWNERS stellt sicher, dass nur designierte Admins Löschanfragen genehmigen können
  • Der Workflow überprüft Anfragender ≠ Genehmiger zur Laufzeit als zweite Kontrolle
  • Workflow-Ergebnis-Kommentare werden dem PR angehängt und können nach der Tatsache nicht geändert werden
  • Das Verzeichnis requests/ sammelt einen permanenten, unveränderlichen Datensatz jeder ausgeführten Löschung

Einschränkungen vs. n8n

Feature GitHub Actions n8n
Oberfläche GitHub Issue + PR Slack-Modal
Real-time-Genehmigungs-UX ⚠️ Async PR-Review ✅ Slack DM
Genehmigungs-Timeout ❌ Manuelle Schließung ✅ Konfigurierbar
Audit-Trail ✅ Git-Verlauf (unveränderlich) Slack-Kanal
Erforderliche Infrastruktur Keine n8n-Instanz
Multi-Tenant ✅ Pro Anfragedatei ✅ Pro Dropdown
Kosten Kostenlos (öffentlich) / Actions-Minuten n8n-Lizenz
War das hilfreich?