Microsoft Entra ID 로그인 로그 수집

다음에서 지원:

이 문서에서는 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의 모든 권한에 동의를 부여할 수 있습니다.

이 메서드는 캡처가 사용 설정된 Azure Event Hub를 통해 Entra ID 로그인 로그를 스트리밍하여 데이터를 Azure Blob Storage에 씁니다. 그러면 Google SecOps가 Azure Blob Storage V2 피드 유형을 사용하여 Blob Storage에서 로그를 수집합니다.

Azure 스토리지 계정 구성

스토리지 계정 만들기

  1. Azure 포털에서 스토리지 계정을 검색합니다.
  2. + 만들기를 클릭합니다.
  3. 다음 구성 세부정보를 제공합니다.

    설정
    구독 Azure 구독 선택
    리소스 그룹 기존 항목 선택 또는 새로 만들기
    스토리지 계정 이름 고유한 이름 (예: secopsaadsignin)을 입력합니다.
    리전 Event Hub 네임스페이스와 가장 가까운 리전을 선택합니다.
    성능 표준 (권장)
    중복성 LRS (로컬 중복 스토리지) 또는 GRS (지리적 중복 스토리지)
  4. 검토 + 만들기를 클릭합니다.

  5. 개요를 검토하고 만들기를 클릭합니다.

  6. 배포가 완료될 때까지 기다립니다.

스토리지 계정 사용자 인증 정보 가져오기

  1. 생성한 스토리지 계정으로 이동합니다.
  2. 왼쪽 탐색 메뉴의 보안 + 네트워킹에서 액세스 키를 선택합니다.
  3. 키 표시를 클릭합니다.
  4. 다음을 복사하여 저장합니다.
    • 스토리지 계정 이름
    • 키 1 또는 키 2: 공유 액세스 키입니다.

Event Hub 네임스페이스 및 Event Hub 만들기

Event Hub 네임스페이스 만들기

  1. Azure 포털에서 Event Hubs를 검색합니다.
  2. + 만들기를 클릭합니다.
  3. 다음 구성 세부정보를 제공합니다.

    설정
    구독 Azure 구독 선택
    리소스 그룹 스토리지 계정과 동일한 리소스 그룹을 선택합니다.
    네임스페이스 이름 고유한 이름 (예: secops-entraid-signin)을 입력합니다.
    위치 스토리지 계정과 동일한 리전을 선택합니다.
    가격 책정 등급 표준 (Event Hub Capture에 필요)
  4. 검토 + 만들기를 클릭한 다음 만들기를 클릭합니다.

  5. 배포가 완료될 때까지 기다립니다.

Event Hub 만들기

  1. 만든 Event Hub 네임스페이스로 이동합니다.
  2. 상단에서 + Event Hub를 클릭합니다.
  3. 다음 구성 세부정보를 제공합니다.
    • 이름: 이름을 입력합니다 (예: entraid-signin-logs).
    • 파티션 수: 2 (기본값, 처리량을 높이려면 늘리세요).
    • 삭제 정책: 삭제
    • 보관 시간 (시간): 24 (최소, 복원력을 위해 필요한 경우 증가).
  4. 검토 + 만들기를 클릭한 다음 만들기를 클릭합니다.

Event Hub Capture 사용 설정

  1. 만든 Event Hub (네임스페이스 내)로 이동합니다.
  2. 왼쪽 탐색 메뉴에서 캡처를 선택합니다.
  3. 캡처사용으로 설정합니다.
  4. 다음 구성 세부정보를 제공합니다.

    설정
    기간 (분) 5 (거의 실시간의 경우 더 낮음)
    크기 창 (MB) 300
    캡처 제공자 Azure Blob Storage
    Azure 구독 구독 선택
    스토리지 계정 생성한 스토리지 계정을 선택합니다.
    Blob 컨테이너 컨테이너 만들기 또는 선택 (예: entraid-signin-capture)
  5. 저장을 클릭합니다.

