Jamf Concepts
가이드

가이드

Form to Wipe — n8n 배포

~5 min read
도움이 되었나요?

Form to Wipe — n8n 배포

이 가이드는 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 & 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 프록시 (/api/proclassic/...)로 폴백하며, 이는 Read Computer Groups 권한으로 적용됩니다.

  3. 클라이언트 시크릿을 생성하고 Client ID 및 Secret을 기록합니다

  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 (Application 유형) 및 관리자 동의 부여
  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 승인자 목록을 가져올 위치: scim, idp 또는 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 Object 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. 짧은 설명: 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 변수를 설정합니다.

도움이 되었나요?