Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
DFIR-O365RC — Office 365 및 Azure 로그 수집을 위한 PowerShell 모듈 | Kitploit
도구/GitHubGitHub/anssi-fr/dfir-o365rc
ForensicsDigital ForensicsCloud SecurityIncident ResponseLog Analysis
GitHubanssi-fr/dfir-o365rc

DFIR-O365RC

Office 365 및 Azure 로그 수집을 위한 PowerShell 모듈

저장소 보기
28234411개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

DFIR-O365RC

Publish Docker image to Dockerhub Publish module to PowerShell Gallery


목차:

  1. 모듈 설명

  2. 설치 및 전제 조건

    1. Docker 사용하기
    2. 수동 설치
  3. DFIR-O365RC 애플리케이션 관리

    1. 애플리케이션 생성
    2. 애플리케이션 업데이트
    3. 애플리케이션 제거
  4. 권한 및 라이선스 요구 사항

  5. 모듈에 포함된 함수

  6. 생성되는 파일

DFIR-O365RC는 SSTIC 2021(정보통신기술 보안 심포지엄)에서 발표되었습니다. 프랑스어로 된 발표 슬라이드와 녹화 영상은 여기에서 확인할 수 있습니다.

⚠️ 2024년 3월 31일, Microsoft는 DFIR-O365RC에서 사용하던 인증 방법을 더 이상 사용하지 않기로 했습니다. 이에 따라 2024년 8월 버전 2.0.0이 출시되었으며, 인증 방식과 코드 전반의 **주요 변경 사항(breaking changes)**이 포함되었습니다. ⚠️

모듈 설명

DFIR-O365RC PowerShell 모듈은 포렌식 분석가가 Microsoft 365 침해와 관련된 로그를 수집하고 Entra ID 조사를 수행할 수 있는 함수 집합입니다.

로그는 JSON 형식으로 생성되며 두 가지 주요 데이터 원본에서 가져옵니다:

  • Microsoft 365 통합 감사 로그(Unified Audit Log)
  • Microsoft Entra 로그인 로그(sign-ins logs) 및 감사 로그(audit logs)

이 두 데이터 원본은 다양한 엔드포인트에서 쿼리할 수 있습니다:

* Office 365 Management API는 SIEM으로 실시간 데이터를 분석하기 위한 것입니다. DFIR-O365RC는 포렌식 도구로서 Microsoft 365 환경을 실시간으로 모니터링하는 것이 목적이 아닙니다.

DFIR-O365RC는 다음에서 데이터를 가져옵니다:

  • Microsoft Entra 로그: Microsoft Graph PowerShell 사용 (성능이 좋고 Microsoft Graph REST API를 래핑하기 때문)
  • 기본적으로 통합 감사 로그: Exchange Online PowerShell 사용 (성능이 낮지만 현재 사용 가능한 유일한 옵션)
  • 선택적으로 통합 감사 로그: Purview 사용 (보존 기간 180일, 성능 좋지만 아직 베타이며 백엔드 버그로 인해 현재 사용 불가)

Microsoft 365 악성 활동을 조사하는 경우 Search-O365(Exchange Online PowerShell)는 사서함 감사 로그(Mailbox Audit Log)도 가져옵니다. 단, Search-MailboxAuditLog cmdlet은 더 이상 사용되지 않습니다(deprecated).

DFIR-O365RC를 사용하여 다른 Azure 리소스를 조사하는 경우:

  • Azure Monitor 활동 로그(Activity log)를 Az.Monitor PowerShell 모듈을 통해 가져올 수 있습니다. 보존 기간은 90일입니다. 이 로그는 Azure Resource Manager의 활동(Azure 구독 관련)에 중점을 둡니다.
  • Azure DevOps 감사 로그(audit log)를 Azure DevOps Services REST API를 통해 가져올 수 있습니다. 보존 기간은 90일입니다. 이 로그는 Azure DevOps의 활동(Azure DevOps 조직 관련)에 중점을 둡니다.

설치 및 전제 조건

Docker 사용하기

DFIR-O365RC 사용을 권장하는 방법입니다