Entra ID 진단 설정 구성

  1. Azure 포털에서 Microsoft Entra ID를 검색합니다.
  2. 왼쪽 탐색 메뉴에서 모니터링 및 상태 > 진단 설정으로 이동합니다.
  3. 진단 설정 추가를 클릭합니다.
  4. 다음 구성 세부정보를 제공합니다.
    • 진단 설정 이름: 설명이 포함된 이름 (예: signin-logs-to-eventhub)을 입력합니다.
    • 로그 섹션에서 내보낼 로그인 로그 카테고리를 선택합니다.
      • SignInLogs - 대화형 사용자 로그인입니다.
      • NonInteractiveUserSignInLogs - 비대화형 사용자 로그인 (선택사항, 권장).
      • ServicePrincipalSignInLogs - 서비스 주 구성원 로그인 (선택사항).
      • ManagedIdentitySignInLogs - 관리형 ID 로그인 (선택사항).
    • 대상 세부정보 섹션에서 이벤트 허브로 스트리밍을 선택합니다.
    • 구독: Event Hub 네임스페이스가 포함된 구독을 선택합니다.
    • Event Hub 네임스페이스: 만든 네임스페이스를 선택합니다 (예: secops-entraid-signin).
    • 이벤트 허브 이름: 생성한 이벤트 허브를 선택합니다 (예: entraid-signin-logs).
    • 이벤트 허브 정책 이름: RootManageSharedAccessKey를 선택합니다.
  5. 저장을 클릭합니다.

피드 설정

Google SecOps 플랫폼에서 피드를 설정하는 방법은 두 가지입니다.

  • SIEM 설정 > 피드 > 새 피드 추가
  • 콘텐츠 허브 > 콘텐츠 팩 > 시작하기

Entra ID 로그인 로그를 수집하도록 Google SecOps에서 피드 구성

  1. Azure 플랫폼 팩을 클릭합니다.
  2. Azure AD 로그 유형을 찾습니다.
  3. 다음 필드의 값을 지정합니다.

    • 소스 유형: Microsoft Azure Blob Storage V2
    • Azure URI: 캡처 컨테이너 경로와 함께 Blob 서비스 엔드포인트 URL을 입력합니다.

      https://<storage-account>.blob.core.windows.net/entraid-signin-capture/
      

      <storage-account>을 Azure 스토리지 계정 이름으로 바꿉니다.

    • 소스 삭제 옵션: 환경설정에 따라 삭제 옵션을 선택합니다.

      • 삭제 안함: 전송 후 파일을 삭제하지 않습니다.
      • 전송된 파일 삭제: 전송이 완료되면 파일을 삭제합니다.
      • 전송된 파일 및 빈 디렉터리 삭제: 전송이 완료되면 파일과 빈 디렉터리를 삭제합니다.
    • 최대 파일 기간: 지난 일수 동안 수정된 파일을 포함합니다. 기본값은 180일입니다.

    • 공유 키: 스토리지 계정의 공유 액세스 키 값을 입력합니다.

    • 애셋 네임스페이스: 애셋 네임스페이스입니다.

    • 수집 라벨: 이 피드의 이벤트에 적용할 라벨입니다.

  4. 피드 만들기를 클릭합니다.

피드를 만든 후 로그가 Google SecOps에 표시되기까지 5~10분 정도 걸릴 수 있습니다.

이 제품군 내에서 다양한 로그 유형에 대해 여러 피드를 구성하는 방법에 관한 자세한 내용은 제품별 피드 구성을 참고하세요.

Google Security Operations 피드에 대한 자세한 내용은 Google Security Operations 피드 문서를 참조하세요. 각 피드 유형의 요구사항은 유형별 피드 구성을 참조하세요.

Azure Storage 방화벽 구성 (사용 설정된 경우)

