Microsoft Entra ID 로그인 (이전 명칭: Azure Active Directory) 로그 수집
파서 버전: 26.0
이 문서에서는 Google Security Operations 피드를 설정하여 Microsoft Entra ID (이전의 Azure Active Directory) 로그인 로그를 수집하는 방법을 설명합니다. Azure Event Hub (권장) 또는 서드 파티 API의 두 가지 방법을 사용하여 수집을 구성할 수 있습니다.
시작하기 전에
다음 기본 요건이 충족되었는지 확인합니다.
- Google SecOps 인스턴스
- Microsoft Azure 포털에 대한 권한 있는 액세스
- Microsoft Entra ID의 보안 관리자 또는 전역 관리자 역할 (진단 설정에 필요)
- 서드 파티 API 메서드의 경우 관리자 동의를 부여하는 다음 역할 중 하나:
- 전체 관리자: 모든 API의 모든 권한에 동의를 부여할 수 있습니다.
- 독점 역할 관리자: 모든 API의 모든 권한에 동의를 부여할 수 있습니다.
- 클라우드 애플리케이션 관리자: Microsoft Graph 앱 역할 (애플리케이션 권한)을 제외한 모든 API의 모든 권한에 동의를 부여할 수 있습니다.
방법 1: Azure Event Hub (권장)
이 방법은 진단 설정을 사용하여 Azure Event Hub를 통해 Microsoft Entra ID 로그인 로그를 스트리밍합니다. Google SecOps는 Azure Event Hub 피드 유형을 사용하여 Event Hub에서 직접 로그를 수집합니다.
Event Hub 네임스페이스 만들기
Event Hubs 네임스페이스는 하나 이상의 Event Hubs의 관리 컨테이너입니다.
- Azure 포털에서 Event Hubs를 검색합니다.
- + 만들기를 클릭합니다.
다음 구성 세부정보를 제공합니다.
설정 값 구독 Azure 구독 선택 리소스 그룹 기존 항목 선택 또는 새로 만들기 네임스페이스 이름 고유한 이름 (예: secops-entraid-signin)을 입력합니다.위치 Microsoft Entra 테넌트와 가장 가까운 리전을 선택합니다. 가격 책정 등급 Standard (프로덕션에 권장) 처리량 단위 1로 시작, 자동 팽창 사용 설정 (권장) 검토 + 만들기를 클릭합니다.
개요를 검토하고 만들기를 클릭합니다.
배포가 완료될 때까지 기다립니다 (1~2분).
Event Hub 만들기
- 네임스페이스가 배포되면 Event Hub 네임스페이스로 이동합니다.
- 왼쪽 탐색에서 엔터티 아래의 이벤트 허브를 선택합니다.
- + 이벤트 허브를 클릭합니다.
다음 구성 세부정보를 제공합니다.
설정 값 이름 고유한 이름 (예: entraid-signin-logs)을 입력합니다.파티션 수 40 (Google SecOps의 최적 확장성을 위해 권장) 메시지 보관 7일 (최소 권장) 캡처 사용 중지됨 (Google SecOps에 필요하지 않음) 만들기를 클릭합니다.
Event Hub 연결 문자열 가져오기
Google SecOps는 Event Hub에 인증하기 위한 연결 문자열이 필요합니다.
옵션 A: 네임스페이스 수준 연결 문자열 (권장)
- Event Hub 네임스페이스로 이동합니다.
- 왼쪽 탐색에서 설정 아래의 공유 액세스 정책을 선택합니다.
- 기본 정책 RootManageSharedAccessKey를 클릭합니다.
- 연결 문자열 - 기본 키를 복사합니다.
- 이 연결 문자열을 안전하게 저장합니다.
예:
Original: Endpoint=sb://secops-entraid-signin.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=abc123==;EntityPath=entraid-signin-logs Remove EntityPath: Endpoint=sb://secops-entraid-signin.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=abc123==
옵션 B: Event Hub 수준 연결 문자열
- 네임스페이스가 아닌 Event Hub로 이동합니다.
- 왼쪽 탐색에서 설정 아래의 공유 액세스 정책을 선택합니다.
- + 추가를 클릭하여 새 정책을 만듭니다.
- 다음 구성 세부정보를 제공합니다.
- 정책 이름: 설명이 포함된 이름 (예:
chronicle-read)을 입력합니다. - 권한: 듣기만 선택 (읽기 전용 액세스)
- 정책 이름: 설명이 포함된 이름 (예:
- 만들기를 클릭합니다.
- 새로 만든 정책을 클릭합니다.
- 연결 문자열 - 기본 키를 복사합니다.
이 연결 문자열을 안전하게 저장합니다.
Microsoft Entra ID 진단 설정 구성
- 보안 관리자 이상의 권한으로 Microsoft Entra 관리 센터에 로그인합니다.
- Entra ID > 모니터링 및 상태 > 진단 설정으로 이동합니다.
- + 진단 설정 추가를 클릭합니다.
- 다음 구성 세부정보를 제공합니다.
- 진단 설정 이름: 설명이 포함된 이름 (예:
signin-logs-to-eventhub)을 입력합니다. - 로그 섹션에서 내보낼 로그인 로그 카테고리를 선택합니다.
- SignInLogs: 대화형 사용자 로그인입니다.
- NonInteractiveUserSignInLogs: 비대화형 사용자 로그인 (권장).
- ServicePrincipalSignInLogs: 서비스 주 구성원 로그인 (선택사항)
- ManagedIdentitySignInLogs: 관리형 ID 로그인 (선택사항)
- ADFSSignInLogs: AD FS 로그인 로그 (AD FS를 사용하는 경우 선택사항)
- RiskyUsers: Microsoft Entra ID Protection에서 위험으로 표시한 사용자입니다 (선택사항).
- UserRiskEvents: 위험한 로그인 이벤트 세부정보 (선택사항)
- 대상 세부정보 섹션에서 이벤트 허브로 스트리밍을 선택합니다.
- 구독: Event Hub 네임스페이스가 포함된 구독을 선택합니다.
- Event Hub 네임스페이스: 만든 네임스페이스를 선택합니다 (예:
secops-entraid-signin). - 이벤트 허브 이름: 생성한 이벤트 허브를 선택합니다 (예:
entraid-signin-logs). - 이벤트 허브 정책 이름: RootManageSharedAccessKey를 선택합니다.
- 진단 설정 이름: 설명이 포함된 이름 (예:
저장을 클릭합니다.
(선택사항) 체크포인트를 위해 Azure Blob Storage 구성
Google SecOps는 Azure Blob Storage를 사용하여 처리된 이벤트를 추적하는 Event Hub 체크포인트를 저장할 수 있습니다. 이렇게 하면 피드가 일시적으로 중단된 경우 중복 수집을 방지할 수 있습니다.
체크포인트를 위한 스토리지 계정 만들기
- Azure 포털에서 스토리지 계정을 검색합니다.
- + 만들기를 클릭합니다.
다음 구성 세부정보를 제공합니다.
설정 값 구독 Azure 구독 선택 리소스 그룹 Event Hub와 동일한 리소스 그룹 사용 스토리지 계정 이름 고유한 이름 (예: secopsaadsignin)을 입력합니다.리전 Event Hub와 동일한 리전 성능 표준 중복성 LRS (로컬 중복 스토리지) 검토 + 만들기를 클릭합니다.
만들기를 클릭합니다.
Blob 컨테이너 만들기
- 생성한 스토리지 계정으로 이동합니다.
- 왼쪽 탐색 메뉴의 데이터 스토리지에서 컨테이너를 선택합니다.
- + 컨테이너를 클릭합니다.
- 다음 구성 세부정보를 제공합니다.
- 이름:
checkpoints을 입력합니다. - 공개 액세스 수준: 비공개 (익명 액세스 없음)
- 이름:
- 만들기를 클릭합니다.
스토리지 계정 사용자 인증 정보 가져오기
- 스토리지 계정의 보안 + 네트워킹에서 액세스 키를 선택합니다.
- 키 표시를 클릭합니다.
- 다음 항목을 복사하여 저장합니다.
- 스토리지 계정 이름: 스토리지 계정의 이름입니다.
- 키 1: 액세스 키 값입니다.
(선택사항) 전용 소비자 그룹 만들기
기본적으로 Event Hub는 $Default라는 소비자 그룹을 제공합니다. 프로덕션 환경의 경우 Google SecOps 전용 소비자 그룹을 만드는 것이 좋습니다.
- 네임스페이스가 아닌 Event Hub로 이동합니다.
- 왼쪽 탐색에서 엔티티 아래의 소비자 그룹을 선택합니다.
- + 소비자 그룹을 클릭합니다.
- 다음 구성 세부정보를 제공합니다.
- 이름: 설명이 포함된 이름을 입력합니다 (예:
chronicle).
- 이름: 설명이 포함된 이름을 입력합니다 (예:
만들기를 클릭합니다.
Microsoft Entra ID 로그인 로그를 수집하도록 Google SecOps에서 피드 구성
- SIEM 설정> 피드로 이동합니다.
- 새 피드 추가를 클릭합니다.
- 다음 페이지에서 단일 피드 구성을 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다(예:
Microsoft Entra ID Sign-In Logs - Event Hub). - 소스 유형으로 Microsoft Azure Event Hub를 선택합니다.
- 로그 유형으로 Microsoft Azure AD를 선택합니다.
- 다음을 클릭합니다.
다음 입력 매개변수의 값을 지정합니다.
- 이벤트 허브 연결 문자열: 이전에 캡처한 이벤트 허브 연결 문자열을 입력합니다.
네임스페이스 수준 연결 문자열을 사용하는 경우:
EntityPath매개변수를 삭제했는지 확인합니다.- 다음 필드에 이벤트 허브 이름도 입력해야 합니다.
이벤트 허브 수준 연결 문자열을 사용하는 경우:
- 연결 문자열을 그대로 사용합니다 (
EntityPath포함). 이벤트 허브 이름 필드는 비워둘 수 있습니다.
- 이벤트 허브 이름: 이벤트 허브 이름을 입력합니다 (예:
entraid-signin-logs).
네임스페이스 수준 연결 문자열을 사용하는 경우 필수입니다. 이벤트 허브 수준 연결 문자열을 사용하는 경우 선택사항입니다.
- 이벤트 허브 이름: 이벤트 허브 이름을 입력합니다 (예:
컨슈머 그룹 (선택사항): 컨슈머 그룹 이름을 입력합니다.
기본
$Default소비자 그룹을 사용하려면 비워 두세요.전용 소비자 그룹을 만든 경우 해당 이름을 입력합니다 (예:
chronicle).Blob 스토리지 컨테이너 이름 (선택사항): 체크포인트를 위해 컨테이너 이름 (예:
checkpoints)을 입력합니다.
체크포인트를 위해 blob 스토리지를 제공하는 경우:
- Azure 스토리지 계정 이름: 체크포인트 구성에서 스토리지 계정 이름을 입력합니다.
Azure 스토리지 계정 키: 체크포인트 구성의 액세스 키를 입력합니다.
애셋 네임스페이스: 애셋 네임스페이스입니다.
수집 라벨: 이 피드의 이벤트에 적용할 라벨입니다.
다음을 클릭합니다.
확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.
방법 2: 서드 파티 API
이 메서드는 Microsoft Graph API를 사용하여 Microsoft 테넌트에서 직접 Microsoft Entra ID 로그인 로그를 가져옵니다.
IP 허용 목록 구성
피드를 만들기 전에 Microsoft Azure 네트워크 설정 또는 조건부 액세스 정책에서 Google SecOps IP 범위를 허용 목록에 추가해야 합니다.
Google SecOps IP 범위 가져오기
- SIEM 설정> 피드로 이동합니다.
- 새 피드 추가를 클릭합니다.
- 피드 생성 인터페이스에 표시된 IP 범위를 확인합니다.
- 또는 피드 관리 API를 사용하여 IP 범위를 프로그래매틱 방식으로 가져옵니다.
워크로드 아이덴티티에 대한 조건부 액세스 구성 (필요한 경우)
조직에서 위치별 액세스를 제한하는 조건부 액세스 정책을 사용하는 경우 다음 단계를 따르세요.
- Microsoft Entra 관리 센터에서 보호 > 조건부 액세스 > 명명된 위치로 이동합니다.
- + 새 위치를 클릭합니다.
- 다음 구성 세부정보를 제공합니다.
- 이름:
Google SecOps IP Ranges를 입력합니다. - 신뢰할 수 있는 위치로 표시: 선택사항이며 보안 정책에 따라 다릅니다.
- IP 범위: 각 Google SecOps IP 범위를 CIDR 표기법으로 추가합니다.
- 이름:
- 만들기를 클릭합니다.
- 조건부 액세스 > 정책으로 이동합니다.
- 워크로드 아이덴티티에 적용되는 정책의 경우
Google SecOps IP Ranges이름이 지정된 위치 또는 특정 서비스 주체에 대한 제외를 구성합니다.
Microsoft Entra ID API 액세스 구성
앱 등록 만들기
- Microsoft Entra 관리 센터 또는 Azure 포털에 로그인합니다.
- ID > 애플리케이션 > 앱 등록으로 이동합니다.
- 신규 등록을 클릭합니다.
다음 구성 세부정보를 제공합니다.
- 이름: 설명이 포함된 이름을 입력합니다 (예:
Google SecOps Sign-In Logs Integration). - 지원되는 계정 유형: 이 조직 디렉터리의 계정만 (단일 테넌트)을 선택합니다.
- 리디렉션 URI: 비워 둡니다 (서비스 주 구성원 인증에는 필요하지 않음).
- 이름: 설명이 포함된 이름을 입력합니다 (예:
등록을 클릭합니다.
등록 후 다음 값을 복사하여 저장합니다.
- 애플리케이션 (클라이언트) ID
- 디렉터리 (테넌트) ID
API 권한 구성
통합에는 다음 Microsoft Graph 애플리케이션 권한이 필요합니다.
- 앱 등록에서 API 권한으로 이동합니다.
- 권한 추가를 클릭합니다.
- Microsoft Graph > 애플리케이션 권한을 선택합니다.
- 다음 권한을 선택합니다.
- AuditLog.Read.All: 로그인 로그를 읽는 데 필요합니다.
- Directory.Read.All: 로그인 로그 액세스를 위해 Microsoft Graph API에서 필요합니다 (알려진 문제).
- SecurityEvents.Read.All: Google Security Operations에 필요합니다.
- 권한 추가를 클릭합니다.
- [조직 이름]에 대한 관리자 동의 허용을 클릭합니다.
- 상태 열에 세 가지 권한 모두에 대해 [조직]에 부여됨이 표시되는지 확인합니다.
| 권한 | 유형 | 설명 |
|---|---|---|
| AuditLog.Read.All | 애플리케이션 | 모든 로그인 및 감사 로그 데이터 읽기 |
| Directory.Read.All | 애플리케이션 | 디렉터리 데이터 읽기 (API 액세스에 필요) |
| SecurityEvents.Read.All | 애플리케이션 | 보안 이벤트 읽기 |
클라이언트 보안 비밀번호 만들기
- 인증서 및 보안 비밀로 이동합니다.
- '새 클라이언트 보안 비밀번호'를 클릭합니다.
다음 구성 세부정보를 제공합니다.
- 설명: 설명이 포함된 이름 (예:
Google SecOps Feed)을 입력합니다. - 만료: 만료 기간을 선택합니다.
- 설명: 설명이 포함된 이름 (예:
추가를 클릭합니다.
중요: 클라이언트 보안 비밀번호 값을 즉시 복사하세요. 이 값은 한 번만 표시되며 나중에 검색할 수 없습니다.
피드를 만들기 전에 API 액세스 확인
Google SecOps 피드를 만들기 전에 서비스 주체가 Microsoft Graph API를 성공적으로 인증하고 액세스할 수 있는지 확인합니다.
PowerShell을 사용하여 인증 테스트
# Replace with your actual values $tenantId = "your-tenant-id" $clientId = "your-client-id" $clientSecret = "your-client-secret" # Token request parameters (must be lowercase) $tokenBody = @{ grant_type = "client_credentials" client_id = $clientId client_secret = $clientSecret scope = "https://graph.microsoft.com/.default" } # Request access token $tokenEndpoint = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token" $tokenResponse = Invoke-RestMethod -Method Post -Uri $tokenEndpoint -Body $tokenBody -ContentType "application/x-www-form-urlencoded" if ($tokenResponse.access_token) { Write-Host "✓ Successfully obtained access token" -ForegroundColor Green # Test API call to sign-ins endpoint $apiUrl = "https://graph.microsoft.com/v1.0/auditLogs/signIns?`$top=1" $headers = @{ Authorization = "Bearer $($tokenResponse.access_token)" } try { $signInResponse = Invoke-RestMethod -Method Get -Uri $apiUrl -Headers $headers Write-Host "✓ Successfully accessed sign-ins API" -ForegroundColor Green Write-Host "Sample sign-in log retrieved successfully" -ForegroundColor Green } catch { Write-Host "✗ Failed to access sign-ins API" -ForegroundColor Red Write-Host "Error: $($_.Exception.Message)" -ForegroundColor Red } } else { Write-Host "✗ Failed to obtain access token" -ForegroundColor Red }예상 출력:
✓ Successfully obtained access token ✓ Successfully accessed sign-ins API Sample sign-in log retrieved successfully
curl을 사용하여 인증 테스트
# Replace with your actual values TENANT_ID="your-tenant-id" CLIENT_ID="your-client-id" CLIENT_SECRET="your-client-secret" # Request access token curl -X POST "https://login.microsoftonline.com/$TENANT_ID/oauth2/v2.0/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=client_credentials" \ -d "client_id=$CLIENT_ID" \ -d "client_secret=$CLIENT_SECRET" \ -d "scope=https://graph.microsoft.com/.default" # Test API access curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ "https://graph.microsoft.com/v1.0/auditLogs/signIns?\$top=1"
Microsoft Entra ID 로그인 로그를 수집하도록 Google SecOps에서 피드 구성
피드 설정
- SIEM 설정> 피드로 이동합니다.
- 새 피드 추가를 클릭합니다.
- 다음 페이지에서 단일 피드 구성을 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다(예:
Microsoft Entra ID Sign-In Logs). - 소스 유형으로 서드 파티 API를 선택합니다.
- 로그 유형으로 Microsoft Azure AD를 선택합니다.
- 다음을 클릭합니다.
피드 매개변수 구성
다음 입력 매개변수의 값을 지정합니다.
- OAuth 클라이언트 ID: 앱 등록의 애플리케이션 (클라이언트) ID입니다.
- OAuth 클라이언트 보안 비밀번호: 이전에 복사한 클라이언트 보안 비밀번호 값입니다.
- 테넌트 ID: 앱 등록에서 가져온 Microsoft 테넌트 ID입니다 (UUID 형식, 예:
0fc279f9-fe30-41be-97d3-abe1d7681418). API 전체 경로: Microsoft Graph REST API 엔드포인트 URL:
graph.microsoft.com/v1.0/auditLogs/signInsAPI 인증 엔드포인트: Microsoft Active Directory 인증 엔드포인트:
login.microsoftonline.com고급 옵션:
- 피드 이름: 피드를 식별하는 미리 입력된 값입니다.
- 소스 유형: 서드 파티 API (Google SecOps에 로그를 수집하는 메커니즘)
- 애셋 네임스페이스: 피드가 연결될 애셋 네임스페이스입니다.
- 수집 라벨: 이 피드의 모든 이벤트에 라벨이 추가됩니다.
- 다음을 클릭합니다.
확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.
리전 엔드포인트
소버린 클라우드에서 Microsoft Entra ID를 배포하는 경우 적절한 리전 엔드포인트를 사용하세요.
| 클라우드 환경 | API 전체 경로 | API 인증 엔드포인트 |
|---|---|---|
| 글로벌 | graph.microsoft.com/v1.0/auditLogs/signIns |
login.microsoftonline.com |
| 미국 정부 L4 | graph.microsoft.us/v1.0/auditLogs/signIns |
login.microsoftonline.us |
| 미국 정부 L5 (DOD) | dod-graph.microsoft.us/v1.0/auditLogs/signIns |
login.microsoftonline.us |
| 중국 (21Vianet) | microsoftgraph.chinacloudapi.cn/v1.0/auditLogs/signIns |
login.chinacloudapi.cn |
UDM 매핑 테이블
| 로그 필드 | UDM 매핑 | 논리 |
|---|---|---|
activityDateTime |
principal.event_timestamp |
activityDateTime 필드에서 파싱됩니다. 필드가 예상되는 'yyyy-MM-ddTHH:mm:ss.SSSZ' 형식 또는 'ISO8601' 형식이 아닌 경우 파서는 'MM/dd/yyyy HH:mm:ss A' 또는 'MM/d/yyyy HH:mm:ss A'와 같은 다른 형식을 시도합니다. |
activityDisplayName |
security_result.summary |
activityDisplayName에서 직접 매핑됩니다. |
additionalDetails.0.value |
network.http.user_agent |
additionalDetails.0.value에서 직접 매핑됩니다. |
additionalDetails.1.key |
target.resource.attribute.labels.key |
additionalDetails.1.key에서 직접 매핑됩니다. |
additionalDetails.1.value |
target.resource.attribute.labels.value |
additionalDetails.1.value에서 직접 매핑됩니다. |
additionalInfo.[].Key |
network.http.user_agent, target.url |
Key이 userAgent이면 Value을 network.http.user_agent 및 network.http.parsed_user_agent에 매핑합니다. Key이 alertUrl이면 Value를 target.url에 매핑합니다. |
additionalInfo.[].Value |
network.http.user_agent, target.url |
Key이 userAgent이면 Value을 network.http.user_agent 및 network.http.parsed_user_agent에 매핑합니다. Key이 alertUrl이면 Value를 target.url에 매핑합니다. |
am_category |
metadata.description |
am_category에서 직접 매핑됩니다. |
am_tenantId |
metadata.product_deployment_id |
am_tenantId에서 직접 매핑됩니다. |
appId |
target.resource.attribute.labels.value |
라벨 키가 '앱 ID'인 appId에서 직접 매핑됩니다. |
appDisplayName |
target.application |
appDisplayName에서 직접 매핑됩니다. |
appliedConditionalAccessPolicies.[].displayName |
security_result.[].rule_name, about.[].user.user_display_name |
appliedConditionalAccessPolicies.[].displayName에서 직접 매핑됩니다. |
appliedConditionalAccessPolicies.[].enforcedGrantControls |
security_result.[].rule_labels.value |
라벨 키가 'applied_conditional_access_policies_enforced_grant_controls'인 appliedConditionalAccessPolicies.[].enforcedGrantControls에서 직접 매핑됩니다. |
appliedConditionalAccessPolicies.[].enforcedSessionControls |
security_result.[].rule_labels.value |
라벨 키가 'applied_conditional_access_policies_enforced_session_controls'인 appliedConditionalAccessPolicies.[].enforcedSessionControls에서 직접 매핑됩니다. |
appliedConditionalAccessPolicies.[].id |
security_result.[].rule_id, about.[].user.userid |
appliedConditionalAccessPolicies.[].id에서 직접 매핑됩니다. |
appliedConditionalAccessPolicies.[].result |
security_result.[].detection_fields.value, about.[].labels.value |
라벨 키가 '결과'인 appliedConditionalAccessPolicies.[].result에서 직접 매핑됩니다. |
authenticationDetails.[].authenticationMethod |
security_result.[].detection_fields.value |
라벨 키가 'authenticationMethod'인 authenticationDetails.[].authenticationMethod에서 직접 매핑됩니다. |
authenticationDetails.[].authenticationMethodDetail |
security_result.[].detection_fields.value |
라벨 키가 'authenticationMethodDetail'인 authenticationDetails.[].authenticationMethodDetail에서 직접 매핑됩니다. |
authenticationDetails.[].authenticationStepDateTime |
security_result.[].detection_fields.value |
라벨 키가 'authenticationStepDateTime'인 authenticationDetails.[].authenticationStepDateTime에서 직접 매핑됩니다. |
authenticationDetails.[].authenticationStepRequirement |
security_result.[].detection_fields.value |
라벨 키가 'authenticationStepRequirement'인 authenticationDetails.[].authenticationStepRequirement에서 직접 매핑됩니다. |
authenticationDetails.[].authenticationStepResultDetail |
security_result.[].detection_fields.value |
라벨 키가 'authenticationStepResultDetail'인 authenticationDetails.[].authenticationStepResultDetail에서 직접 매핑됩니다. |
authenticationDetails.[].succeeded |
security_result.action |
값이 'true'이면 ALLOW, 그렇지 않으면 BLOCK |
authenticationRequirement |
additional.fields.value.string_value |
라벨 키가 'AuthenticationRequirement'인 authenticationRequirement에서 직접 매핑됩니다. |
authenticationRequirementPolicies.[].detail |
security_result.detection_fields.value |
라벨 키가 'detail'인 authenticationRequirementPolicies.[].detail에서 직접 매핑됩니다. |
authenticationRequirementPolicies.[].requirementProvider |
security_result.detection_fields.value |
라벨 키가 'requirementProvider'인 authenticationRequirementPolicies.[].requirementProvider에서 직접 매핑됩니다. |
callerIpAddress |
principal.ip, principal.asset.ip |
callerIpAddress에서 직접 매핑됩니다. |
category |
metadata.description |
category에서 직접 매핑됩니다. |
clientAppUsed |
principal.application |
clientAppUsed에서 직접 매핑됩니다. |
conditionalAccessStatus |
additional.fields.value.string_value |
라벨 키가 'conditionalAccessStatus'인 conditionalAccessStatus에서 직접 매핑됩니다. |
correlationId |
network.session_id, security_result.detection_fields.value |
correlationId에서 직접 매핑됩니다. 라벨 키가 'CorrelationId'인 security_result.detection_fields.value로도 사용됩니다. |
createdDateTime |
when |
when 필드는 createdDateTime 필드에서 파생됩니다. 날짜와 시간은 grok을 사용하여 createdDateTime 필드에서 추출된 후 결합되어 when 필드를 형성합니다. |
deviceDetail.browser |
network.http.user_agent |
deviceDetail.browser에서 직접 매핑됩니다. |
deviceDetail.deviceId |
principal.asset.asset_id, principal.asset_id |
deviceDetail.deviceId에서 직접 매핑되며 '기기 ID:'가 접두사로 붙습니다. |
deviceDetail.displayName |
principal.asset.hostname |
deviceDetail.displayName에서 직접 매핑됩니다. |
deviceDetail.isCompliant |
principal.asset.attribute.labels.value |
라벨 키가 'isCompliant'인 deviceDetail.isCompliant에서 직접 매핑됩니다. |
deviceDetail.isManaged |
principal.asset.attribute.labels.value |
라벨 키가 'isManaged'인 deviceDetail.isManaged에서 직접 매핑됩니다. |
deviceDetail.operatingSystem |
principal.platform_version |
deviceDetail.operatingSystem에서 직접 매핑됩니다. |
deviceDetail.trustType |
principal.asset.attribute.labels.value |
라벨 키가 'trustType'인 deviceDetail.trustType에서 직접 매핑됩니다. |
durationMs |
additional.fields.value.string_value |
라벨 키가 'durationMs'인 durationMs에서 직접 매핑됩니다. |
event.id |
- | 안내 (3번 항목)에 따라 매핑되지 않았습니다. |
id |
metadata.product_log_id |
id에서 직접 매핑됩니다. |
identity |
target.user.user_display_name |
userId과 다르고 이메일 주소가 아닌 경우 identity에서 직접 매핑됩니다. |
initiatedBy.user.displayName |
principal.user.user_display_name |
initiatedBy.user.displayName에서 직접 매핑됩니다. |
initiatedBy.user.id |
principal.user.userid, principal.user.windows_sid |
initiatedBy.user.id에서 직접 매핑됩니다. |
initiatedBy.user.ipAddress |
principal.ip, principal.asset.ip |
initiatedBy.user.ipAddress에서 직접 매핑됩니다. |
initiatedBy.user.userPrincipalName |
principal.user.email_addresses, principal.user.userid |
initiatedBy.user.userPrincipalName에서 직접 매핑됩니다. 이메일 주소인 경우 email_addresses에 매핑되고, 그렇지 않으면 userid에 매핑됩니다. |
Level |
security_result.severity_details, level |
Level에서 직접 매핑됩니다. |
level |
security_result.severity_details, security_result.severity |
level에서 직접 매핑됩니다. 대문자로 변환한 후 security_result.severity에도 매핑됩니다. 'Information', 'Informational', '0', '4', 'Warning', '1', '3', 'Error', '2', 'Critical' 값에 대한 특별 처리 |
location.city |
principal.location.city |
location.city에서 직접 매핑됩니다. |
location.countryOrRegion |
principal.location.country_or_region |
location.countryOrRegion에서 직접 매핑됩니다. |
location.geoCoordinates.altitude |
additional.fields.value.string_value |
라벨 키가 'location_geoCoordinates_altitude'인 location.geoCoordinates.altitude에서 직접 매핑됩니다. |
location.geoCoordinates.latitude |
principal.location.region_latitude, principal.location.region_coordinates.latitude |
location.geoCoordinates.latitude에서 직접 매핑됩니다. |
location.geoCoordinates.longitude |
principal.location.region_longitude, principal.location.region_coordinates.longitude |
location.geoCoordinates.longitude에서 직접 매핑됩니다. |
location.state |
principal.location.state |
location.state에서 직접 매핑됩니다. |
location |
principal.location.name |
location에서 직접 매핑됩니다. |
log_type |
metadata.log_type |
log_type에서 직접 매핑됩니다. |
networkLocationDetails.[].networkNames |
additional.fields.value.string_value |
라벨 키가 'networkName {index}'인 networkLocationDetails.[].networkNames의 연결된 값입니다. |
networkLocationDetails.[].networkType |
security_result.detection_fields.value, additional.fields.value.string_value |
라벨 키가 'networkType'인 networkLocationDetails.[].networkType에서 직접 매핑됩니다. 라벨 키가 'networkType {index}'인 additional.fields.value.string_value로도 사용됩니다. |
operationName |
event_type |
operationName이 '로그인 활동'이면 USER_LOGIN입니다. operationName이 '그룹에 구성원 추가'인 경우 USER_CHANGE_PERMISSIONS |
operationType |
security_result.action_details |
operationType에서 직접 매핑됩니다. |
properties.activity |
security_result.summary |
properties.activity에서 직접 매핑됩니다. |
properties.activityDateTime |
when |
properties.activityDateTime 필드에서 파싱됩니다. 필드가 예상되는 'yyyy-MM-ddTHH:mm:ss.SSSZ' 형식 또는 'ISO8601' 형식이 아닌 경우 파서는 'MM/dd/yyyy HH:mm:ss A' 또는 'MM/d/yyyy HH:mm:ss A'와 같은 다른 형식을 시도합니다. |
properties.activityDisplayName |
security_result.summary |
properties.activityDisplayName에서 직접 매핑됩니다. |
properties.additionalInfo |
network.http.user_agent, target.url |
JSON으로 파싱되고 키가 userAgent인 경우 값을 network.http.user_agent 및 network.http.parsed_user_agent에 매핑합니다. 키가 alertUrl인 경우 값을 target.url에 매핑합니다. |
properties.appliedConditionalAccessPolicies.[].displayName |
security_result.[].rule_name |
properties.appliedConditionalAccessPolicies.[].displayName에서 직접 매핑됩니다. |
properties.appliedConditionalAccessPolicies.[].enforcedGrantControls |
security_result.[].rule_labels.value |
라벨 키가 'applied_conditional_access_policies_enforced_grant_controls'인 properties.appliedConditionalAccessPolicies.[].enforcedGrantControls에서 직접 매핑됩니다. |
properties.appliedConditionalAccessPolicies.[].enforcedSessionControls |
security_result.[].rule_labels.value |
라벨 키가 'applied_conditional_access_policies_enforced_session_controls'인 properties.appliedConditionalAccessPolicies.[].enforcedSessionControls에서 직접 매핑됩니다. |
properties.appliedConditionalAccessPolicies.[].id |
security_result.[].rule_id |
properties.appliedConditionalAccessPolicies.[].id에서 직접 매핑됩니다. |
properties.appliedConditionalAccessPolicies.[].result |
security_result.[].detection_fields.value |
라벨 키가 '결과'인 properties.appliedConditionalAccessPolicies.[].result에서 직접 매핑됩니다. |
properties.appId |
appId |
properties.appId에서 직접 매핑됩니다. |
properties.appDisplayName |
target.application |
properties.appDisplayName에서 직접 매핑됩니다. |
properties.authenticationDetails.[].authenticationMethod |
security_result.detection_fields.value |
라벨 키가 'authenticationMethod'인 properties.authenticationDetails.[].authenticationMethod에서 직접 매핑됩니다. |
properties.authenticationDetails.[].authenticationMethodDetail |
security_result.detection_fields.value |
라벨 키가 'authenticationMethodDetail'인 properties.authenticationDetails.[].authenticationMethodDetail에서 직접 매핑됩니다. |
properties.authenticationDetails.[].authenticationStepDateTime |
security_result.detection_fields.value |
라벨 키가 'authenticationStepDateTime'인 properties.authenticationDetails.[].authenticationStepDateTime에서 직접 매핑됩니다. |
properties.authenticationDetails.[].authenticationStepRequirement |
security_result.detection_fields.value |
라벨 키가 'authenticationStepRequirement'인 properties.authenticationDetails.[].authenticationStepRequirement에서 직접 매핑됩니다. |
properties.authenticationDetails.[].authenticationStepResultDetail |
security_result.detection_fields.value |
라벨 키가 'authenticationStepResultDetail'인 properties.authenticationDetails.[].authenticationStepResultDetail에서 직접 매핑됩니다. |
properties.authenticationRequirement |
additional.fields.value.string_value |
라벨 키가 'AuthenticationRequirement'인 properties.authenticationRequirement에서 직접 매핑됩니다. |
properties.authenticationRequirementPolicies.[].detail |
security_result.detection_fields.value |
라벨 키가 'detail'인 properties.authenticationRequirementPolicies.[].detail에서 직접 매핑됩니다. |
properties.authenticationRequirementPolicies.[].requirementProvider |
security_result.detection_fields.value |
라벨 키가 'requirementProvider'인 properties.authenticationRequirementPolicies.[].requirementProvider에서 직접 매핑됩니다. |
properties.clientAppUsed |
principal.application |
properties.clientAppUsed에서 직접 매핑됩니다. |
properties.conditionalAccessStatus |
additional.fields.value.string_value |
라벨 키가 'conditionalAccessStatus'인 properties.conditionalAccessStatus에서 직접 매핑됩니다. |
properties.crossTenantAccessType |
additional.fields.value.string_value |
라벨 키가 'crossTenantAccessType'인 properties.crossTenantAccessType에서 직접 매핑됩니다. |
properties.detectedDateTime |
additional.fields.value.string_value |
라벨 키가 'detectedDateTime'인 properties.detectedDateTime에서 직접 매핑됩니다. |
properties.detectionTimingType |
additional.fields.value.string_value |
라벨 키가 'detectionTimingType'인 properties.detectionTimingType에서 직접 매핑됩니다. |
properties.homeTenantId |
additional.fields.value.string_value |
라벨 키가 'homeTenantId'인 properties.homeTenantId에서 직접 매핑됩니다. |
properties.id |
metadata.product_log_id |
properties.id에서 직접 매핑됩니다. |
properties.initiatedBy.user.displayName |
principal.user.user_display_name |
properties.initiatedBy.user.displayName에서 직접 매핑됩니다. |
properties.initiatedBy.user.id |
principal.user.windows_sid |
properties.initiatedBy.user.id에서 직접 매핑됩니다. |
properties.initiatedBy.user.ipAddress |
principal.ip, principal.asset.ip |
properties.initiatedBy.user.ipAddress에서 직접 매핑됩니다. |
properties.initiatedBy.user.userPrincipalName |
principal.user.email_addresses, principal.user.userid |
properties.initiatedBy.user.userPrincipalName에서 직접 매핑됩니다. 이메일 주소인 경우 email_addresses에 매핑되고, 그렇지 않으면 userid에 매핑됩니다. |
properties.ipAddress |
principal.ip, principal.asset.ip |
properties.ipAddress에서 직접 매핑됩니다. |
properties.isGuest |
additional.fields.value.string_value |
라벨 키가 'isGuest'인 properties.isGuest에서 직접 매핑됩니다. |
properties.isDeleted |
additional.fields.value.string_value |
라벨 키가 'isDeleted'인 properties.isDeleted에서 직접 매핑됩니다. |
properties.isProcessing |
additional.fields.value.string_value |
라벨 키가 'isProcessing'인 properties.isProcessing에서 직접 매핑됩니다. |
properties.lastUpdatedDateTime |
additional.fields.value.string_value |
라벨 키가 'lastUpdatedDateTime'인 properties.lastUpdatedDateTime에서 직접 매핑됩니다. |
properties.location.city |
principal.location.city |
properties.location.city에서 직접 매핑됩니다. |
properties.location.countryOrRegion |
principal.location.country_or_region |
properties.location.countryOrRegion에서 직접 매핑됩니다. |
properties.location.geoCoordinates.latitude |
principal.location.region_latitude, principal.location.region_coordinates.latitude |
properties.location.geoCoordinates.latitude에서 직접 매핑됩니다. |
properties.location.geoCoordinates.longitude |
principal.location.region_longitude, principal.location.region_coordinates.longitude |
properties.location.geoCoordinates.longitude에서 직접 매핑됩니다. |
properties.location.state |
principal.location.state |
properties.location.state에서 직접 매핑됩니다. |
properties.networkLocationDetails.[].networkNames |
additional.fields.value.string_value |
라벨 키가 'properties networkName {index}'인 properties.networkLocationDetails.[].networkNames의 연결된 값입니다. |
properties.networkLocationDetails.[].networkType |
additional.fields.value.string_value |
라벨 키가 'properties networkType {index}'인 properties.networkLocationDetails.[].networkType에서 직접 매핑됩니다. |
properties.riskEventType |
additional.fields.value.string_value |
라벨 키가 'riskEventType'인 properties.riskEventType에서 직접 매핑됩니다. |
properties.riskLastUpdatedDateTime |
additional.fields.value.string_value |
라벨 키가 'riskLastUpdatedDateTime'인 properties.riskLastUpdatedDateTime에서 직접 매핑됩니다. |
properties.riskLevel |
additional.fields.value.string_value |
라벨 키가 'riskLevel'인 properties.riskLevel에서 직접 매핑됩니다. |
properties.riskLevelDuringSignIn |
additional.fields.value.string_value |
라벨 키가 'riskLevelDuringSignIn'인 properties.riskLevelDuringSignIn에서 직접 매핑됩니다. |
properties.riskState |
additional.fields.value.string_value |
라벨 키가 'riskState'인 properties.riskState에서 직접 매핑됩니다. |
properties.riskDetail |
additional.fields.value.string_value |
라벨 키가 'riskDetail'인 properties.riskDetail에서 직접 매핑됩니다. |
properties.riskType |
additional.fields.value.string_value |
라벨 키가 'riskType'인 properties.riskType에서 직접 매핑됩니다. |
properties.source |
additional.fields.value.string_value |
라벨 키가 'source'인 properties.source에서 직접 매핑됩니다. |
properties.targetResources.0.id |
target.user.product_object_id |
properties.targetResources.0.id에서 직접 매핑됩니다. |
properties.targetResources.modifiedProperties.0.newValue |
target.group.product_object_id |
properties.targetResources.modifiedProperties.0.newValue에서 직접 매핑됩니다. |
properties.tokenIssuerType |
additional.fields.value.string_value |
라벨 키가 'tokenIssuerType'인 properties.tokenIssuerType에서 직접 매핑됩니다. |
properties.userAgent |
network.http.user_agent, network.http.parsed_user_agent |
properties.userAgent에서 직접 매핑됩니다. |
properties.userDisplayName |
target.user.user_display_name |
properties.userDisplayName에서 직접 매핑됩니다. |
properties.userId |
target.user.product_object_id |
properties.userId에서 직접 매핑됩니다. |
properties.userPrincipalName |
target.user.userid, target.user.email_addresses |
properties.userPrincipalName에서 직접 매핑됩니다. 이메일 주소인 경우 email_addresses에 매핑되고, 그렇지 않으면 userid에 매핑됩니다. |
result |
security_result.action, security_result.action_details |
result이 'success'이면 ALLOW입니다. |
resultDescription |
security_result.description |
resultDescription에서 직접 매핑됩니다. |
resultSignature |
additional.fields.value.string_value |
라벨 키가 'resultSignature'인 resultSignature에서 직접 매핑됩니다. |
resultType |
security_result.rule_id, action, security_result.summary |
resultType이 '0'이면 ALLOW 및 '로그인이 완료되었습니다'. 그렇지 않으면 BLOCK 및 '로그인 실패가 발생했습니다'. |
resourceId |
target.resource.id, target.resource.product_object_id |
resourceId에서 직접 매핑됩니다. |
resourceDisplayName |
target.resource.name, appDisplayName |
resourceDisplayName에서 직접 매핑됩니다. |
riskDetail |
additional.fields.value.string_value |
라벨 키가 'riskDetail'인 riskDetail에서 직접 매핑됩니다. |
riskEventTypes.[]. |
additional.fields.value.string_value, additional.fields.value.list_value.values.string_value |
값은 additional.fields에서 키가 'riskEventTypes'인 목록에 추가됩니다. 또한 각 값은 additional.fields에서 키가 'riskEventType'인 별도의 필드로 추가됩니다. |
riskEventTypes_v2.[]. |
additional.fields.value.list_value.values.string_value |
값이 additional.fields에서 키가 'riskEventTypes_v2'인 목록에 추가됩니다. |
riskLevelAggregated |
additional.fields.value.string_value |
라벨 키가 'riskLevelAggregated'인 riskLevelAggregated에서 직접 매핑됩니다. |
riskLevelDuringSignIn |
additional.fields.value.string_value |
라벨 키가 'riskLevelDuringSignIn'인 riskLevelDuringSignIn에서 직접 매핑됩니다. |
riskState |
additional.fields.value.string_value |
라벨 키가 'riskState'인 riskState에서 직접 매핑됩니다. |
status.additionalDetails |
security_result.description |
status.additionalDetails에서 직접 매핑됩니다. |
status.errorCode |
security_result.rule_id, errorCode |
status.errorCode에서 직접 매핑됩니다. |
target.displayName |
resourceDisplayName |
target.displayName에서 직접 매핑됩니다. |
target.id |
resourceId |
target.id에서 직접 매핑됩니다. |
target.modifiedProperties.[].displayName |
target.resource.attribute.labels.key |
target.modifiedProperties.[].displayName에서 직접 매핑됩니다. |
target.modifiedProperties.[].newValue |
target.resource.attribute.labels.value, target.resource.product_object_id |
target.modifiedProperties.[].newValue에서 직접 매핑됩니다. |
target.modifiedProperties.[].oldValue |
target.resource.attribute.labels.value |
target.modifiedProperties.[].oldValue에서 직접 매핑됩니다. |
target.type |
target.resource.type |
target.type에서 직접 매핑됩니다. |
tenantId |
metadata.product_deployment_id |
tenantId에서 직접 매핑됩니다. |
time |
when |
when 필드는 time 필드에서 파생됩니다. 날짜와 시간은 grok을 사용하여 time 필드에서 추출된 후 결합되어 when 필드를 형성합니다. |
userAgent |
network.http.user_agent, network.http.parsed_user_agent |
userAgent에서 직접 매핑됩니다. |
userDisplayName |
target.user.user_display_name |
userDisplayName에서 직접 매핑됩니다. |
userId |
target.user.product_object_id |
userId에서 직접 매핑됩니다. |
userPrincipalName |
target.user.userid, principal.administrative_domain, target.user.email_addresses |
userPrincipalName에서 직접 매핑됩니다. 이메일 주소인 경우 email_addresses에 매핑되고 도메인 부분이 추출되어 principal.administrative_domain에 매핑됩니다. 그렇지 않으면 userid로 매핑됩니다. |
| (파서 로직) | event.idm.is_alert, event.idm.is_significant |
심각도 수준이 '심각'이면 true로 설정합니다. |
| (파서 로직) | event.idm.read_only_udm.metadata.event_type |
has_target_user이 'true'인 경우 'USER_LOGIN'으로 설정됩니다. has_principal_user이 'true'인 경우 'USER_UNCATEGORIZED'로 설정됩니다. has_principal이 'true'인 경우 'STATUS_UPDATE'로 설정됩니다. 그렇지 않으면 'GENERIC_EVENT'로 설정됩니다. |
| (파서 로직) | event.idm.read_only_udm.metadata.vendor_name |
'Microsoft'로 설정됩니다. |
| (파서 로직) | event.idm.read_only_udm.metadata.product_name |
'Azure AD'로 설정합니다. |
| (파서 로직) | event.idm.read_only_udm.extensions.auth.type |
'SSO'로 설정합니다. |
| (파서 로직) | event.idm.read_only_udm.extensions.auth.mechanism |
isInteractive가 'true'인 경우 'INTERACTIVE'로 설정합니다. 그렇지 않으면 'MECHANISM_OTHER'로 설정합니다. |
| (파서 로직) | security_result.action |
결과가 성공이면 ALLOW로 설정합니다. |
| (파서 로직) | security_result.action |
resultType이 0이면 ALLOW로 설정합니다. |
| (파서 로직) | security_result.action |
resultType이 0이 아니고 ''이 아닌 경우 BLOCK으로 설정됩니다. |
| (파서 로직) | security_result.category |
resultType이 0이 아니고 ''이 아닌 경우 'AUTH_VIOLATION'으로 설정됩니다. |
| (파서 로직) | security_result.description |
operationName이 '그룹에 구성원 추가'이고 결과가 '성공'인 경우 '그룹 멤버십 수정됨'으로 설정됩니다. |
| (파서 로직) | security_result.priority |
properties.riskLevelDuringSignIn이 'medium'인 경우 'MEDIUM_PRIORITY'로 설정됩니다. |
| (파서 로직) | security_result.summary |
resultType이 0인 경우 'Successful login occurred'로 설정됩니다. |
| (파서 로직) | security_result.summary |
resultType이 0이 아니고 ''이 아닌 경우 '로그인 실패 발생'으로 설정됩니다. |
| (파서 로직) | security_result.summary |
있는 경우 properties.activityDisplayName으로 설정합니다. |
| (파서 로직) | security_result.severity |
수준이 'Information', 'Informational', '0' 또는 '4'인 경우 INFORMATIONAL로 설정됩니다. 수준이 '경고', '1' 또는 '3'인 경우 MEDIUM으로 설정합니다. 수준이 'Error' 또는 '2'인 경우 ERROR로 설정됩니다. 수준이 'Critical'인 경우 CRITICAL로 설정됩니다. |
| (파서 로직) | security_result.severity |
resultType이 0이 아니고 ''이 아닌 경우 ERROR로 설정됩니다. |
변경 로그
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.