다음을 입력하세요:```bash sudo docker pull anssi/dfir-o365rc:latest sudo docker run --rm -v .:/mnt/host -it anssi/dfir-o365rc:latest

root@kitploit:~
DFIR-O365RC 사용할 준비가 되었습니다:```bash
PowerShell 7.4.2
DFIR-O365RC: PowerShell module for Microsoft 365 and Entra ID log collection
https://github.com/ANSSI-FR/DFIR-O365RC
PS /mnt/host/output>

Docker 이미지를 수동으로 빌드하려면, 리포지토리를 클론하고 docker compose (또는 레거시 docker-compose)를 사용하여 이미지를 빌드하고, 컨테이너를 실행하고 볼륨을 마운트하십시오 (output/ 폴더에):```bash sudo docker compose build dfir-o365rc sudo docker compose run dfir-o365rc

using legacy Compose V1

sudo docker-compose run dfir-o365rc

root@kitploit:~
### PowerShell 사용

*PowerShell Desktop*과 *PowerShell Core*에서 모듈을 설치할 수 있습니다.

`Connect-ExchangeOnline` cmdlet은 [Microsoft .NET Framework 4.7.2 이상이 필요](https://learn.microsoft.com/en-us/powershell/exchange/exchange-online-powershell-v2?view=exchange-ps#windows)합니다.

PowerShell 갤러리에서 모듈을 설치하려면:```powershell
Install-Module -Name DFIR-O365RC

모듈을 수동으로 설치하려면 DFIR-O365RC 리포지토리를 클론하고, 필요한 종속성을 설치한 후(DFIR-O365RC.psd1 확인) DFIR-O365RC 디렉토리를 PowerShell 모듈 경로 중 하나에 추가하면 됩니다.

DFIR-O365RC 애플리케이션 관리

애플리케이션 생성

모듈을 가져온 후에는 로그 수집 프로세스를 처리할 Entra 애플리케이션을 생성해야 합니다.

이를 위해:

  1. 자체 서명된 인증서를 생성하고 base64로 인코딩된 공개 부분을 가져옵니다:

    Linux에서 PowerShell Core 또는 Docker 컨테이너를 사용하는 경우: ```bash openssl req -new -x509 -newkey rsa:2048 -sha256 -days 365 -nodes -out exampleDFIRO365RC.crt -keyout exampleDFIRO365RC.key -batch openssl pkcs12 -inkey exampleDFIRO365RC.key -in exampleDFIRO365RC.crt -export -out exampleDFIRO365RC.pfx # Enter a password for the certificate openssl x509 -in exampleDFIRO365RC.crt -outform DER -out - | base64 | tr -d "\n"

    root@kitploit:~

Windows에서 PowerShell을 사용하는 경우: ```powershell $certificate = New-SelfSignedCertificate -Subject "CN=exampleDFIRO365RC" -KeySpec KeyExchange -NotBefore (Get-Date) -NotAfter (Get-Date).AddDays(365) $certificatePassword = Read-Host -MaskInput "Please enter a password for the certificate" $certificateSecurePassword = ConvertTo-SecureString -String $certificatePassword -AsPlainText -Force Export-PfxCertificate -Cert $certificate -FilePath exampleDFIRO365RC.pfx -Password $certificateSecurePassword Write-Host ([System.Convert]::ToBase64String($certificate.GetRawCertData()))

root@kitploit:~
2) DFIR-O365RC 모듈의 `New-Application` cmdlet 사용:   ```powershell
$certificateb64="<base64-encoded public part from step 1>"
New-Application -certificateb64 $certificateb64

선택적으로, 테넌트의 구독에서 로그를 수집할 수 있도록 하려면 (Get-AzRMActivityLogs를 사용할 계획이 없는 경우 필요하지 않음): ```powershell New-Application -certificateb64 $certificateb64 -subscriptions

