M365Con 2027 – 무료 온라인 컨퍼런스 · 11–22 Jan 2027 · 120 sessions→ m365con.net

블로그 · Mirko Peters

Graph Explorer 완전 정복: 사용자 활동 흔적을 처음부터 끝까지 추적하기

By ·

팟캐스트 동반 블로그에 다시 오신 것을 환영합니다! 오늘 글에서는 우리에게 익숙하고 때로는 다루기 어려운 분절된 관리 UI의 범위를 훨씬 넘어서 살펴보겠습니다…

Automatically translated with AI from the original post. Read the English original

▶ BLOGMastering GraphExplorer: Tracing a Us……M365.FM
Titelbild: Mastering Graph Explorer: Tracing a User Footprint End-to-End

팟캐스트 동반 블로그에 다시 오신 것을 환영합니다! 오늘 글에서는 우리에게 익숙하고 때로는 다루기 어려운 분절된 관리 사용자 인터페이스를 훨씬 넘어서 살펴보겠습니다. Microsoft 365 전반에서 특정 사용자가 무엇에 접근했고, 무엇을 공유했고, 무엇을 건드렸는지에 대한 종합적인 감사 추적을 직접 조합해 본 적이 있다면, 기본 관리 센터가 얼마나 단편적으로 느껴지는지 이미 아실 겁니다. 그래서 이번에는 Microsoft Graph를 깊이 다뤄 보려 합니다. Graph API를 활용하면 개별 사용자에서 그룹, SharePoint 사이트, 파일, 외부 링크, 그리고 활성 뷰어까지 자연스럽게 옮겨 갈 수 있습니다. 이 가이드와 직접 연결되는 오디오 토론을 함께 따라가고 싶다면 관련 에피소드 Map Microsoft 365 Users, Groups, Files, and Shares with Graph를 꼭 확인해 보세요.

M365가 고립되어 있지 않은 이유

관리자와 보안 팀 사이에서 가장 흔한 오해 중 하나는 개별 Microsoft 365 서비스가 안전하고 자체적으로 완결된 사일로로 동작한다는 생각입니다. 실제로는 Teams 채팅, SharePoint 문서 라이브러리, OneDrive 폴더가 기본 그룹 멤버십과 권한 상속을 통해 끊임없이 서로 연결되어 영향을 주고받습니다.

  • Teams 채팅, SharePoint 라이브러리, OneDrive 폴더는 그룹 멤버십을 통해 서로 연결됩니다.
  • "사용자 한 명을 그룹 한 곳에 추가한다"는 단순한 작업만으로도 표준 보기에서는 감사 연속성이 뚜렷하게 남지 않은 채 수많은 하위 사이트, 채널, 외부 공유가 조용히 열릴 수 있습니다.
  • 컴플라이언스 위험은 이런 보이지 않는 경로에서 비롯됩니다. 예를 들어 비공개 채팅에 던져 넣은 게스트 링크, 여러 라이브러리에 복제된 파일, 프로젝트가 끝난 뒤에도 방치된 고아 공유 등이 그렇습니다.

Graph Explorer로 하는 흔적 매핑(사용자에서 파일까지의 접점)

