Microsoft Graph로 M365 컴플라이언스 사각지대 찾기
By Mirko Peters ·
팟캐스트와 함께 제공되는 기술 블로그에 다시 오신 것을 환영합니다! 기본 제공되는 Microsoft 365 컴플라이언스 대시보드를 신뢰하면서 모든 항목이 완전히 반영되었다고 생각하셨다면, 실제로는 잘못된 안도감에 빠져 있을 수 있습니다…
Automatically translated with AI from the original post. Read the English original
팟캐스트와 함께 제공되는 기술 블로그에 다시 오신 것을 환영합니다! 기본 제공되는 Microsoft 365 컴플라이언스 대시보드를 신뢰하면서 모든 항목이 완전히 반영되었다고 생각하셨다면, 잘못된 안도감에 빠져 있을 수 있습니다. 기본 컴플라이언스 대시보드는 요약 보기로 설계된 것이지, 모든 사실을 보여주는 자료가 아닙니다. 데이터 손실 방지(DLP) 탐지 항목, eDiscovery 작업, 기반 보안 경고 같은 중요한 신호는 대부분 별도의 권한, 고급 쿼리 매개 변수, 적절한 데이터 연결이 필요한 Microsoft Graph 엔드포인트 뒤에 있습니다. 이번 심층 분석에서는 기본 보고서에 중요한 정보가 빠져 있는 이유를 살펴보고, 쿼리해야 할 Graph 엔드포인트를 정리한 다음, 그 원시 증거를 Microsoft Purview로 직접 보내 명확하고 근거가 분명한 보고서를 만드는 방법을 보여 드리겠습니다. 이 주제에 대한 전체 논의는 관련 팟캐스트 에피소드 Find Missing Microsoft 365 Compliance Data with Graph에서 들으실 수 있습니다.
개요
기본 컴플라이언스 대시보드는 진실이 아니라 요약입니다. 중요한 신호(DLP 탐지, eDiscovery 작업, 보안 경고)는 별도 권한이 필요한 Graph 엔드포인트 뒤에 있는 경우가 많습니다. 이 글에서는 정확한 API, 범위, 스크립팅 패턴을 정리하여 완전한 품질의 증거를 추출하고, 이를 Purview에 모아 명확하고 근거가 분명한 보고를 할 수 있도록 안내합니다.
이 글이 도움이 되는 대상
감사에 대응할 수 있는 증거가 필요한 컴플라이언스, 법무, 위험 관리 담당자
보고 및 자동화를 구축하는 M365 및 Entra 관리자
DLP, eDiscovery, 경고 텔레메트리를 상관 분석하는 보안 팀
놓치기 쉬운 부분(OOTB 대시보드가 놓치는 이유)
집계 및 지연: UI 요약에는 중첩된 인시던트 세부 정보와 최근 활동이 빠져 있습니다.
범위 공백: eDiscovery 작업이나 DLP 일치 항목이 표준 내보내기 범위 밖에 있을 수 있습니다.
권한 분리: /security 및 /compliance 엔드포인트는 서로 다른 범위를 요구합니다.
조인 불가: 대시보드에서는 인시던트를 사용자, 보관 대상자(custodian), 케이스 단계와 연결하는 경우가 드뭅니다.
활용도가 높은 Graph 엔드포인트(복사해서 사용하는 목록)
보안 경고(범위 확인용)
엔드포인트:
/security/alerts또는/security/alerts_v2앱 권한(예):
SecurityEvents.Read.All(최신 모델에서는 Alerts.Read.All)용도: 경고 타임라인, 심각도, 상태, 할당 확인
DLP 정책 및 활동(데이터 손실)
엔드포인트(테넌트에 따라 사용 가능 여부가 다름):
/security/dataLossPreventionPolicies(정책 목록)/security/dlpIncidents또는 보안 네임스페이스의 고급 DLP 인시던트 엔드포인트(테넌트에 따라 다름)
앱 권한:
SecurityEvents.Read.All(및/또는 사용 가능한 경우 특정 DLP 읽기 범위)용도: 일치 항목, 위치(Exchange/SharePoint/Teams), 처리 결과 확인
eDiscovery(케이스 및 작업)
/compliance/ediscovery/cases하위 경로:
/custodians,/searches,/reviewSets,/noncustodialDataSources,/operations앱 권한:
eDiscovery.Read.All(케이스를 관리하는 경우 쓰기 권한 포함)용도: 케이스 상태, 보존 보류, 보관 대상자, 내보내기, 검토자 작업 확인
감사 및 로그인 컨텍스트(보조 증거)
/auditLogs/directoryAudits,/auditLogs/signIns앱 권한:
AuditLog.Read.All,Directory.Read.All용도: 누가 언제 무엇을 변경했는지, 세션 컨텍스트 확인
팁: 많은 컴플라이언스 페이로드는 깊게 중첩되어 있으므로
$expand를 사용하고,@odata.nextLink로 페이징하며, 표시 이름과 부서를 얻기 위해/users/{id}와 조인하는 방식을 계획하십시오.
인증 및 권한(문제없이 설정하는 방법)
무인 작업에는 애플리케이션 권한(서비스 주체)을 사용하십시오.
조직에서 권한 분리가 필요한 경우 보안용과 핵심 Graph용 앱을 따로 등록하십시오.
최소 권한 범위에만 동의하고, 비밀 및 인증서는 Key Vault에 저장하십시오.
429 및 503 응답에는 지수 백오프를 구현하고, 로그에
x-ms-request-id를 기록하십시오.
스크립팅 패턴(PowerShell 또는 Python)
선택 및 확장: 필요한 필드만 요청하고, 중첩된 엔티티에는
$select=…,$expand=…를 사용하십시오.필터링 및 시간 범위 지정: 델타 조회에는
$filter=createdDateTime ge {ISO8601}사용페이징 처리:
@odata.nextLink를 기준으로 반복 호출하고, 결과가 한 페이지에 모두 담긴다고 가정하지 않기정규화: 읽기 쉬운 출력을 위해 사용자/개체 ID를 이름과 부서로 미리 매핑
조인을 통한 컨텍스트 보강: 내보내기 전에 인시던트에 사용자, 사이트, 팀, 케이스 메타데이터를 추가
Purview에 연결하기(데이터를 의사결정으로 전환)
출력 표준화: 일관된 필드 이름을 사용한 CSV/JSON 출력(tenant, incidentId, workload, userId, userUPN, severity, status, created, lastAction, caseId)
수집: Purview가 읽을 수 있는 보안 스토리지 위치(예: ADLS Gen2)에 파일 저장
태그 지정 및 레이블 적용: 라우팅을 위해 민감도 레이블 또는 사용자 지정 태그(예: “DLP-PII-High”) 적용
대시보드: 추세, 담당자, SLA 경과 현황을 확인하기 위한 Purview(또는 Purview 데이터 기반 Power BI)
자동화: 반복 발생 또는 에스컬레이션 시 케이스 담당자에게 알리는 규칙 설정, 주간 PDF 요약 발송
30분 파일럿(단계별)
0–10분: 앱 등록 +
SecurityEvents.Read.All/eDiscovery.Read.All권한 부여, 비밀 또는 인증서 생성10–20분: 최근 7일을 대상으로
$filter와 페이징을 적용해 엔드포인트 하나(알림 또는 케이스)에 대한 스크립트 작성20–30분:
/users로 정보를 보강하고, CSV로 내보낸 뒤, ADLS 경로에 저장하고, 기본 차트로 시각화
가치를 입증하는 KPI
담당자와 처리 결과(disposition)가 입력된 인시던트 비율
인시던트에서 케이스(또는 검토자)까지 걸리는 평균 시간
30일 기준 반복 발생 계정 또는 위치 수
기본 제공 대시보드 건수와의 차이(격차 해소)
감사 주기 소요 시간(증거 자료 준비에 절감된 시간)
자주 발생하는 함정과 해결 방법
결과가 비어 있음 → 범위(scope)가 잘못되었거나 애플리케이션 권한이 필요한 곳에 위임(Delegated) 권한을 사용함
세부 정보 누락 →
$expand를 빠뜨렸거나 중첩 컬렉션을 파싱하지 않음부분 데이터 → 페이징을 하지 않아 첫 페이지만 수집됨
이름 불일치 →
/users또는 HR 데이터와의 보강 조인이 없음대시보드 데이터 오래됨 → 예약 실행이 없음, 작업을 추가하고 실패 시 알림 설정
이번 주 바로 적용할 수 있는 빠른 성과
/security/alerts에서 최근 7일 데이터를 가져와 포털의 건수와 비교진행 중인 eDiscovery 케이스와 관리 대상자(custodian)를 내보내고 법무팀과 공유해 검증
DLP 인시던트 점검을 실행해 반복 건에 태그를 지정하고, Purview에서 후속 조치 열기
주간 증거 묶음(CSV + PDF)을 컴플라이언스 사서함으로 보내도록 예약
자주 묻는 질문
개발자여야 하나요? 아닙니다. PowerShell이나 짧은 Python 스크립트면 충분합니다.
앱 권한이 필요한 이유는 무엇인가요? 대부분의 /security 및 /compliance 엔드포인트는 사용자 상호 작용 없이 높은 신뢰 수준의 접근을 요구하기 때문입니다.
PowerShell에서만 작업할 수 있나요? 네. Microsoft Graph PowerShell SDK를 사용하고
$top,$filter,$expand, 페이징을 처리하면 됩니다.Purview가 반드시 필요한가요? 엄격히 말하면 그렇지 않습니다. 다만 원시 JSON을 감사 가능한 워크플로와 대시보드로 바꿔 줍니다.
결론
대시보드는 요약을 보여 주고, Graph는 전체 이야기를 보여 줍니다. 올바른 엔드포인트를 호출하고, 인증을 정비하고, 페이징과 확장을 적용한 뒤, Purview에 데이터를 모으세요. 체크박스식 컴플라이언스에서 벗어나 입증 가능하고 실시간으로 확인되는 가시성을 확보할 수 있습니다. 수작업 내보내기에 파묻히지 않고도 말입니다. 이러한 사각지대를 직접 다루는 심층 대화와 전문가 팁은 전용 팟캐스트 에피소드 Find Missing Microsoft 365 Compliance Data with Graph에서 들어 보시기 바랍니다. 스크립트를 계속 다듬고, 애플리케이션 권한을 안전하게 관리하고, 대시보드가 가려 두었던 데이터를 드러내 보세요.