Jamf Concepts
Handleidingen

Handleidingen

Form to Wipe — GitHub Actions Deployment

~5 min read
Was dit nuttig?

Form to Wipe — GitHub Actions Deployment

Deze gids behandelt de GitHub Actions-implementatie van Form to Wipe. Elk verwijderingsverzoek is een Pull Request. Branch protection-regels dwingen af dat de aanvrager zijn eigen PR niet kan samenvoegen. Wanneer een fiatteur deze samenvat, voert de werkstroom het wiscommando uit en post de resultaten als PR-opmerking. De volledige geschiedenis leeft in git — permanent, doorzoekbaar en vervalsingsvast. Geen infrastructuur vereist.

Hoe het werkt

1. Aanvrager opent een Issue met de Wipe Request-sjabloon
2. Aanvrager maakt een branch en PR met verwijzing naar de issue
3. Een teamgenoot (niet de aanvrager) beoordeelt en voegt de PR samen
4. GitHub Actions uitvoert: parseert de PR-body, lost apparaat-ID's op, stuurt wiscommando's
5. Resultaten worden gepost als PR-opmerking
6. De samengevoegde PR is uw auditlogboek

Vereisten

  • GitHub-repository (public of private met Actions minuten)
  • Jamf Platform API OAuth2-client met wisrechten (zie Form to Wipe)
  • Een aangewezen goedkeuringsteam in uw GitHub-organisatie

Instelling

Stap 1 — Fork of Clone de Repo

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

Of kopieer de inhoud van de github-workflow/ directory naar uw eigen repo root.

Stap 2 — Repository Secrets

Ga naar Settings → Secrets and variables → Actions → New repository secret en voeg toe:

Secret Waarde
JAMF_CLIENT_ID Uw Jamf Platform API client ID
JAMF_CLIENT_SECRET Uw Jamf Platform API client secret
JAMF_TOKEN_URL Token endpoint, bijv. https://YOUR_INSTANCE.jamfcloud.com/api/oauth/token
JAMF_REGION us, eu of apac — bepaalt het API Gateway URL-voorvoegsel

GitHub-secrets worden nooit vastgelegd of onthuld in workflowoutput. Het token dat in runtime wordt opgehaald, wordt gemaskeerd via add-mask.

Stap 3 — Branch Protection Regels

Dit is de meest kritieke stap. Branch protection is wat afdwingt dat niemand zijn eigen verwijderingsverzoek kan goedkeuren.

  1. Ga naar Settings → Branches → Add branch protection rule

  2. Branch naampatroon: main (of uw standaardbranch)

  3. Schakel de volgende instellingen in:

    Instelling Vereist
    Require a pull request before merging
    Require approvals — set to 1
    Dismiss stale reviews when new commits are pushed
    Require review from Code Owners Aanbevolen
    Restrict who can dismiss pull request reviews Aanbevolen
    Do not allow bypassing the above settings ✅ Kritiek

"Do not allow bypassing" voorkomt dat repository-admins hun eigen verzoeken samenvoegen. Zonder deze instelling kunnen admins goedkeuring volledig omzeilen.

Stap 4 — CODEOWNERS (Aanbevolen)

Maak .github/CODEOWNERS aan om beoordeling van een specifiek team voor elk bestand in de requests/ directory:

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

Dit betekent dat elke PR die requests/ aanraakt automatisch een beoordeling van het jamf-admins team vereist. Teamleden kunnen hun eigen PR's nog steeds niet goedkeuren.

Stap 5 — Verzoekendirectory maken

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

De werkstroom wordt geactiveerd bij pull_request → closed events voor elke PR die requests/**.md aanraakt.

Een verwijderingsverzoek indienen

Als aanvrager

  1. Open een Issue met de Device Wipe Request-sjabloon. Vul alle velden nauwkeurig in. Noteer het issue-nummer (bijv. #42).

  2. Maak een branch:

    git checkout -b wipe/issue-42-device-wipe
    
  3. Maak het verzoekbestand aan:

    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. Open een Pull Request — titel: Device Wipe Request — fixes #42. Vraag beoordeling aan van een teamgenoot.

Als fiatteur

  1. Beoordeel de PR — controleer of de apparaat-ID's en reden legitiem zijn
  2. Bevestig dat u niet de PR-auteur bent (GitHub dwingt dit af, maar controleer)
  3. Goedkeuren en Merge met merge commit (niet squash, niet rebase — merge commit behoudt de volledige history)
  4. De werkstroom wordt automatisch bij merge uitgevoerd
  5. Controleer de PR-opmerkingen voor resultaten

Audittrail

Elke samengevoegde verwijderingsverzoek PR is een permanent auditrecord met:

Veld Bron
Wie aangevraagd PR-auteur
Wie goedgekeurd Samengevoegd door
Welke apparaten PR-body / verzoekbestand
Welke tenant PR-body
Wanneer goedgekeurd Merge-timestamp
Resultaat Workflow PR-opmerking

Zo zoekt u eerdere wisen:

# Lijsten alle samengevoegde wipe-PR's op label
gh pr list --label wipe-request --state merged

# Zoeken op apparaat-ID
gh pr list --state merged --search "device 42"

Beveiligingsoverwegingen

  • Jamf Platform API-inloggegevens staan als repository secrets — nooit in workflowcode of verzoekbodies
  • Branch protection voorkomt zelfgoedkeuring op platformniveau
  • CODEOWNERS zorgt ervoor dat alleen aangewezen admins verwijderingsverzoeken kunnen goedkeuren
  • De werkstroom valideert aanvrager ≠ fiatteur bij runtime als tweede controle
  • Workflow resultaatkommentaren worden aan de PR toegevoegd en kunnen later niet worden gewijzigd
  • De requests/ directory verzamelt een permanent, onveranderbaar record van elke uitgevoerde wis

Beperkingen vs. n8n

Functie GitHub Actions n8n
Interface GitHub Issue + PR Slack modal
Real-time approval UX ⚠️ Asynchrone PR review ✅ Slack DM
Approval timeout ❌ Handmatig sluiten ✅ Configureerbaar
Audittrail ✅ Git history (onveranderbaar) Slack kanaal
Vereiste infrastructuur Geen n8n instantie
Multi-tenant ✅ Per verzoekbestand ✅ Per vervolgkeuzelijst
Kosten Gratis (public) / Actions minuten n8n licentie
Was dit nuttig?