root@kitploit:~
선택적으로, 테넌트의 Azure DevOps 조직에서 로그를 수집할 수 있도록 하려면(이는 오랜 시간이 걸릴 수 있으며 `Get-AzDevOpsActivityLogs`를 사용할 계획이 없다면 필요하지 않습니다):   ```powershell
New-Application -certificateb64 $certificateb64 -organizations

애플리케이션을 만들려면 권한이 높은 계정을 사용하여 Azure에 여러 번 로그인해야 합니다.

애플리케이션이 생성되면 다음과 유사한 출력이 나타납니다: ```powershell Done creating the application with the required permissions Please use the following identifiers: WARNING: AppID: xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx WARNING: Tenant: example.onmicrosoft.com

root@kitploit:~
### 애플리케이션 업데이트

애플리케이션이 생성된 후에도 모듈의 `Update-Application` cmdlet을 사용하여 자격 증명 및 권한을 업데이트할 수 있습니다.

- 애플리케이션에 새 인증서를 추가할 수 있습니다.

`Update-Application -certificateb64 <base64-encoded public part>`

- 로그를 수집할 새 구독을 지정할 수 있습니다.

`Update-Application -subscriptions`

- 로그를 수집할 새 Azure DevOps 조직을 지정할 수 있습니다.

`Update-Application -organizations`

- 애플리케이션의 권한을 업데이트할 수 있습니다. 이는 이전 애플리케이션이 있고 생성 이후 권한이 업데이트된 경우 특히 유용합니다.

`Update-Application -permissions`

### 애플리케이션 제거

로그 수집이 완료되면 모듈의 `Remove-Application` cmdlet을 사용하여 애플리케이션을 삭제할 수 있습니다.

애플리케이션을 제거하려면 **고권한** 계정을 사용하여 Azure에 여러 번 로그인해야 합니다.

애플리케이션이 구독 또는 Azure DevOps 조직의 로그를 수집한 경우 `-organizations` 및/또는 `-subscriptions` 스위치를 추가해야 합니다.

---

## 권한 및 라이선스 요구 사항

⚠️

