Microsoft Azure 활동 로그 수집

다음에서 지원:

이 문서에서는 Microsoft Azure 활동 로그(AZURE_ACTIVITY)를 Google Security Operations에 수집하는 데 필요한 단계를 설명합니다.

스토리지 계정 구성

스토리지 계정을 구성하려면 다음 단계를 완료합니다.

  1. Azure Console에서 스토리지 계정을 검색합니다.
  2. 만들기를 클릭합니다.
  3. 계정에 필요한 구독, 리소스 그룹, 리전, 성능(Standard 권장), 중복성(GRS 또는 LRS 권장)을 선택하고, 새 스토리지 계정의 이름을 입력합니다.
  4. 검토 + 만들기를 클릭하고 계정 개요를 검토하고 만들기를 클릭합니다.
  5. 스토리지 계정 개요 페이지의 창 왼쪽 탐색에서 액세스 키를 선택합니다.
  6. 키 표시를 클릭하고 스토리지 계정의 공유 키를 기록해 둡니다.
  7. 창 왼쪽 탐색에서 엔드포인트를 선택합니다.
  8. Blob 서비스 엔드포인트를 기록해 둡니다. (https://<storageaccountname>.blob.core.windows.net/)

Azure 활동 로깅 구성

Azure 활동 로깅을 구성하려면 다음 단계를 완료합니다.

  1. Azure Console에서 Monitor를 검색합니다.
  2. 페이지 왼쪽 탐색에서 활동 로그 링크를 클릭합니다.
  3. 창 상단에서 활동 로그 내보내기를 클릭합니다.
  4. 진단 설정 추가를 클릭합니다.
  5. Google SecOps에 내보내려는 모든 카테고리를 선택합니다.
  6. 대상 세부정보에서 스토리지 계정에 아카이브를 선택합니다.
  7. 이전 단계에서 만든 구독 및 스토리지 계정을 선택합니다.
  8. 저장을 클릭합니다.

피드 설정

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

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

Microsoft Azure 활동 피드를 설정하는 방법

  1. Azure 플랫폼 팩을 클릭합니다.
  2. Microsoft Azure 활동 피드를 찾습니다.
  3. 다음 필드의 값을 지정합니다.

    • 소스 유형: Microsoft Azure Blob Storage V2
    • Azure URI: 앞에서 기록한 Blob 서비스 엔드포인트 값을 insights-activity-logs를 서픽스로 추가하여 입력합니다 (예: https://acme-azure-chronicle.blob.core.windows.net/insights-activity-logs).
    • 소스 삭제 옵션: 전송 후 파일과 디렉터리를 삭제할지 여부를 지정합니다.
    • 최대 파일 기간: 지난 일수 동안 수정된 파일을 포함합니다. 기본값은 180일입니다.
    • 공유 키: 앞에서 캡처한 공유 키 값을 입력합니다.

    고급 옵션

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

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

필드 매핑 참조

이 파서 코드는 먼저 많은 필드를 빈 문자열로 초기화한 다음 일련의 문자열 조작 및 JSON 파싱 작업을 실행하여 Azure 활동 로그 메시지에서 관련 정보를 추출합니다. 마지막으로 추출된 데이터를 통합 데이터 모델 (UDM) 필드에 매핑하여 이벤트 유형을 분류하고 심각도, 주체 정보, 네트워크 데이터와 같은 추가 세부정보로 보강합니다.

UDM 매핑 테이블

로그 필드 UDM 매핑 논리
카테고리 read_only_udm.security_result.category_details 원시 로그의 'category' 필드에서 직접 매핑됩니다.
callerIpAddress read_only_udm.principal.asset.ip, read_only_udm.principal.ip 원시 로그의 'callerIpAddress' 필드에서 직접 매핑됩니다.
correlationId read_only_udm.security_result.detection_fields.correlationId 원시 로그의 'correlationId' 필드에서 직접 매핑됩니다.
data.callerIpAddress read_only_udm.principal.asset.ip, read_only_udm.principal.ip 원시 로그의 'data' 객체 내 'callerIpAddress' 필드에서 직접 매핑됩니다.
data.correlationId read_only_udm.security_result.detection_fields.correlationId 원시 로그의 'data' 객체 내 'correlationId' 필드에서 직접 매핑됩니다.
data.DeploymentUnit read_only_udm.target.resource.name 원시 로그의 'data' 객체 내 'DeploymentUnit' 필드에서 직접 매핑됩니다.
data.details read_only_udm.metadata.description '세부정보' 필드가 '알 수 없음'이 아닌 경우 원시 로그의 '데이터' 객체 내 '세부정보' 필드에서 직접 매핑됩니다.
data.entity read_only_udm.additional.fields.entity 원시 로그의 'data' 객체 내 'entity' 필드에서 직접 매핑됩니다.
data.EventName read_only_udm.metadata.product_event_type 원시 로그의 'data' 객체 내 'EventName' 필드에서 직접 매핑됩니다.
data.hierarchy read_only_udm.additional.fields.hierarchy 원시 로그의 'data' 객체 내 'hierarchy' 필드에서 직접 매핑됩니다.
data.identity.authorization.action read_only_udm.security_result.detection_fields.action 원시 로그의 'identity' 객체에 있는 'authorization' 객체의 'action' 필드에서 직접 매핑됩니다.
data.identity.authorization.evidence.principalId read_only_udm.principal.user.product_object_id, read_only_udm.principal.resource.product_object_id, read_only_udm.principal.group.product_object_id 원시 로그의 'identity' 객체의 'authorization' 객체에 있는 'evidence' 객체의 'principalId' 필드에서 직접 매핑됩니다. 매핑되는 특정 UDM 필드는 'principalType' 필드의 값에 따라 달라집니다. 'principalType'이 'User' 또는 'ServicePrincipal'인 경우 principal.user.product_object_id에 매핑됩니다. 'principalType'이 'Group'인 경우 principal.group.product_object_id에 매핑됩니다. 'principalType'이 'ServicePrincipal'인 경우 principal.resource.product_object_id에 매핑됩니다.
data.identity.authorization.evidence.principalType read_only_udm.principal.resource.resource_subtype 원시 로그의 'identity' 객체의 'authorization' 객체의 'evidence' 객체 내 'principalType' 필드에서 직접 매핑됩니다.
data.identity.authorization.evidence.role read_only_udm.principal.user.role_name 원시 로그의 'identity' 객체의 'authorization' 객체의 'evidence' 객체 내 'role' 필드에서 직접 매핑됩니다.
data.identity.authorization.evidence.roleAssignmentId read_only_udm.principal.resource.attribute.labels.roleAssignmentId 원시 로그의 'identity' 객체의 'authorization' 객체의 'evidence' 객체 내 'roleAssignmentId' 필드에서 직접 매핑됩니다.
data.identity.authorization.evidence.roleAssignmentScope read_only_udm.principal.resource.attribute.labels.roleAssignmentScope 원시 로그의 'identity' 객체의 'authorization' 객체의 'evidence' 객체 내 'roleAssignmentScope' 필드에서 직접 매핑됩니다.
data.identity.authorization.evidence.roleDefinitionId read_only_udm.principal.resource.attribute.labels.roleDefinitionId 원시 로그의 'identity' 객체의 'authorization' 객체에 있는 'evidence' 객체의 'roleDefinitionId' 필드에서 직접 매핑됩니다.
data.identity.authorization.scope read_only_udm.security_result.detection_fields.scope 원시 로그의 'identity' 객체에 있는 'authorization' 객체의 'scope' 필드에서 직접 매핑됩니다.
data.identity.claims.aio read_only_udm.security_result.detection_fields.aio 원시 로그의 'identity' 객체에 있는 'claims' 객체의 'aio' 필드에서 직접 매핑됩니다.
data.identity.claims.appid read_only_udm.security_result.detection_fields.appid 원시 로그의 'identity' 객체에 있는 'claims' 객체의 'appid' 필드에서 직접 매핑됩니다.
data.identity.claims.appidacr read_only_udm.security_result.detection_fields.appidacr 원시 로그의 'identity' 객체에 있는 'claims' 객체의 'appidacr' 필드에서 직접 매핑됩니다.
data.identity.claims.aud read_only_udm.security_result.detection_fields.aud 원시 로그의 'identity' 객체에 있는 'claims' 객체의 'aud' 필드에서 직접 매핑됩니다.
data.identity.claims.exp read_only_udm.security_result.detection_fields.exp 원시 로그의 'identity' 객체에 있는 'claims' 객체의 'exp' 필드에서 직접 매핑됩니다.
data.identity.claims.http://schemas.microsoft.com/identity/claims/identityprovider read_only_udm.security_result.detection_fields.identityprovider 원시 로그의 'identity' 객체의 'claims' 객체 내 'http://schemas.microsoft.com/identity/claims/identityprovider' 필드에서 직접 매핑됩니다.
data.identity.claims.http://schemas.microsoft.com/identity/claims/objectidentifier read_only_udm.security_result.detection_fields.objectidentifier 원시 로그의 'identity' 객체에 있는 'claims' 객체의 'http://schemas.microsoft.com/identity/claims/objectidentifier' 필드에서 직접 매핑됩니다.
data.identity.claims.http://schemas.microsoft.com/identity/claims/tenantid read_only_udm.security_result.detection_fields.tenantid 원시 로그의 'identity' 객체에 있는 'claims' 객체의 'http://schemas.microsoft.com/identity/claims/tenantid' 필드에서 직접 매핑됩니다.
data.identity.claims.http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier read_only_udm.security_result.detection_fields.nameidentifier 원시 로그의 'identity' 객체에 있는 'claims' 객체의 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier' 필드에서 직접 매핑됩니다.
data.identity.claims.iat read_only_udm.security_result.detection_fields.iat 원시 로그의 'identity' 객체에 있는 'claims' 객체의 'iat' 필드에서 직접 매핑됩니다.
data.identity.claims.iss read_only_udm.security_result.detection_fields.iss 원시 로그의 'identity' 객체에 있는 'claims' 객체의 'iss' 필드에서 직접 매핑됩니다.
data.identity.claims.nbf read_only_udm.security_result.detection_fields.nbf 원시 로그의 'identity' 객체에 있는 'claims' 객체의 'nbf' 필드에서 직접 매핑됩니다.
data.identity.claims.rh read_only_udm.security_result.detection_fields.rh 원시 로그의 'identity' 객체 내 'claims' 객체의 'rh' 필드에서 직접 매핑됩니다.
data.identity.claims.uti read_only_udm.security_result.detection_fields.uti 원시 로그의 'identity' 객체에 있는 'claims' 객체의 'uti' 필드에서 직접 매핑됩니다.
data.identity.claims.ver read_only_udm.security_result.detection_fields.ver 원시 로그의 'identity' 객체에 있는 'claims' 객체의 'ver' 필드에서 직접 매핑됩니다.
data.identity.claims.xms_tcdt read_only_udm.security_result.detection_fields.xms_tcdt 원시 로그의 'identity' 객체에 있는 'claims' 객체의 'xms_tcdt' 필드에서 직접 매핑됩니다.
data.identity.UserName read_only_udm.principal.user.user_display_name 원시 로그의 'identity' 객체 내 'UserName' 필드에서 직접 매핑됩니다.
data.level read_only_udm.security_result.severity, read_only_udm.security_result.severity_details 원시 로그의 'data' 객체 내 'level' 필드에서 직접 매핑됩니다. 'level' 필드는 severity 필드의 값을 결정하는 데도 사용됩니다. 'level'이 'Information' 또는 'Informational'인 경우 severity은 'INFORMATIONAL'로 설정됩니다. 'level'이 'Warning'이면 severity이 'MEDIUM'으로 설정됩니다. 'level'이 'Error'인 경우 severity이 'ERROR'로 설정됩니다. 'level'이 'Critical'인 경우 severity이 'CRITICAL'로 설정됩니다.
data.location read_only_udm.target.location.name 원시 로그의 'data' 객체 내 'location' 필드에서 직접 매핑됩니다.
data.operationName read_only_udm.metadata.product_event_type 원시 로그의 'data' 객체 내 'operationName' 필드에서 직접 매핑됩니다.
data.properties.EventChannel read_only_udm.additional.fields.properties EventChannel 원시 로그의 'data' 객체에 있는 'properties' 객체의 'EventChannel' 필드에서 직접 매핑됩니다.
data.properties.EventSource read_only_udm.additional.fields.properties EventSource 원시 로그의 'data' 객체에 있는 'properties' 객체의 'EventSource' 필드에서 직접 매핑됩니다.
data.properties.EventId read_only_udm.metadata.product_log_id 원시 로그의 'data' 객체에 있는 'properties' 객체의 'EventId' 필드에서 직접 매핑됩니다.
data.properties.eventProperties.cause read_only_udm.security_result.detection_fields.cause 원시 로그의 'data' 객체에 있는 'properties' 객체의 'eventProperties' 객체 내 'cause' 필드에서 직접 매핑됩니다.
data.properties.eventProperties.clientIPAddress read_only_udm.principal.asset.ip, read_only_udm.principal.ip 원시 로그의 'data' 객체에 있는 'properties' 객체의 'eventProperties' 객체에 있는 'clientIPAddress' 필드에서 직접 매핑됩니다.
data.properties.eventProperties.compromisedHost read_only_udm.principal.asset.hostname, read_only_udm.principal.hostname 원시 로그의 'data' 객체에 있는 'properties' 객체의 'eventProperties' 객체에 있는 'compromisedHost' 필드에서 직접 매핑됩니다.
data.properties.eventProperties.currentHealthStatus read_only_udm.security_result.detection_fields.currentHealthStatus 원시 로그의 'data' 객체에 있는 'properties' 객체의 'eventProperties' 객체에 있는 'currentHealthStatus' 필드에서 직접 매핑됩니다.
data.properties.eventProperties.previousHealthStatus read_only_udm.security_result.detection_fields.previousHealthStatus 원시 로그의 'data' 객체에 있는 'properties' 객체의 'eventProperties' 객체에 있는 'previousHealthStatus' 필드에서 직접 매핑됩니다.
data.properties.eventProperties.type read_only_udm.security_result.detection_fields.type 원시 로그의 'data' 객체에 있는 'properties' 객체의 'eventProperties' 객체 내 'type' 필드에서 직접 매핑됩니다.
data.properties.eventProperties.User read_only_udm.principal.user.userid 원시 로그의 'data' 객체의 'properties' 객체에 있는 'eventProperties' 객체의 'User' 필드에서 직접 매핑됩니다.
data.properties.eventProperties.userName read_only_udm.principal.user.user_display_name 'SECURE\' 접두사를 삭제한 후 원시 로그의 'data' 객체의 'properties' 객체의 'eventProperties' 객체 내 'userName' 필드에서 직접 매핑됩니다.
data.properties.ipAddress read_only_udm.principal.asset.ip, read_only_udm.principal.ip 원시 로그의 'data' 객체에 있는 'properties' 객체의 'ipAddress' 필드에서 직접 매핑됩니다.
data.properties.legacyChannels read_only_udm.security_result.detection_fields.legacyChannels 원시 로그의 'data' 객체 내 'properties' 객체의 'legacyChannels' 필드에서 직접 매핑됩니다.
data.properties.legacyEventDataId read_only_udm.security_result.detection_fields.legacyEventDataId 원시 로그의 'data' 객체에 있는 'properties' 객체의 'legacyEventDataId' 필드에서 직접 매핑됩니다.
data.properties.legacyResourceId read_only_udm.security_result.detection_fields.legacyResourceId 원시 로그의 'data' 객체에 있는 'properties' 객체의 'legacyResourceId' 필드에서 직접 매핑됩니다.
data.properties.legacyResourceGroup read_only_udm.security_result.detection_fields.legacyResourceGroup 원시 로그의 'data' 객체에 있는 'properties' 객체의 'legacyResourceGroup' 필드에서 직접 매핑됩니다.
data.properties.legacyResourceProviderName read_only_udm.security_result.detection_fields.legacyResourceProviderName 원시 로그의 'data' 객체에 있는 'properties' 객체의 'legacyResourceProviderName' 필드에서 직접 매핑됩니다.
data.properties.legacyResourceType read_only_udm.security_result.detection_fields.legacyResourceType 원시 로그의 'data' 객체에 있는 'properties' 객체의 'legacyResourceType' 필드에서 직접 매핑됩니다.
data.properties.legacySubscriptionId read_only_udm.security_result.detection_fields.legacySubscriptionId 원시 로그의 'data' 객체에 있는 'properties' 객체의 'legacySubscriptionId' 필드에서 직접 매핑됩니다.
data.properties.operationId read_only_udm.security_result.detection_fields.operationId 원시 로그의 'data' 객체에 있는 'properties' 객체의 'operationId' 필드에서 직접 매핑됩니다.
data.properties.result read_only_udm.security_result.action_details 원시 로그의 'data' 객체에 있는 'properties' 객체의 'result' 필드에서 직접 매핑됩니다.
data.properties.statusCode read_only_udm.network.http.response_code 원시 로그의 'data' 객체 내 'properties' 객체의 'statusCode' 필드에서 직접 매핑됩니다.
data.properties.suspiciousCommandLine read_only_udm.target.process.command_line 원시 로그의 'data' 객체에 있는 'properties' 객체의 'suspiciousCommandLine' 필드에서 직접 매핑됩니다.
data.properties.suspiciousProcess read_only_udm.target.process.file.full_path 원시 로그의 'data' 객체에 있는 'properties' 객체의 'suspiciousProcess' 필드에서 직접 매핑됩니다.
data.properties.suspiciousProcessId read_only_udm.target.process.pid 원시 로그의 'data' 객체에 있는 'properties' 객체의 'suspiciousProcessId' 필드에서 직접 매핑됩니다.
data.properties.tlsVersion read_only_udm.network.tls.version 원시 로그의 'data' 객체에 있는 'properties' 객체의 'tlsVersion' 필드에서 직접 매핑됩니다.
data.properties.userAgent read_only_udm.network.http.user_agent, read_only_udm.network.http.parsed_user_agent 원시 로그의 'data' 객체에 있는 'properties' 객체의 'userAgent' 필드에서 직접 매핑됩니다.
data.properties.userAgentHeader read_only_udm.network.http.user_agent, read_only_udm.network.http.parsed_user_agent 원시 로그의 'data' 객체에 있는 'properties' 객체의 'userAgentHeader' 필드에서 직접 매핑됩니다.
data.properties.userId read_only_udm.target.user.product_object_id 원시 로그의 'data' 객체에 있는 'properties' 객체의 'userId' 필드에서 직접 매핑됩니다.
data.ReleaseVersion read_only_udm.metadata.product_version 원시 로그의 'data' 객체 내 'ReleaseVersion' 필드에서 직접 매핑됩니다.
data.resourceId read_only_udm.target.resource.name 원시 로그의 'data' 객체 내 'resourceId' 필드에서 직접 매핑됩니다.
data.resourceType read_only_udm.additional.fields.resourceType 원시 로그의 'data' 객체 내 'resourceType' 필드에서 직접 매핑됩니다.
data.resultDescription read_only_udm.metadata.description 원시 로그의 'data' 객체 내 'resultDescription' 필드에서 직접 매핑됩니다.
data.resultSignature read_only_udm.additional.fields.resultSignature 원시 로그의 'data' 객체 내 'resultSignature' 필드에서 직접 매핑됩니다.
data.resultType read_only_udm.security_result.action_details, read_only_udm.additional.fields.resultType 원시 로그의 'data' 객체 내 'resultType' 필드에서 직접 매핑됩니다.
data.RoleLocation read_only_udm.target.location.name 원시 로그의 'data' 객체 내 'RoleLocation' 필드에서 직접 매핑됩니다.
data.time read_only_udm.metadata.event_timestamp 원시 로그의 'data' 객체 내 'time' 필드가 파싱되어 타임스탬프가 추출되고, 이 타임스탬프는 event_timestamp에 매핑됩니다.
data.uri read_only_udm.network.http.referral_url 원시 로그의 'data' 객체 내 'uri' 필드에서 직접 매핑됩니다.
read_only_udm.extensions.auth.mechanism INTERACTIVE 원시 로그의 'data' 객체 내 'properties' 객체의 'isInteractive' 필드가 'true'인 경우 'INTERACTIVE'로 설정됩니다. 그렇지 않으면 'MECHANISM_OTHER'로 설정됩니다.
read_only_udm.extensions.auth.type MACHINE 원시 로그의 'category' 필드가 'NonInteractiveUserSignInLogs', 'ManagedIdentitySignInLogs' 또는 'ServicePrincipalSignInLogs'인 경우 'MACHINE'으로 설정됩니다.
read_only_udm.metadata.log_type AZURE_ACTIVITY 'AZURE_ACTIVITY'로 하드코딩됩니다.
read_only_udm.metadata.vendor_name Microsoft 'Microsoft'로 하드코딩됩니다.
read_only_udm.principal.platform WINDOWS, MAC, LINUX, ANDROID 'properties.test.deviceDetail.operatingSystem' 필드의 값을 기반으로 결정됩니다. 'Win'이 포함되어 있으면 platform이 'WINDOWS'로 설정됩니다. 'Mac'이 포함된 경우 platform이 'MAC'으로 설정됩니다. 'Lin'이 포함된 경우 platform이 'LINUX'로 설정됩니다. 'Android'가 포함된 경우 platform이 'ANDROID'로 설정됩니다.
read_only_udm.principal.resource.type SERVICE_ACCOUNT, UNSPECIFIED 'identity.authorization.evidence.principalType' 필드의 값을 기반으로 결정됩니다. 'ServicePrincipal'인 경우 type이 'SERVICE_ACCOUNT'로 설정됩니다. 그렇지 않으면 'UNSPECIFIED'로 설정됩니다.
read_only_udm.security_result.action ALLOW, BLOCK, UNKNOWN_ACTION 'resultType', 'status_errorcode', 'statusText' 필드의 값을 기반으로 결정됩니다. 'resultType'이 'Success', 'success', 'Succeeded', 'Started', 'Resolved', 'Active', 'Updated', 'Start', 'Accept', 'Accepted', '0' 중 하나이거나 'status_errorcode'가 0이거나 'statusText'가 'Success'인 경우 action이 'ALLOW'로 설정됩니다. 'resultType'이 'Failure' 또는 'Failed' 중 하나이거나 'status_errorcode'가 비어 있지 않거나 'resultType'이 비어 있지 않으면 action이 'BLOCK'으로 설정됩니다. 그렇지 않으면 'UNKNOWN_ACTION'으로 설정됩니다.
read_only_udm.target.cloud.environment MICROSOFT_AZURE 'MICROSOFT_AZURE'로 하드코딩됩니다.