Azure 스토리지 계정에서 방화벽을 사용하는 경우 Google SecOps IP 범위를 추가해야 합니다.

  1. Azure 포털에서 스토리지 계정으로 이동합니다.
  2. 보안 + 네트워킹에서 네트워킹을 선택합니다.
  3. 방화벽 및 가상 네트워크에서 선택한 가상 네트워크 및 IP 주소에서 사용 설정됨을 선택합니다.
  4. 방화벽 섹션의 주소 범위에서 + IP 범위 추가를 클릭합니다.
  5. 각 Google SecOps IP 범위를 CIDR 표기법으로 추가합니다.
  6. 저장을 클릭합니다.

방법 2: 서드 파티 API

이 메서드는 Microsoft Graph API를 사용하여 Microsoft 테넌트에서 직접 Entra ID 로그인 로그를 가져옵니다.

IP 허용 목록 구성

피드를 만들기 전에 Microsoft Azure 네트워크 설정 또는 조건부 액세스 정책에서 Google SecOps IP 범위를 허용 목록에 추가해야 합니다.

Google SecOps IP 범위 가져오기

  1. SIEM 설정> 피드로 이동합니다.
  2. 새 피드 추가를 클릭합니다.
  3. 피드 생성 인터페이스에 표시된 IP 범위를 확인합니다.
  4. 또는 피드 관리 API를 사용하여 IP 범위를 프로그래매틱 방식으로 가져옵니다.

워크로드 아이덴티티에 대한 조건부 액세스 구성 (필요한 경우)

조직에서 위치별 액세스를 제한하는 조건부 액세스 정책을 사용하는 경우 다음 단계를 따르세요.

  1. Microsoft Entra 관리 센터에서 보호 > 조건부 액세스 > 명명된 위치로 이동합니다.
  2. + 새 위치를 클릭합니다.
  3. 다음 구성 세부정보를 제공합니다.
    • 이름: Google SecOps IP Ranges를 입력합니다.
    • 신뢰할 수 있는 위치로 표시: 선택사항이며 보안 정책에 따라 다릅니다.
    • IP 범위: CIDR 표기법으로 각 Google SecOps IP 범위를 추가합니다.
  4. 만들기를 클릭합니다.
  5. 조건부 액세스 > 정책으로 이동합니다.
  6. 워크로드 아이덴티티에 적용되는 정책의 경우 Google SecOps IP Ranges 이름이 지정된 위치 또는 특정 서비스 주체에 대한 제외를 구성합니다.

Microsoft Azure AD API 액세스 구성

앱 등록 만들기

  1. Microsoft Entra 관리 센터 또는 Azure 포털에 로그인합니다.
  2. ID > 애플리케이션 > 앱 등록으로 이동합니다.
  3. 신규 등록을 클릭합니다.
  4. 다음 구성 세부정보를 제공합니다.

    • 이름: 설명이 포함된 이름을 입력합니다 (예: Google SecOps Sign-In Logs Integration).
    • 지원되는 계정 유형: 이 조직 디렉터리의 계정만 (단일 테넌트)을 선택합니다.
    • 리디렉션 URI: 비워 둡니다 (서비스 주 구성원 인증에는 필요하지 않음).
  5. 등록을 클릭합니다.

  6. 등록 후 다음 값을 복사하여 저장합니다.

    • 애플리케이션 (클라이언트) ID
    • 디렉터리 (테넌트) ID

API 권한 구성

통합에는 다음 Microsoft Graph 애플리케이션 권한이 필요합니다.

  1. 앱 등록에서 API 권한으로 이동합니다.
  2. 권한 추가를 클릭합니다.
  3. Microsoft Graph > 애플리케이션 권한을 선택합니다.
  4. 다음 권한을 선택합니다.
    • AuditLog.Read.All - 로그인 로그를 읽는 데 필요합니다.
    • Directory.Read.All - 로그인 로그 액세스를 위해 Microsoft Graph API에서 필요합니다 (알려진 문제).
    • SecurityEvents.Read.All - Google Security Operations에 필요합니다.
  5. 권한 추가를 클릭합니다.
  6. [조직 이름]에 대한 관리자 동의 허용을 클릭합니다.
  7. 상태 열에 세 가지 권한 모두에 대해 [조직]에 부여됨이 표시되는지 확인합니다.