버전 2.0.0부터 이 도구는 [앱 전용 액세스 / 애플리케이션 권한](https://learn.microsoft.com/en-us/entra/identity-platform/permissions-consent-overview#app-only-access-access-without-a-user)이 있는 서비스 주체의 컨텍스트에서 실행됩니다.

버전 2.0.0 이상을 사용하려면 [애플리케이션을 생성](#creating-the-application)해야 합니다.

애플리케이션이 생성되면 스크립트는 애플리케이션의 자격 증명과 권한을 사용하여 실행됩니다.

⚠️

애플리케이션은 가능한 최소한의 필요한 권한 집합으로 생성됩니다.

- `Office 365 Exchange Online` API에 대한 `Exchange.ManageAsApp` (Exchange Online PowerShell cmdlet을 실행하는 데 필요)
- `Microsoft Graph` API에 대한 `AuditLog.Read.All` (Microsoft Entra 로그 수집에 필요)
- `Microsoft Graph` API에 대한 `AuditLogsQuery.Read.All` (Purview를 사용한 통합 감사 로그 수집에 필요)
- `Microsoft Graph` API에 대한 `Application.Read.All` 및 `DelegatedPermissionGrant.Read.All` (애플리케이션 및 서비스 주체와 관련된 Microsoft Entra 로그 강화에 필요)
- `Microsoft Graph` API에 대한 `Device.Read.All` (장치와 관련된 Microsoft Entra 로그 강화에 필요)
- `Microsoft Graph` API에 대한 `User.Read.All` (사용자 정보 획득에 필요)
- `Microsoft Graph` API에 대한 `UserAuthenticationMethod.Read.All` (사용자 인증 방법 정보 획득에 필요)
- `Microsoft Graph` API에 대한 `Organization.Read.All` (테넌트 일반 정보 획득에 필요)
- `Exchange Online`의 `View-only audit logs` (`Search-UnifiedAuditLog` cmdlet을 사용하는 데 필요)

선택 사항(`-subscriptions` 스위치 사용 시):

- 선택한 구독 하위 집합의 경우: `Microsoft.Insights/eventtypes/*`에 대한 `Reader` 역할 (Azure Monitor 활동 로그를 가져오는 데 필요)

선택 사항(`-organizations` 스위치 사용 시):

- 선택한 Azure DevOps 구독 하위 집합의 경우: `View audit log` (Azure DevOps 감사 로그를 가져오는 데 필요)



Microsoft Graph API로 Microsoft Entra 로그를 검색하려면 [Microsoft Entra ID P1](https://www.microsoft.com/en-us/security/business/microsoft-entra-pricing) 라이선스가 있는 사용자가 한 명 이상 있어야 합니다. 이 라이선스는 단일 사용자에 대해 구매하거나 *Microsoft 365 Business Premium* 플랜과 같은 일부 라이선스 플랜에 포함될 수 있습니다.



## 모듈에 포함된 함수

모듈에는 10개의 함수가 있습니다.

| **함수** | **데이터 원본** | 보존 기간 | **성능** | **완전성** | **세부 사항** |
|---|---|---|---|---|---|
| `Get-O365Full` | 통합 감사 로그 | 90 days / 180 days* | 낮음 | 모든 통합 감사 로그 | 기본적으로 전체 통합 감사 로그를 검색합니다. 이는 소규모 테넌트 또는 짧은 기간에만 사용해야 합니다.<br />또한 이 cmdlet을 사용하여 특정 [레코드 유형](https://learn.microsoft.com/en-us/office/office-365-management-api/office-365-management-activity-api-schema#enum-auditlogrecordtype---type-edmint32)에 대한 이벤트를 수집할 수 있습니다. |
| `Get-O365Light` | 통합 감사 로그 | 90 days / 180 days* | 양호 | 통합 감사 로그의 하위 집합만 | 관심 있는 것으로 간주되는 *작업*의 하위 집합만 검색됩니다. |
| `Get-O365Defender` | 통합 감사 로그 | 90 days / 180 days* | 양호 | 통합 감사 로그의 하위 집합만 | Microsoft Defender for Microsoft 365 관련 이벤트를 검색합니다. [Office 365 E5](https://www.microsoft.com/en-us/microsoft-365/enterprise/office-365-e5?activetab=pivot:overviewtab) 라이선스 또는 Microsoft Defender for Office 365를 포함하는 라이선스 플랜이 하나 이상 필요합니다. |
| `Get-AADLogs` | Microsoft Entra 로그 | 30 days | 양호 | 모든 Microsoft Entra 로그 | 테넌트 정보 및 모든 Microsoft Entra 로그(로그인 로그 및 감사 로그)를 가져옵니다. |
| `Get-AADApps` | N/A | N/A | 양호 | 완전 | Microsoft Entra ID 서비스 주체 및 해당 애플리케이션, oauth2PermissionGrants 및 appRoleAssignments |
| `Get-AADDevices` | N/A | N/A | 양호 | 완전 | Microsoft Entra ID 장치 및 해당 소유자/사용자 |
| `Get-AADUsers` | N/A | N/A | 양호 | 완전 | Microsoft Entra ID 사용자 및 해당 인증 방법 |
| `Search-O365` | 통합 감사 로그 / 사서함 감사 로그** | 90 days / 180 days* | 낮음 | 통합 감사 로그의 하위 집합만 | 특정 사용자, IP 주소 또는 자유 텍스트와 관련된 활동을 검색합니다. |
| `Get-AzRMActivityLogs` | Azure Monitor 활동 로그 | 90 days | 양호 | 모든 Azure Monitor 활동 로그 | 선택한 구독 하위 집합에 대한 모든 Azure Monitor 활동 로그를 가져옵니다. |
| `Get-AzDevOpsActivityLogs` | Azure DevOps 감사 로그 | 90 days | 양호 | 모든 Azure DevOps 감사 로그 | 선택한 Azure DevOps 조직 하위 집합에 대한 모든 Azure DevOps 감사 로그를 가져옵니다. |

\* Purview를 사용하면 기본 Exchange Online의 90일 보존 기간에 비해 180일의 보존 기간을 얻을 수 있습니다.

** 사용자를 검색할 때 `Search-O365` cmdlet은 사서함 감사 로그도 검색합니다.



각 함수에는 *Get-Help* cmdlet으로 호출할 수 있는 주석 기반 도움말이 있습니다.```powershell
# Display comment-based help
PS> Get-Help Get-O365Full
# Display comment-based help with examples
PS> Get-Help Get-O365Full -Examples

각 함수는 다음 매개변수를 사용합니다:

  • 시작 날짜 (-startDate) ;
  • 종료 날짜 (-endDate) ;
  • 애플리케이션 식별자 (-appId). 이 식별자는 애플리케이션 생성 시 얻습니다 ;
  • 테넌트 이름 (-tenant) ;
  • PFX 형식의 인증서 경로 (-certificatePath). 이 경로는 애플리케이션 생성 시 얻습니다.

예제:

가독성을 위해 다음과 같이 가정합니다:```powershell $appId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" $tenant = "example.onmicrosoft.com" $certificatePath = "./example.pfx"

root@kitploit:~
실제 사례에서는 이러한 매개변수가 [애플리케이션 생성](#creating-the-application) 시 수집됩니다.



과거 30일 동안의 Microsoft Entra 로그 및 테넌트에 대한 일반 정보를 검색하려면:```powershell
$endDate = Get-Date
$startDate = $endDate.AddDays(-30)
Get-AADLogs -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath

Microsoft Entra 서비스 주체와 해당 애플리케이션, oauth2PermissionGrant 및 appRoleAssignment 가져오기:```powershell $endDate = Get-Date $startDate = $endDate.AddDays(-30) Get-AADApps --appId $appId -tenant $tenant -certificatePath $certificatePath

root@kitploit:~
Microsoft Entra 장치 및 해당 소유자와 사용자 가져오기:```powershell
$endDate = Get-Date
$startDate = $endDate.AddDays(-30)
Get-AADDevices -appId $appId -tenant $tenant -certificatePath $certificatePath

Microsoft Entra 사용자 및 해당 인증 방법 설정 가져오기:```powershell Get-AADUsers -appId $appId -tenant $tenant -certificatePath $certificatePath -authenticationMethods

root@kitploit:~
관심 있는 통합 감사 로그 이벤트를 지난 30일 동안 검색하되, Entra ID와 관련된 이벤트는 첫 번째 명령으로 이미 검색되었으므로 제외합니다:```powershell
$endDate = Get-Date
$startDate = $endDate.AddDays(-30)
Get-O365Light -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath -operationsSet "allButAzureAD"

지금부터 -90일에서 -30일 사이의 시간 창에서 관심 있는 통합 감사 로그 이벤트 검색:```powershell $endDate = (Get-Date).AddDays(-30) $startDate = (Get-Date).AddDays(-90) Get-O365Light -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath

root@kitploit:~
사서함 감사가 활성화되어 있으면 전용 스위치를 사용하여 `MailboxLogin` 작업을 검색할 수도 있습니다:

_검색당 50.000개 이벤트의 전역 제한에 유의하세요_```powershell
Get-O365Light -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath -mailboxLogin

Office 365 E5 라이선스를 보유한 사용자가 있거나 테넌트에 Microsoft Defender for Office 365 플랜이 있는 경우, 지난 90일 동안의 Microsoft Defender 관련 로그를 검색할 수 있습니다:```powershell $endDate = Get-Date $startDate = $endDate.AddDays(-90) Get-O365Defender -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath

root@kitploit:~
2020년 크리스마스 이브부터 2020년 박싱 데이까지 모든 Unified Audit Log 이벤트를 검색하려면: 

_해당 cmdlet을 사용한 성능은 좋지 않다는 점에 유의하십시오_```powershell
$endDate = Get-Date "12/26/2020"
$startdate = Get-Date "12/24/2020"
Get-O365Full -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath

검색 기능을 사용하여 IP 주소, 특정 사용자와 관련된 활동을 조회하거나 Unified Audit Log에서 자유 텍스트 검색을 수행할 수 있습니다:```powershell $endDate = Get-Date $startDate = $endDate.AddDays(-90)

Retrieve events which contains the "Python" or "Python3" free text

Search-O365 -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath -freeTexts "Python","Python3"

Retrieve events related to the IP adresses 8.8.8.8 and 4.4.4.4.

Search-O365 -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath -IPAddresses "8.8.8.8","4.4.4.4"

Retrieve events related to users [email protected] and [email protected]

Search-O365 -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath -userIds "[email protected]","[email protected]"

root@kitploit:~
특정 **사용자**를 검색할 때, `Search-O365`는 사서함 감사 로그(Mailbox Audit Log)에서도 검색합니다. 이는 사용자의 라이선스 수준과 설정에 따라 일부 사서함 로그가 통합 감사 로그(Unified Audit Log)에 포함되지 않을 수 있기 때문입니다.



애플리케이션이 액세스 권한이 있는 구독에서 모든 Azure Resource Manager 활동 로그를 검색하려면:```powershell
$endDate = Get-Date
$startDate = $endDate.AddDays(-90)
Get-AzRMActivityLogs -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath

애플리케이션이 액세스할 수 있는 조직에서 모든 Azure DevOps 활동 로그를 검색하려면:```powershell $endDate = Get-Date $startDate = $endDate.AddDays(-90) Get-AzDevOpsActivityLogs -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath

root@kitploit:~
## 생성된 파일

생성된 모든 파일은 JSON 형식입니다.

_Purview를 사용하여 동일한 출력 파일에 쓰는 여러 cmdlet을 실행하면 "단순한" 연결로 인해 잘못된 JSON이 발생할 수 있습니다._

- `Get-AADApps`는 `azure_ad_apps` 폴더에 다음을 생성합니다:
  - 기존 및 삭제된 애플리케이션이 포함된 JSON 파일: `AADApps_example.onmicrosoft.com_applications_raw.json`;
  - 기존 및 삭제된 서비스 주체가 포함된 JSON 파일: `AADApps_example.onmicrosoft.com_service_principals_raw.json`;
  - 보강된 서비스 주체가 포함된 JSON 파일: `AADApps_example.onmicrosoft.com.json`.

- `Get-AADDevices`는 `azure_ad_devices` 폴더에 다음을 생성합니다:
  - 기존 및 삭제된 디바이스가 포함된 JSON 파일: `AADDevices_example.onmicrosoft.com_devices_raw.json`;
  - 보강된 디바이스가 포함된 JSON 파일: `AADDevices_example.onmicrosoft.com.json`.

- `Get-AADUsers`는 `azure_ad_users` 폴더에 다음을 생성합니다:
  - 기존 및 삭제된 사용자가 포함된 JSON 파일: `AADUsers_example.onmicrosoft.com_users_raw.json`;
  - 사용자 인증 설정이 포함된 JSON 파일: `AADUsers_example.onmicrosoft.com_users_settings_raw.json`;
  - 보강된 사용자가 포함된 JSON 파일: `AADUsers_example.onmicrosoft.com.json`.

- `Get-AADLogs`는 다음을 생성합니다:
  - `azure_ad_tenant` 폴더에:
    - 테넌트에 대한 일반 정보가 포함된 JSON 파일: `AADTenant_example.onmicrosoft.com.json`.

  - `azure_ad_audit` 폴더에:
    - Microsoft Entra 감사 로그가 포함된 JSON 파일: `AADAuditLog_example.onmicrosoft.com_YYYY-MM-DD.json`.

  - `azure_ad_signin` 폴더에:
    - Microsoft Entra 로그인 로그가 포함된 JSON 파일: `YYYY-MM-DD/AADSigninLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00.json`.

- `Get-AzRMActivityLogs`는 다음을 생성합니다:
  - `azure_rm_subscriptions` 폴더에:
    - 구독에 대한 일반 정보가 포함된 JSON 파일: `AzRMsubscriptions_example.onmicrosoft.com.json`.

  - `azure_rm_activity` 폴더에:
    - Azure Monitor 활동 로그가 포함된 JSON 파일: `YYYY-MM-DD/AzRM_example.onmicrosoft.com_%SubscriptionID%_YYYY-MM-DD_HH-00-00.json`.

- `Get-AzDevOpsActivityLogs`는 다음을 생성합니다:
  - `azure_DevOps_orgs` 폴더에:
    - Azure DevOps 조직에 대한 일반 정보가 포함된 JSON 파일: `AzdevopsOrgs_example.onmicrosoft.com.json`.

  - `azure_DevOps_activity` 폴더에:
    - Azure DevOps 감사 로그가 포함된 JSON 파일: `YYYY-MM-DD/AzDevOps_example.onmicrosoft.com_%AzureDevOpsOrg%_YYYY-MM-DD_HH-00-00.json`.

- `Get-O365Full`은 `O365_unified_audit_logs` 폴더(Purview 사용 시 각각 `O365_unified_audit_logs_purview` 폴더)에 다음을 생성합니다:
  - 통합 감사 로그가 포함된 JSON 파일: `YYYY-MM-DD/UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00.json` (Purview 사용 시 각각 `*/UnifiedAuditLogPurview_*`);
  - 지정된 [RecordTypes](https://learn.microsoft.com/en-us/office/office-365-management-api/office-365-management-activity-api-schema#enum-auditlogrecordtype---type-edmint32)에 대한 통합 감사 로그가 포함된 JSON 파일: `YYYY-MM-DD/UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_%RecordType%.json` (Purview 사용 시 각각 `*/UnifiedAuditLogPurview_*`).

- `Get-O365Light`는 `O365_unified_audit_logs` 폴더(Purview 사용 시 각각 `O365_unified_audit_logs_purview` 폴더)에 다음을 생성합니다:
  - 관심 대상으로 간주되는 *작업*의 하위 집합에 대한 통합 감사 로그가 포함된 JSON 파일: `YYYY-MM-DD/UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00.json` (Purview 사용 시 각각 `*/UnifiedAuditLogPurview_*`).
- `Get-O365Defender`는 `O365_unified_audit_logs` 폴더(Purview 사용 시 각각 `O365_unified_audit_logs_purview` 폴더)에 다음을 생성합니다:
  - Defender와 연결된 [RecordTypes](https://learn.microsoft.com/en-us/office/office-365-management-api/office-365-management-activity-api-schema#enum-auditlogrecordtype---type-edmint32)에 대한 통합 감사 로그가 포함된 JSON 파일: `YYYY-MM-DD/UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_%RecordType%.json` (Purview 사용 시 각각 `*/UnifiedAuditLogPurview_*`).
- `Search-O365`는 다음을 생성합니다:
  - `O365_unified_audit_logs` 폴더(Purview 사용 시 각각 `O365_unified_audit_logs_purview` 폴더)에:
    - 지정된 `RequestType`(`FreeText`, `IPAddresses` 또는 `UserIds`)에 대한 통합 감사 로그가 포함된 JSON 파일: `YYYY-MM-DD/UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_%RequestType%_YYYY-MM-DD-HH-MM-SS.json` (Purview 사용 시 각각 `*/UnifiedAuditLogPurview_*`). `YYYY-MM-DD-HH-MM-SS`는 수집이 수행된 시간을 나타냅니다. `FreeText`를 검색할 때는 끝에 추가 `_%i`가 추가되며, 이는 `%i`번째 자유 텍스트 검색 결과임을 나타냅니다.

  - `Exchange_mailbox_audit_logs` 폴더에:
    - 사서함 감사 로그가 포함된 JSON 파일(UserIDs 검색 시에만): `YYYY-MM-DD/MailboxAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_UserIds_YYYY-MM-DD-HH-MM-SS_%UserID%.json`. `YYYY-MM-DD-HH-MM-SS`는 수집이 수행된 시간을 나타냅니다. `%UserID%`는 이 UserID에 대한 검색 결과임을 나타냅니다.

다양한 함수를 실행하면 다음과 유사한 디렉터리 구조가 생성됩니다:```
output
│   Get-AADApps.log
│   Get-AADDevices.log
│   Get-AADLogs.log
│   Get-AzDevOpsActivityLogs.log
│   Get-AzRMActivityLogs.log
│   Get-O365Defender.log
│   Get-O365Full.log
│   Get-O365Light.log
│   Search-O365.log
│
├───azure_ad_apps
│       AADApps_example.onmicrosoft.com.json
│       AADApps_example.onmicrosoft.com_applications_raw.json
│       AADApps_example.onmicrosoft.com_service_principals_raw.json
│
├───azure_ad_audit
│       AADAuditLog_example.onmicrosoft.com_YYYY-MM-DD.json
│       [...]
│
├───azure_ad_devices
│       AADDevices_example.onmicrosoft.com.json
│       AADDevices_example.onmicrosoft.com_devices_raw.json
│
├───azure_ad_signin
│   ├───YYYY-MM-DD
│   │       AADSigninLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00.json
│   │       [...]
│   │
│   ├───[...]
│
├───azure_ad_tenant
│       AADTenant_example.onmicrosoft.com.json
│
├───azure_ad_users
│       AADUsers_divreponse.onmicrosoft.com.json
│       AADUsers_divreponse.onmicrosoft.com_users_raw.json
│       AADUsers_divreponse.onmicrosoft.com_users_settings_raw.json
|
├───azure_DevOps_activity
│   ├───YYYY-MM-DD
│   │       AzDevOps_example.onmicrosoft.com_%AzureDevOpsOrg%_YYYY-MM-DD_HH-00-00.json
│   │       [...]
│   │
│   ├───[...]
│
├───azure_DevOps_orgs
│       AzdevopsOrgs_example.onmicrosoft.com.json
├───azure_rm_activity
│   ├───YYYY-MM-DD
│   │       AzRM_example.onmicrosoft.com_%SubscriptionID%_YYYY-MM-DD_HH-00-00.json
│   │       [...]
│   │
│   ├───[...]
│
├───azure_rm_subscriptions
│       AzRMsubscriptions_example.onmicrosoft.com.json
│
├───Exchange_mailbox_audit_logs
│   └───YYYY-MM-DD
│   │       MailboxAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_UserIds_YYYY-MM-DD-HH-MM-SS_%UserID%.json
│   │       [...]
│   │
│   ├───[...]
│
├───O365_unified_audit_logs
│   ├───YYYY-MM-DD
│   │       UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00.json
│   │       UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_%RecordType%.json
│   │       UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_UserIds_YYYY-MM-DD-HH-MM-SS.json
│   │       UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_IPAddresses_YYYY-MM-DD-HH-MM-SS.json
│   │       UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_FreeText_YYYY-MM-DD-HH-MM-SS_%i.json
│   │       [...]
│   │
│   ├───[...]
│
└───O365_unified_audit_logs_purview
│   ├───YYYY-MM-DD
│   │       UnifiedAuditLogPurview_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00.json
│   │       UnifiedAuditLogPurview_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_%RecordType%.json
│   │       UnifiedAuditLogPurview_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_UserIds_YYYY-MM-DD-HH-MM-SS.json
│   │       UnifiedAuditLogPurview_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_IPAddresses_YYYY-MM-DD-HH-MM-SS.json
│   │       UnifiedAuditLogPurview_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_FreeText_YYYY-MM-DD-HH-MM-SS_%i.json
│   │       [...]
│   │
│   ├───[...]
도구 다운로드
데이터 원본 / 엔드포인트보존 기간성능범위
통합 감사 로그 / Exchange Online PowerShell90일낮음모든 Microsoft 365 로그(Entra 포함)
통합 감사 로그 / Purview180일좋음모든 Microsoft 365 로그(Entra 포함)
통합 감사 로그 / Office 365 Management API *7일좋음모든 Microsoft 365 로그(Entra 포함)
Microsoft Entra 로그 / Microsoft Graph PowerShell30일좋음Entra 로그인 및 감사 로그만
Microsoft Entra 로그 / Microsoft Graph REST API30일좋음Entra 로그인 및 감사 로그만