Jamf Concepts
指南

指南

Form to Wipe — GitHub Actions 部署

~3 min read
這對您有幫助嗎?

Form to Wipe — GitHub Actions 部署

本指南涵蓋 Form to Wipe 的 GitHub Actions 實現。每個清除請求都是一個 Pull Request。分支保護規則強制請求者無法合併自己的 PR。當核准者合併它時,工作流程執行清除指令並將結果作為 PR 註解發佈。整個歷史記錄存在 git 中 — 永久、可搜尋且防篡改。無需基礎設施。

運作方式

1. 請求者使用清除請求範本開啟 Issue
2. 請求者建立分支和 PR 引用該 Issue
3. 同事(不是請求者)審查並合併 PR
4. GitHub Actions 執行:解析 PR 正文、解析裝置 ID、傳送清除指令
5. 結果作為 PR 註解發佈
6. 合併的 PR 是您的稽核日誌

先決條件

  • GitHub 儲存庫(公開或具有 Actions 分鐘的私人)
  • Jamf Platform API OAuth2 用戶端,具有清除特權(參見 Form to Wipe
  • 您 GitHub 組織中的指定核准者團隊

設定

步驟 1 — Fork 或 Clone 儲存庫

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

或將 github-workflow/ 目錄內容複製到您自己的儲存庫根目錄。

步驟 2 — 儲存庫機密

移至 Settings → Secrets and variables → Actions → New repository secret 並新增:

機密
JAMF_CLIENT_ID 您的 Jamf Platform API 用戶端 ID
JAMF_CLIENT_SECRET 您的 Jamf Platform API 用戶端機密
JAMF_TOKEN_URL 權杖端點,例如 https://YOUR_INSTANCE.jamfcloud.com/api/oauth/token
JAMF_REGION useuapac — 決定 API Gateway URL 前置詞

GitHub 機密永遠不會記錄或在工作流程輸出中公開。在執行時檢索的權杖通過 add-mask 被掩蓋。

步驟 3 — 分支保護規則

這是最關鍵的步驟。分支保護是強制沒有人可以核准自己的清除請求的方式。

  1. 移至 Settings → Branches → Add branch protection rule

  2. 分支名稱模式:main(或您的預設分支)

  3. 啟用以下設定:

    設定 必需
    需要 Pull Request 後才能合併
    需要核准 — 設定為 1
    推送新提交時關閉陳舊審查
    需要 Code Owners 的審查 建議
    限制可以關閉 Pull Request 審查的人員 建議
    不允許繞過上述設定 ✅ 關鍵

"不允許繞過" 防止儲存庫管理員合併自己的請求。沒有此設定,管理員可以完全繞過核准。

步驟 4 — CODEOWNERS(建議)

建立 .github/CODEOWNERS 以要求來自特定團隊的審查,用於 requests/ 目錄中的任何檔案:

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

這表示任何涉及 requests/ 的 PR 自動需要來自 jamf-admins 團隊的審查。團隊成員仍然無法核准自己的 PR。

步驟 5 — 建立請求目錄

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

工作流程在 pull_request → closed 事件上觸發,用於任何涉及 requests/**.md 的 PR。

提交清除請求

作為請求者

  1. 開啟 Issue 使用裝置清除請求範本。準確填入所有標籤為的欄位。注意 Issue 編號(例如 #42)。

  2. 建立分支:

    git checkout -b wipe/issue-42-device-wipe
    
  3. 建立請求檔案:

    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. 開啟 Pull Request — 標題:Device Wipe Request — fixes #42。要求同事進行審查。

作為核准者

  1. 審查 PR — 驗證裝置 ID 和原因是否合法
  2. 確認您不是 PR 作者(GitHub 強制執行此操作,但請驗證)
  3. 核准並合併使用合併提交(不是壓縮、不是重新定位 — 合併提交保留完整歷史記錄)
  4. 工作流程在合併時自動執行
  5. 檢查 PR 註解以查看結果

稽核軌跡

每個合併的清除請求 PR 是一個永久稽核記錄,包含:

欄位 來源
誰要求 PR 作者
誰核准 合併者
哪些裝置 PR 正文 / 請求檔案
哪個租戶 PR 正文
何時核准 合併時間戳記
結果 Workflow PR 註解

要搜尋過去的清除:

# 按標籤列出所有合併的清除 PR
gh pr list --label wipe-request --state merged

# 按裝置 ID 搜尋
gh pr list --state merged --search "device 42"

安全考量

  • Jamf Platform API 憑證存在作為儲存庫機密 — 永遠不在工作流程程式碼或請求正文中
  • 分支保護在平台層級防止自我核准
  • CODEOWNERS 確保只有指定的管理員可以核准清除請求
  • 工作流程在執行時驗證請求者 ≠ 核准者作為第二檢查
  • Workflow 結果註解附加到 PR 且事後無法更改
  • requests/ 目錄累積了每個已執行清除的永久、不可改變的記錄

與 n8n 的限制

功能 GitHub Actions n8n
介面 GitHub Issue + PR Slack 模式
即時核准 UX ⚠️ 非同步 PR 審查 ✅ Slack DM
核准超時 ❌ 手動關閉 ✅ 可設定
稽核軌跡 ✅ Git 歷史(不可改變) Slack 通道
需要基礎設施 n8n 實例
多租戶 ✅ 每個請求檔案 ✅ 每個下拉清單
成本 免費(公開)/ Actions 分鐘數 n8n 許可證
這對您有幫助嗎?