Jamf Concepts
指南

指南

Form to Wipe — n8n 部署

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

Form to Wipe — n8n 部署

本指南涵蓋 Form to Wipe 的 n8n 實現。它使用 Slack 斜線命令開啟模式、通過 Slack DM 將請求路由到核准者,並通過 Jamf Platform API 傳送清除指令。核准者可以來自 Microsoft Entra、Okta 或 Slack 使用者群組。

先決條件

  • n8n 自託管(≥ 1.30)或 n8n 雲端
  • 具有必需範圍的 Slack 應用程式(參見下面的步驟 2)
  • Jamf Platform API OAuth2 用戶端,具有清除特權(參見 Form to Wipe
  • 其中之一:Microsoft Entra 應用程式註冊、Okta API 權杖或核准者的 Slack 使用者群組

步驟 1 — 匯入工作流程

在 n8n 中:Workflows → Import from file → 選擇 Jamf-FTW-n8n-template.json

工作流程匯入為非活動。暫時不啟動 — 先完成憑證和變數設定。

步驟 2 — 憑證

在連接工作流程前,在 Settings → Credentials 中建立以下憑證。

Slack Auth Token

  1. api.slack.com/apps 建立 Slack 應用程式

  2. OAuth & Permissions 下新增以下 Bot Token Scopes

    範圍 目的
    commands 接收斜線命令
    chat:write 傳送 DM 和通道訊息
    chat:delete 決定後清理核准訊息
    users:read 依 ID 查詢使用者
    users:read.email 依電子郵件查詢使用者(Okta/Entra 路徑)
    usergroups:read 讀取 Slack 使用者群組成員資格
    views:open 開啟模式
    views:update 驗證錯誤時更新模式
  3. 將應用程式安裝到您的工作區並複製 Bot User OAuth Token

  4. 在 n8n 中:建立新的 HTTP Bearer Auth 憑證、貼上權杖、命名為 Slack Auth Token

Jamf Platform API

  1. 在 Jamf Pro 中:Settings → API roles and clients → API Clients → New

  2. 指派具有 Form to Wipe 中列出的特權的角色

    靜態電腦群組注意事項: Platform API 沒有原生的靜態電腦群組成員資格端點。工作流程回落到 Classic API proxy (/api/proclassic/...),由相同的 Read Computer Groups 特權涵蓋。

  3. 生成用戶端機密並注意用戶端 ID 和機密

  4. 在 n8n 中:建立新的 OAuth2 API 憑證:

    • 授予類型:Client Credentials
    • 權杖 URL:https://YOUR_INSTANCE.jamfcloud.com/api/oauth/token
    • 用戶端 ID / 機密:來自上方
  5. 命名為 Jamf Platform API

API Gateway 存取: 工作流程也呼叫 Jamf Platform API Gateway (apigw.jamf.com)。如果您無法存取,請聯絡您的 Jamf 代表。

Okta API — 僅當 IDP_PROVIDER = okta

  1. 在 Okta 中:Security → API → Tokens → Create Token
  2. 在 n8n 中:使用您的 Okta 網域和權杖建立新的 Okta API 憑證
  3. 命名為 Okta account

Microsoft Entra — 僅當 IDP_PROVIDER = entra

  1. 在 Azure 中:App registrations → New registration
  2. 新增 API 權限:GroupMember.Read.All(應用程式類型)並授予管理員同意
  3. 建立用戶端機密
  4. 在 n8n 中:建立新的 Microsoft Entra OAuth2 憑證
  5. 命名為 Microsoft Entra ID (Azure Active Directory) account

步驟 3 — 變數

在 n8n 中的 Settings → Variables 下建立每個變數。

必需變數

變數 說明 範例
JAMF_TENANT_NAMES 您 Jamf 租戶的以逗號分隔的顯示名稱 Production,Staging
JAMF_TENANT_IDS 以逗號分隔的租戶 UUID — 與名稱相同的順序 aaaaaaaa-...,bbbbbbbb-...
APPROVER_SOURCE 從何處提取核准者清單:scimidpdev idp
IDP_PROVIDER APPROVER_SOURCE=idp 時必需:entraokta entra
APPROVAL_TIMEOUT_SECONDS 請求過期前的時間長度 3600
AUDIT_LOG_CHANNEL_ID 所有稽核事件的 Slack 通道 ID C0123456789
WEBHOOK_VERIFY_TOKEN UUID 或隨機機密 — 也在 Slack 斜線命令 URL 中設定 your-secret-uuid

按核准者來源的變數

如果 APPROVER_SOURCE = scim(Slack 使用者群組):

變數
APPROVER_USERGROUP_ID Slack 使用者群組 ID — 格式:S0XXXXXXXX

如果 APPROVER_SOURCE = idp + IDP_PROVIDER = okta

變數
IDP_OKTA_GROUP_ID Okta 群組 ID — 格式:00gXXXXXX
IDP_OKTA_SLACK_EMAIL_FIELD 用於 Slack 電子郵件查詢的設定檔欄位(通常 email

如果 APPROVER_SOURCE = idp + IDP_PROVIDER = entra

變數
ENTRA_APPROVER_GROUP_ID 您核准者群組的 Azure AD 物件 ID

如果 APPROVER_SOURCE = dev(替代 Slack 使用者群組,用於測試):

變數
DEV_APPROVER_USERGROUP_ID 開發/測試核准者的 Slack 使用者群組 ID

多租戶配置

JAMF_TENANT_NAMESJAMF_TENANT_IDS 變數必須按相同順序 — 名稱的索引 0 對應到 ID 的索引 0。Slack 模式中的租戶下拉清單在執行時從這些變數動態建立;不需要按租戶的額外配置。

API Gateway 區域: 工作流程預設為 us.apigw.jamf.com。如果您的租戶在 EU 或 APAC,在 Find Group + Build Members URLDetermine Management Id Lookup URL 程式碼節點中更新 REGION 常數。

步驟 4 — Slack 應用程式設定

斜線命令

  1. 在您的 Slack 應用程式中:Slash Commands → Create New Command
  2. 命令:/device-wipe(或您偏好的名稱)
  3. 請求 URL:https://YOUR_N8N_INSTANCE/webhook/jamf-device-wipe?token=YOUR_WEBHOOK_VERIFY_TOKEN
  4. 簡短說明:Submit a Jamf device wipe request

互動性

  1. 在您的 Slack 應用程式中:Interactivity & Shortcuts → Turn On
  2. 請求 URL:https://YOUR_N8N_INSTANCE/webhook/jamf-device-wipe?token=YOUR_WEBHOOK_VERIFY_TOKEN

斜線命令和互動式元件(模式提交、按鈕點擊)都必須指向相同的 webhook URL,並以您的驗證權杖作為查詢參數。

步驟 5 — 啟動

  1. 在 n8n 中開啟工作流程
  2. 將每個節點重新連結到其憑證(n8n 在匯入時清除憑證連結)
  3. 按一下啟動
  4. 在 Slack 中使用 /device-wipe 測試

流程摘要

/device-wipe (Slack)
  → Webhook → 驗證權杖 → 解析 Webhook
  → 按 webhook 類型切換:
      slash_command       → 開啟清除請求模式
      view_submission     → 解析提交 → 驗證 →
                            解析裝置 ID → 傳送到核准
      approver_response   → 核准:記錄 → 解析 → 向請求者傳送最終確認
                          → 拒絕:    記錄 → DM 請求者
      final_confirmation  → 確認:記錄 → 每個裝置分割 →
                                          傳送清除指令 × N →
                                          合併結果 → DM 結果 → 記錄
                          → 取消:  記錄 → DM 請求者
      timeout path        → 如果 APPROVAL_TIMEOUT_SECONDS 內沒有核准,DM 請求者

故障排除

模式不開啟 驗證斜線命令請求 URL 包含 ?token=YOUR_WEBHOOK_VERIFY_TOKEN。驗證權杖節點拒絕權杖不符的請求。

核准者清單為空

  • scim:確認 APPROVER_USERGROUP_ID 正確且 Slack 應用程式具有 usergroups:read
  • okta:確認 IDP_OKTA_GROUP_ID 且 Okta 憑證具有群組讀取存取
  • entra:確認 ENTRA_APPROVER_GROUP_ID 且 Entra 應用程式具有 GroupMember.Read.All

清除指令返回 4xx 確認 Jamf Platform API 憑證具有清除特權且您使用正確的 API Gateway 區域。

租戶下拉清單顯示預留位置值 在啟動工作流程前設定 JAMF_TENANT_NAMESJAMF_TENANT_IDS 變數。

這對您有幫助嗎?