액세스가 테넌트 전체에 어떻게 퍼져 나가는지 제대로 이해하려면 반복 가능한 쿼리 패턴이 필요합니다. Graph Explorer에서 일련의 API 호출을 계획적으로 실행하면 사용자 접점 흔적 전체를 매핑할 수 있습니다.

  1. 대상 사용자를 기준점으로 잡기:
    GET /v1.0/users/{userPrincipalName}?$select=id,displayName,userPrincipalName
  2. 직접 및 간접 멤버십 열거하기:
    GET /v1.0/users/{id}/memberOf?$select=id,displayName
  3. 해당 그룹에서 리소스로 피벗합니다. Microsoft 365 그룹과 Teams의 경우 기본 SharePoint 사이트를 대상으로 합니다:
    GET /v1.0/groups/{groupId}/drive/root/children?$select=id,name,lastModifiedDateTime,webUrl
    또는 사이트 드라이브와 라이브러리를 직접 열거합니다:
    GET /v1.0/sites/{siteId}/drives
  4. 항목 권한과 공유 링크 가져오기:
    GET /v1.0/drives/{driveId}/items/{itemId}/permissions?$select=id,grantedToV2,link,roles,shareId
  5. 감사 로그와 로그인 로그를 사용해 가능한 범위에서 누가 언제 무엇에 접근했는지 추적합니다:
    GET /v1.0/auditLogs/signIns 또는 /security/alerts를 사용하고, 파일, 사이트 또는 공유 컨텍스트와 함께 확인합니다.
  6. Teams 게시물과 채널 메시지까지 연결해 흔적 추적을 마무리합니다:
    GET /v1.0/teams/{teamId}/channels/{channelId}/messages?$search="filename" (베타 엔드포인트와 적절한 권한이 필요합니다).

실제로 쓰게 될 노이즈 제거 필터

Microsoft Graph에서 원시 데이터를 가져오면 소방 호스로 물을 마시는 것 같은 느낌이 들 수 있습니다. 방대한 데이터셋을 실행 가능한 인텔리전스로 바꾸려면 정확한 쿼리 매개변수를 활용해야 합니다.

  • 범위 필터를 적용해 지난 7일 동안 생성된 외부 공유만 분리합니다:
    GET /v1.0/drives/{driveId}/items/{itemId}/permissions?$filter=link/scope eq 'anonymous' or link/scope eq 'organization'&$select=…
  • 파일 확장명을 추가해 위험할 수 있는 파일 형식만 분리합니다:
    Append $filter=endsWith(resourceReference/name,'.xlsm') or endsWith(resourceReference/name,'.pst')
  • Teams 채널에서 민감한 용어가 업무 시간 외에 언급된 내역을 추적합니다:
    GET /v1.0/teams/{teamId}/channels/{channelId}/messages?$search="confidential" 후, 결과를 createdDateTime 기준으로 정상 업무 시간 외에 해당하는 항목만 다시 필터링합니다.
  • ID, 이름, 웹 URL, 마지막 수정 타임스탬프, 최소한의 권한 필드만 반환하도록 항상 $select를 추가해 페이로드를 가볍고 효율적으로 유지하세요.
  • 빠른 분류를 위해 $top=50으로 결과 수를 제한해 샘플을 빠르게 점검할 수 있습니다. 다만 데이터를 영구 저장소로 내보낼 때는 이 제한을 반드시 제거하세요.

대규모 환경의 필수 사항(페이지 나누기와 스로틀링)

이 쿼리를 테스트 사용자 한 명에서 수십만 개의 객체를 보유한 엔터프라이즈 테넌트로 확장하면 성능과 안정성이 가장 중요해집니다.

  • 모든 페이지의 결과마다 @odata.nextLink 속성을 명시적으로 따라가기 전까지는 데이터 수집이 끝난 것이 아닙니다.
  • 지수 백오프 루틴을 구현해 HTTP 429 속도 제한 응답을 준수하고, 스크립트가 중단된 지점부터 안전하게 다시 시작할 수 있도록 하십시오.
  • 쿼리를 현명하게 일괄 처리하십시오. 작은 호출을 대량으로 보내기보다는 적고 크며 잘 구성된 요청을 선호하고, 그룹과 사이트의 매핑 정보는 적극적으로 캐시하십시오.
  • 요청 시간 초과를 피하기 위해 대규모 테넌트 크롤링은 SharePoint 사이트 ID나 날짜 범위별로 나누고, 이러한 무거운 작업은 사용량이 적은 시간대에 예약하십시오.

흔한 함정과 빠른 해결 방법