권한 유형 설명
AuditLog.Read.All 애플리케이션 모든 로그인 및 감사 로그 데이터 읽기
Directory.Read.All 애플리케이션 디렉터리 데이터 읽기 (API 액세스에 필요)
SecurityEvents.Read.All 애플리케이션 보안 이벤트 읽기

클라이언트 보안 비밀번호 만들기

  1. 인증서 및 보안 비밀로 이동합니다.
  2. '새 클라이언트 보안 비밀번호'를 클릭합니다.
  3. 다음 구성 세부정보를 제공합니다.

    • 설명: 설명이 포함된 이름 (예: Google SecOps Feed)을 입력합니다.
    • 만료: 만료 기간을 선택합니다.
  4. 추가를 클릭합니다.

  5. 중요: 클라이언트 보안 비밀번호 을 즉시 복사하세요. 이 값은 한 번만 표시되며 나중에 검색할 수 없습니다.

피드를 만들기 전에 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"
    

피드 설정

Google SecOps 플랫폼에서 피드를 설정하는 방법은 두 가지입니다.

  • SIEM 설정 > 피드 > 새 피드 추가
  • 콘텐츠 허브 > 콘텐츠 팩 > 시작하기

Microsoft Azure AD 로그인 로그를 수집하도록 Google SecOps에서 피드 구성

  1. Azure 플랫폼 팩을 클릭합니다.
  2. Azure AD 로그 유형을 찾습니다.
  3. 다음 필드의 값을 지정합니다.

    • 소스 유형: 서드 파티 API (권장)
    • 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/signIns
      
    • API 인증 엔드포인트: Microsoft Active Directory 인증 엔드포인트:

      login.microsoftonline.com
      

    고급 옵션:

    • 피드 이름: 피드를 식별하는 미리 채워진 값입니다.
    • 애셋 네임스페이스: 피드가 연결될 애셋 네임스페이스입니다.
    • 수집 라벨: 이 피드의 모든 이벤트에 라벨이 추가됩니다.
  4. 피드 만들기를 클릭합니다.

피드를 만든 후에는 컨텍스트 데이터가 주기적으로 검색됩니다. 초기 디렉터리 스냅샷이 Google SecOps에 표시되는 데 최대 24시간이 걸릴 수 있습니다.

이 제품군 내에서 다양한 로그 유형에 대해 여러 피드를 구성하는 방법에 관한 자세한 내용은 제품별 피드 구성을 참고하세요.

Google Security Operations 피드에 대한 자세한 내용은 Google Security Operations 피드 문서를 참조하세요. 각 피드 유형의 요구사항은 유형별 피드 구성을 참조하세요. 피드를 만들 때 문제가 발생하면 Google Security Operations 지원팀에 문의하세요.

리전 엔드포인트

소버린 클라우드의 Microsoft Azure AD 배포의 경우 적절한 리전 엔드포인트를 사용하세요.

클라우드 환경 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 KeyuserAgent이면 Valuenetwork.http.user_agentnetwork.http.parsed_user_agent에 매핑합니다. KeyalertUrl이면 Valuetarget.url에 매핑합니다.
additionalInfo.[].Value network.http.user_agent, target.url KeyuserAgent이면 Valuenetwork.http.user_agentnetwork.http.parsed_user_agent에 매핑합니다. KeyalertUrl이면 Valuetarget.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_agentnetwork.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이 '그룹에 구성원 추가'이고 결과가 '성공'인 경우 'Group membership modified'로 설정됩니다.
(파서 로직) 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 전문가에게 문의하여 답변을 받으세요.