목록으로

Programming Notes

# Entra 헬프데스크 포털 소개: 1단계 지원을 위한 제로 트러스트, 도커 기반 ITSM 인터페이스

안녕하세요 여러분,

Microsoft Entra ID에서 엔터프라이즈 규모의 ID를 관리하신다면, 일상적인 운영 작업(비밀번호 재설정, 세션 해지, MFA 관리 등)을 1단계 및 2단계 지원 직원에게 위임하는 것이 본질적으로 위험하다는 점을 잘 아실 겁니다.

기본 Azure/Entra 포털은 매우 강력하지만, 복잡하고 필수적인 ITSM 적용 기능이 부족합니다. 헬프데스크 기술자에게 "헬프데스크 관리자" 역할을 부여하면, 클릭 한 번의 실수로도 큰 문제를 일으킬 수 있는 포털에 접근 권한을 주는 셈입니다.

이러한 문제를 해결하기 위해, 저는 지원팀과 Entra ID 테넌트 사이에 격리된 "에어록" 역할을 하도록 설계된 오픈 소스 컨테이너형 애플리케이션인 **Entra 헬프데스크 포털 (커뮤니티 에디션)**을 개발했습니다.

이미지

테넌트에 가치를 더하는 이유

기술자들이 Azure 포털에 로그인하는 대신, 이 깔끔한 머티리얼 디자인 웹 인터페이스에 로그인하게 됩니다. 이 포털은 백엔드 서비스 주체(MSAL 및 Graph API 사용)를 활용하여 기술자들을 대신하여 명령을 실행합니다.

  1. 엄격한 제로 트러스트: Microsoft SSO를 통한 로그인만으로는 충분하지 않습니다. 앱은 토큰을 가로채 사용자 UPN을 Docker 환경 파일에 하드코딩된 ALLOWED_ADMINS 화이트리스트와 대조하여 확인합니다.
  2. 필수 ITSM 티켓팅: 기본 Azure 포털에서는 티켓팅을 강제할 수 없습니다. 이 앱에서는 모든 쓰기 작업에 대해 유효한 티켓 번호(예: INC-123456)를 요구하는 모달이 나타납니다.
  3. 로컬 감사 로깅: 모든 작업은 작업자, 타임스탬프, 티켓 번호와 함께 컨테이너 볼륨 내부의 변경 불가능한 로컬 SQLite 데이터베이스(audit.db)에 기록됩니다.
  4. 성능: 과도한 Graph API 읽기는 TTL(Time-To-Live) 및 스마트 무효화 기능을 통해 메모리에 캐시됩니다. 사용자 검색 또는 엔터프라이즈 앱 로딩은 밀리초 단위로 이루어집니다.

이미지

주요 기능

  • ID 라이프사이클: 사용자 생성, 안전한 16자리 비밀번호 자동 생성, 로그인 세션 해지, 비밀번호 재설정, 특정 MFA 방법 삭제를 통한 재등록 강제.
  • 진단: 사용자의 최근 5개 로그인 로그를 확인하고, Microsoft 오류 코드를 일반적인 영어로 번역하여 표시합니다.
  • 그룹 관리: 보안 그룹 및 M365 그룹에 멤버를 추가/제거합니다.
  • 앱/SPN 관리: raw requiredResourceAccess Graph API 페이로드를 지연 로드하여 앱 권한을 감사하고, 클라이언트 암호를 즉시 교체합니다.
  • 범용 복원: 모든 소프트 삭제된 항목의 개체 ID를 휴지통 탭에 붙여넣어 즉시 복원합니다.

이미지

설정은 얼마나 쉬울까요?

저는 이 포털이 범용적으로 배포될 수 있도록 멀티 아키텍처 Docker 이미지(linux/amd64 및 linux/arm64)로 컴파일했습니다. 거대한 Windows Server에서도, 간단한 Raspberry Pi에서도 실행될 수 있습니다.

5분 안에 설정 완료:

  1. Entra ID에 앱 등록을 생성하고 필요한 Graph API 애플리케이션 권한(예: User.ReadWrite.All, AuditLog.Read.All)을 부여합니다.
  2. docker-compose.yml 파일을 생성합니다.
  3. 기능 토글을 정의합니다. 환경 변수를 false로 설정하여 사용자 삭제와 같은 기능을 말 그대로 끌 수 있습니다.
version: '3.8'

services:
  helpdesk-portal:
    image: jahmed22/entra-helpdesk:latest
    container_name: entra_helpdesk
    restart: unless-stopped
    ports:
      - "8000:8000"
    environment:
      # CORE IDENTITY
      - TENANT_ID=your_tenant_id_here
      - CLIENT_ID=your_client_id_here
      - CLIENT_SECRET=your_client_secret_here
      - BASE_URL=https://entradesk.jahmed.cloud
      - ALLOWED_ADMINS=개인 정보 보호를 위해 이메일 주소 제거됨
      
      # CUSTOMIZATION & FEATURE FLAGS
      - APP_NAME=Entra Help Desk
      - ENABLE_PASSWORD_RESET=true
      - ENABLE_MFA_MANAGEMENT=true
      - ENABLE_USER_DELETION=false
      - ENABLE_GROUP_MANAGEMENT=true
      - ENABLE_APP_MANAGEMENT=true

    volumes:
      - entra_helpdesk_data:/app/static/uploads
      - entra_helpdesk_db:/app

volumes:
  entra_helpdesk_data:
  entra_helpdesk_db:
  1. docker compose up -d를 실행하면 완료됩니다!

저는 이 포털을 커뮤니티에 기여하고 1단계 운영 보안을 돕기 위해 만들었습니다. 개발 테넌트에서 테스트해 보거나 전체 아키텍처 설명을 확인하고 싶으시다면, 제 웹사이트에서 여기에서 전체 문서를 읽어보실 수 있습니다.

여러분의 생각, 피드백, 또는 기능 요청이 있다면 기꺼이 듣고 싶습니다!