자동화된 Graph 쿼리 파이프라인을 구축할 때는 숙련된 관리자도 장애물에 부딪히곤 합니다. 다음의 흔한 함정과 신속한 해결 방법을 염두에 두십시오.

  • 함정: 기본 스키마가 시간이 지나면서 변경되면 CSV 내보내기가 어긋나고 깨집니다.
    해결: 버전이 지정된 변환을 적용하고 "알 수 없음" 필드를 안정적으로 처리하면서 Graph API를 직접 사용하십시오.
  • 함정: GUID와 사용자 주체 이름(UPN) 같은 혼합 식별자는 데이터베이스 조인을 망가뜨립니다.
    해결: 데이터를 사용자, 그룹, 사이트, 드라이브, 항목, 권한을 포괄하는 일관된 의미 모델로 정규화하십시오.
  • 함정: "1페이지 편향"은 모니터링을 가려, 더 깊은 페이지에 숨어 있는 주요 보안 사고를 놓치게 합니다.
    해결: 처리한 총 페이지 수를 항상 기록하고, 예상 레코드 수가 예기치 않게 줄어들면 경고가 발생하도록 설정하십시오.
  • 함정: 관련 없는 파일이 감당하기 어려울 만큼 쏟아져 들어옵니다.
    해결: 링크 범위, 특정 생성·수정 시간 구간, 그리고 대상 민감 용어 목록을 기준으로 명시적으로 필터링하십시오.
  • 함정: Teams 공유 항목이 기반 파일과 연결되지 않습니다.
    해결: 채널 메시지의 웹 URL을 드라이브 항목과 직접 연결하고, 두 고유 식별자를 모두 저장하십시오.

이를 통해 확인할 수 있는 경영진 수준의 KPI

원시 Graph API 출력을 구조화된 지표로 변환하면 리더십이 절실히 필요로 하는 가시성을 확보할 수 있습니다. 확보할 수 있는 핵심 성과 지표는 다음과 같습니다.

  • 외부 노출 속도: 사이트 또는 팀별로 나눈 주간 신규 게스트 링크 생성 수를 측정합니다.
  • 민감 파일 접근률: 레이블이 지정된 콘텐츠의 고유 조회자를 추적하고, 내부 사용자와 외부 게스트를 구분합니다.
  • 그룹 파급 위험: 그룹 멤버십이 변경된 후 24시간 이내에 갑자기 접근 가능해지는 파일을 식별합니다.
  • 그림자 유통: 하나의 스프린트 내에서 여러 팀과 사이트로 확산되는 민감 파일을 추적합니다.
  • 정리 효과: 취소된 공유 링크 수를 집계하고 전체 해결 소요 시간을 측정합니다.

빠른 시작 쿼리 레시피(복사하여 붙여넣기 흐름)

Graph Explorer에서 바로 첫 번째 엔드투엔드 추적을 시작하려면 다음의 순차적인 복사 및 붙여넣기 작업 흐름을 사용하십시오.

  1. 사용자 핵심 정보와 그룹 조회:
    /users/{upn}?$select=id,displayName
    /users/{id}/memberOf?$select=id,displayName
  2. 발견된 각 Microsoft 365 그룹에 대해 드라이브 하위 항목 가져오기:
    /groups/{groupId}/drive/root/children?$select=id,name,webUrl,lastModifiedDateTime&$top=200
    반드시 @odata.nextLink를 따라가십시오.
  3. 각 파일 항목의 권한 확인:
    /drives/{driveId}/items/{itemId}/permissions?$select=id,roles,grantedToV2,link
    link/scope가 ('anonymous','organization') 중 하나인 항목으로 필터링하십시오.
  4. 정리된 행을 데이터 웨어하우스로 내보내십시오. 테넌트 시간, 사이트 ID, 드라이브 ID, 항목 ID, 웹 URL, 소유자, 범위, 만료 데이터를 포함합니다.
  5. 지속적인 조직 모니터링을 위해 집계된 데이터를 Power BI에서 시각화하십시오.

이를 살아 있는 대시보드로 만들기

