Jamf Concepts
ガイド

ガイド

Form to Wipe — n8n Deployment

~4 min read
この記事は役に立ちましたか?

Form to Wipe — n8n Deployment

このガイドは Form to Wipe の n8n 実装をカバーしています。Slack スラッシュコマンドを使用してモーダルを開き、リクエストを Slack DM 経由で承認者にルーティングし、Jamf Platform API 経由でイレースコマンドを送信します。承認者は Microsoft Entra、Okta、または Slack ユーザーグループからソースされます。

前提条件

  • n8n セルフホスト(≥ 1.30)または n8n Cloud
  • 必要なスコープを持つ Slack アプリ(下記ステップ 2 を参照)
  • イレース権限を持つ Jamf Platform API OAuth2 クライアント(Form to Wipe を参照)
  • 以下のいずれか: Microsoft Entra アプリ登録、Okta API トークン、または承認者向けの Slack ユーザーグループ

ステップ 1 — ワークフローをインポート

n8n で: Workflows → Import from fileJamf-FTW-n8n-template.json を選択します。

ワークフローは非アクティブ状態でインポートされます。まだアクティブにしないでください — 認証情報と変数のセットアップを完了してください。

ステップ 2 — 認証情報

ワークフローを接続する前に、Settings → Credentials で以下の認証情報を作成してください。

Slack 認証トークン

  1. api.slack.com/apps で Slack アプリを作成します。

  2. OAuth & PermissionsBot 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 プロキシ(/api/proclassic/...)にフォールバックします。これは同じ Read Computer Groups 権限で対応されています。

  3. クライアントシークレットを生成し、クライアント ID とシークレットをメモします。

  4. n8n で: 新しい OAuth2 API 認証情報を作成します。

    • Grant type: Client Credentials
    • Token URL: https://YOUR_INSTANCE.jamfcloud.com/api/oauth/token
    • Client ID / Secret: 上記のもの
  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 — 変数

Settings → Variables の下で n8n 内に各変数を作成してください。

必須変数

変数 説明
JAMF_TENANT_NAMES Jamf テナント用のカンマ区切り表示名 Production,Staging
JAMF_TENANT_IDS カンマ区切りテナント UUID — 名前と同じ順序 aaaaaaaa-...,bbbbbbbb-...
APPROVER_SOURCE 承認者リストを取得する場所: scimidp、または dev idp
IDP_PROVIDER APPROVER_SOURCE=idp の場合に必須: entra または okta 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. Request URL: https://YOUR_N8N_INSTANCE/webhook/jamf-device-wipe?token=YOUR_WEBHOOK_VERIFY_TOKEN
  4. Short description: Submit a Jamf device wipe request

インタラクティビティ

  1. Slack アプリで: Interactivity & Shortcuts → Turn On
  2. Request URL: https://YOUR_N8N_INSTANCE/webhook/jamf-device-wipe?token=YOUR_WEBHOOK_VERIFY_TOKEN

スラッシュコマンドとインタラクティブコンポーネント(モーダル送信、ボタンクリック)の両方が、クエリパラメータとして検証トークン付きの 同じ webhook URL をポイントする必要があります。

ステップ 5 — アクティベート

  1. n8n でワークフローを開く
  2. 各ノードを認証情報に再リンク(n8n はインポート時に認証情報リンクをクリア)
  3. Activate をクリック
  4. Slack で /device-wipe でテスト

フロー概要

/device-wipe (Slack)
  → Webhook → Verify Token → Parse Webhook
  → Switch on webhook type:
      slash_command       → Open Wipe Request Modal
      view_submission     → Parse Submission → Validate →
                            Resolve Device IDs → Send to Approval
      approver_response   → approve: LOG → Parse → Send Final Confirmation to Requestor
                          → deny:    LOG → DM Requestor
      final_confirmation  → confirm: LOG → Split per-device →
                                          Send Erase Command × N →
                                          Merge Results → DM Results → LOG
                          → cancel:  LOG → DM Requestor
      timeout path        → DM Requestor if no approval within APPROVAL_TIMEOUT_SECONDS

トラブルシューティング

モーダルが開かない スラッシュコマンド Request URL に ?token=YOUR_WEBHOOK_VERIFY_TOKEN が含まれていることを確認します。トークンが一致しないリクエストは 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 変数を設定してください。

この記事は役に立ちましたか?