Graph Explorer에서 일회성으로 실행하는 쿼리는 조사에 매우 유용하지만, 실질적인 거버넌스에는 자동화가 필요합니다. 쿼리를 견고한 데이터 흐름으로 구성하고, 사용자, 그룹, 사이트, 드라이브, 항목, 권한, 메시지 테이블을 정규화하며, 파일 항목을 중심으로 스타 스키마를 구축하여 운영 대시보드로 발전시키십시오. 수정 날짜를 기준으로 증분 데이터 새로 고침을 설정하고, 민감도 레이블이 지정된 고위험 콘텐츠에 새로운 외부 링크가 나타날 때마다 실시간 경고가 발생하도록 구성하십시오.

30일 롤아웃 계획

이를 조직 전체에 적용할 준비가 되셨습니까? 다음의 4주 단계별 롤아웃 프레임워크를 따르십시오.

  • 1주 차: 앱 등록을 완료하고, 최소 권한 원칙에 따라 Graph API 권한을 할당하며, 정확한 $select와 $filter 매개변수를 사용하여 기준 쿼리를 수립하십시오.
  • 2주 차: 페이지네이션 스크립트를 구현하고, ID를 UPN으로 변환하는 식별자 정규화를 적용한 뒤, 첫 데이터 내보내기를 성공적으로 실행합니다.
  • 3주 차: Power BI 데이터 모델과 기본 KPI를 구성합니다. 외부 노출 추적과 파급 위험 분석도 포함합니다.
  • 4주 차: 데이터 새로 고침을 자동화하고, 이상 징후 알림을 설정하며, 보안 및 규정 준수 팀을 위한 표준 운영 절차(SOP)를 문서화합니다.

이런 분께 권합니다

이 방법론은 조직 내 특정 역할에 맞춰 설계되었습니다.

  • 기본 관리 대시보드에 중요한 사각지대가 숨어 있을 수 있다고 의심하는 Microsoft 365 관리자 및 SecOps 리드
  • 타사 소프트웨어를 추가로 도입하지 않고도 공유 현황을 처음부터 끝까지 파악해야 하는 규정 준수 팀
  • 안전하고 통제된 외부 공유 관행을 유지할 최종 책임이 있는 협업 담당자

현장 팁

Graph 자동화 여정을 진행하면서 다음의 실용적인 현장 팁을 가까이 두고 참고하십시오.

  • 조사는 항상 사용자 또는 파일에서 시작한 다음, 양방향으로 범위를 넓혀 사각지대를 없애십시오.
  • "그룹에 추가" 작업은 고위험 변경 이벤트로 취급하고, 하위 액세스 영향은 24시간 이내에 검토하십시오.
  • Teams 메시지와 파일 이름을 검색할 민감한 용어 목록을 항상 최신 상태로 관리하고, 이 목록을 정기적으로 검토하십시오.
  • 처리한 페이지 수와 레코드 볼륨을 꼼꼼히 기록하십시오. 로그가 완전히 조용하다면, 그것이 바로 파이프라인 작업이 고장 났다는 신호일 수 있습니다.

결론

Microsoft Graph를 익혀 사용자의 활동 흔적을 처음부터 끝까지 추적하면, 분산된 관리 화면과 진정한 엔터프라이즈 가시성 사이의 간극을 메울 수 있습니다. 고립된 사일로 대신 관계형 액세스 맵으로 사고방식을 전환하면, 민감한 데이터를 선제적으로 보호하고, 그림자 유통을 없애며, 리더십에 필요한 실행 가능한 KPI를 제공할 수 있습니다. 이와 같은 시나리오에 대한 전문가의 자세한 분석, 실제 사례, 심층 다룸을 더 듣고 싶다면 Map Microsoft 365 Users, Groups, Files, and Shares with Graph 전체 에피소드를 꼭 들어 보십시오.

구독
Graph 활용 레시피와 심층 다룸을 원하시면 m365.show/subscribe 에서 새 에피소드를 확인하십시오.

Entities in this article

Microsoft Graph Graph Explorer SharePoint Audit logs OneDrive Microsoft 365 OData Power BI SharePoint document libraries

Related articles

RSS