Azure Application Gateway 로그 수집

다음에서 지원:

이 문서에서는 Google Security Operations 피드를 설정하여 Azure Application Gateway 로그를 수집하는 방법을 설명합니다. 이 파서는 단일 및 다중 레코드 JSON 구조를 모두 처리하고, 'records' 배열에서 필드를 추출하고, 데이터 유형 변환을 실행하고, 필드를 UDM에 매핑하고, 메타데이터 및 파생 필드(예: 네트워크 연결 유형)로 데이터를 보강합니다. 또한 다양한 operationName 값에 대한 특정 로직을 처리하여 관련 IP 주소, 서브넷, 기타 구성 세부정보를 추출합니다.

시작하기 전에

다음 기본 요건이 충족되었는지 확인합니다.

  • Google SecOps 인스턴스
  • Azure 구독에 대한 액세스 권한
  • Azure의 Azure 애플리케이션 게이트웨이 환경 (테넌트)

Azure 스토리지 계정 구성

  1. Azure 콘솔에서 스토리지 계정을 검색합니다.
  2. 만들기를 클릭합니다.
  3. 다음 입력 파라미터의 값을 지정합니다.
    • 구독: 구독을 선택합니다.
    • 리소스 그룹: 리소스 그룹을 선택합니다.
    • 리전: 리전을 선택합니다.
    • 성능: 성능을 선택합니다 (표준 권장).
    • 중복성: 중복성을 선택합니다 (GRS 또는 LRS 권장).
    • 스토리지 계정 이름: 새 스토리지 계정의 이름을 입력합니다.
  4. 검토 + 만들기를 클릭합니다.
  5. 계정 개요를 검토하고 만들기를 클릭합니다.
  6. 스토리지 계정 개요 페이지의 보안 + 네트워킹에서 하위 메뉴 액세스 키를 선택합니다.
  7. key1 또는 key2 옆에 있는 표시를 클릭합니다.
  8. 클립보드에 복사를 클릭하여 키를 복사합니다.
  9. 나중에 사용할 수 있도록 키를 안전한 위치에 저장합니다.
  10. 스토리지 계정 개요 페이지의 설정에서 하위 메뉴 엔드포인트를 선택합니다.
  11. 클립보드에 복사를 클릭하여 Blob 서비스 엔드포인트 URL을 복사합니다. (예: https://<storageaccountname>.blob.core.windows.net)
  12. 나중에 사용할 수 있도록 엔드포인트 URL을 안전한 위치에 저장합니다.

Azure Application Gateway를 구성하는 방법

  1. Azure 포털에 로그인합니다.
  2. 원하는 리소스 그룹으로 이동합니다.
  3. 애플리케이션 게이트웨이를 선택합니다 (애플리케이션 게이트웨이 창이 표시됨).
  4. 모니터링 섹션에서 진단 설정 > 진단 사용 설정을 선택합니다.
  5. 진단 설정 추가를 선택합니다 (진단 설정 창에 진단 로그 설정이 표시됨).
  6. 로그 섹션에서 다음을 수행합니다.
    1. ApplicationGatewayAccessLog 체크박스를 선택합니다.
    2. ApplicationGatewayFirewallLog 체크박스를 선택합니다.
  7. 스토리지 계정에 로그를 저장하려면 다음 단계를 따르세요.
    1. 스토리지 계정에 아카이브 체크박스를 선택합니다.
    2. 구독 목록에서 기존 구독을 선택합니다.
    3. 스토리지 계정 목록에서 기존 스토리지 계정을 선택합니다.

피드 설정

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

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

Azure 애플리케이션 게이트웨이 피드를 설정하는 방법

  1. Azure 플랫폼 팩을 클릭합니다.
  2. Azure Application Gateway 로그 유형을 찾아 새 피드 추가를 클릭합니다.
  3. 다음 필드의 값을 지정합니다.

    • 소스 유형: Microsoft Azure Blob Storage V2
    • Azure URI: Blob 엔드포인트 URL입니다.
      • ENDPOINT_URL/BLOB_NAME
        • 다음을 바꿉니다.
          • ENDPOINT_URL: blob 엔드포인트 URL입니다. (https://<storageaccountname>.blob.core.windows.net)
          • BLOB_NAME: Blob의 이름입니다. (예: insights-logs-<logname>)
    • 소스 삭제 옵션: 수집 환경설정에 따라 삭제 옵션을 선택합니다.
    • 최대 파일 기간: 지난 일수 동안 수정된 파일을 포함합니다. 기본값은 180일입니다.
    • 공유 키: Azure 리소스에 액세스하는 데 사용되는 공유 키 (base-64 인코딩의 512비트 무작위 문자열)입니다.

    고급 옵션

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

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

UDM 매핑 테이블

로그 필드 UDM 매핑 논리
Category metadata.product_event_type Category 필드에서 직접 매핑됩니다.
ClientOperationId additional.fields[].key:"ClientOperationId", value.string_value ClientOperationId 필드에서 직접 매핑됩니다.
CorrelationRequestId additional.fields[].key:"CorrelationRequestId", value.string_value CorrelationRequestId 필드에서 직접 매핑됩니다.
GatewayManagerVersion additional.fields[].key:"GatewayManagerVersion", value.string_value GatewayManagerVersion 필드에서 직접 매핑됩니다.
category metadata.product_event_type category 필드에서 직접 매핑됩니다.
level security_result.severity level 필드에서 직접 매핑되며 대문자로 변환됩니다. 값이 'WARNING'이면 심각도가 'HIGH'로 설정되고 security_result.severity_details이 원래 값으로 설정됩니다.
properties.clientIP principal.ip, principal.asset.ip properties.clientIP 필드에서 직접 매핑됩니다.
properties.clientPort principal.port properties.clientPort 필드에서 직접 매핑되며 정수로 변환됩니다.
properties.clientResponseTime additional.fields[].key:"clientResponseTime", value.string_value properties.clientResponseTime 필드에서 직접 매핑됩니다.
properties.configuration.BgpConfiguration.GatewayConfig.Asn security_result.detection_fields[].key:"ASN", value operationName이 'SetGatewayConfiguration'인 경우 properties.configuration.BgpConfiguration.GatewayConfig.Asn 필드에서 직접 매핑됩니다.
properties.configuration.BgpConfiguration.GatewayConfig.PeerAddress target.ip, target.asset.ip operationName이 'SetGatewayConfiguration'인 경우 properties.configuration.BgpConfiguration.GatewayConfig.PeerAddress 필드에서 직접 매핑됩니다.
properties.configuration.BgpConfiguration.GatewayConfig.PeerType security_result.detection_fields[].key:"PeerType", value operationName이 'SetGatewayConfiguration'인 경우 properties.configuration.BgpConfiguration.GatewayConfig.PeerType 필드에서 직접 매핑됩니다.
properties.configuration.IkeVersion principal.resource.attribute.labels[].key:"ike_version", value operationName이 'SetConnectionConfiguration'인 경우 properties.configuration.IkeVersion 필드에서 직접 매핑됩니다.
properties.configuration.LocalSubnets principal.resource.attribute.labels[].key:"local subnets", value operationName이 'SetConnectionConfiguration'인 경우 properties.configuration.LocalSubnets 배열의 연결된 IP 주소 문자열입니다.
properties.configuration.LocalTunnelEndpoint principal.ip, principal.asset.ip operationName이 'SetConnectionConfiguration'인 경우 properties.configuration.LocalTunnelEndpoint 필드에서 직접 매핑됩니다.
properties.configuration.Name principal.hostname, principal.asset.hostname properties.configuration.Name 필드에서 직접 매핑됩니다. 비어 있으면 properties.instance에서 값이 가져옵니다.
properties.configuration.RemoteSite target.hostname, target.asset.hostname properties.configuration.RemoteSite 필드에서 직접 매핑됩니다.
properties.configuration.RemoteSubnets principal.resource.attribute.labels[].key:"remote subnets", value operationName이 'SetConnectionConfiguration'인 경우 properties.configuration.RemoteSubnets 배열의 연결된 IP 주소 문자열입니다.
properties.configuration.RemoteTunnelEndpoint target.ip, target.asset.ip operationName이 'SetConnectionConfiguration'인 경우 properties.configuration.RemoteTunnelEndpoint 필드에서 직접 매핑됩니다.
properties.configuration.VIPAddress principal.ip, principal.asset.ip operationName이 'SetGatewayConfiguration'인 경우 properties.configuration.VIPAddress 필드에서 직접 매핑됩니다.
properties.configuration.VirtualNetworkRanges principal.resource.attribute.labels[].key:"virutal network ranges", value operationName이 'SetGatewayConfiguration'인 경우 properties.configuration.VirtualNetworkRanges 배열의 연결된 IP 주소 문자열입니다.
properties.configuration.VirtualNetworkSubnets principal.resource.attribute.labels[].key:"virtual network subnets", value operationName이 'SetGatewayConfiguration'인 경우 properties.configuration.VirtualNetworkSubnets 배열의 연결된 IP 주소 문자열입니다.
properties.error_info additional.fields[].key:"error_info", value.string_value properties.error_info 필드에서 직접 매핑됩니다.
properties.host principal.hostname, principal.asset.hostname properties.originalHost이 비어 있으면 properties.host 필드에서 직접 매핑됩니다.
properties.httpMethod network.http.method properties.httpMethod 필드에서 직접 매핑됩니다.
properties.httpStatus network.http.response_code properties.httpStatus 필드에서 직접 매핑되며 정수로 변환됩니다.
properties.httpVersion network.application_protocol properties.httpVersion 필드에 'HTTP'가 포함된 경우 'HTTP'로 설정됩니다.
properties.instance principal.hostname, principal.asset.hostname properties.configuration.Name이 비어 있는 경우 principal.hostname의 값으로 사용됩니다.
properties.message metadata.description properties.message 필드에서 직접 매핑됩니다.
properties.operationName additional.fields[].key:"operationName", value.string_value properties.operationName 필드에서 직접 매핑됩니다.
properties.operationStatus security_result.category_details properties.operationStatus 필드에서 직접 매핑됩니다. 값이 'Success' 또는 'InProgress'인 경우 security_result.action가 'ALLOW'로 설정됩니다.
properties.originalHost principal.hostname, principal.asset.hostname properties.originalHost 필드에서 직접 매핑됩니다.
properties.originalRequestUriWithArgs additional.fields[].key:"originalRequestUriWithArgs", value.string_value properties.originalRequestUriWithArgs 필드에서 직접 매핑됩니다.
properties.receivedBytes network.received_bytes properties.receivedBytes 필드에서 직접 매핑되며 부호 없는 정수로 변환됩니다.
properties.requestQuery additional.fields[].key:"requestQuery", value.string_value properties.requestQuery 필드에서 직접 매핑됩니다.
properties.requestUri target.url properties.requestUri 필드에서 직접 매핑됩니다.
properties.sentBytes network.sent_bytes properties.sentBytes 필드에서 직접 매핑되며 부호 없는 정수로 변환됩니다.
properties.serverResponseLatency additional.fields[].key:"Server Response Latency", value.string_value properties.serverResponseLatency 필드에서 직접 매핑됩니다.
properties.serverRouted target.ip, target.asset.ip, target.port IP와 포트는 정규 표현식을 사용하여 properties.serverRouted 필드에서 추출됩니다.
properties.sslCipher network.tls.cipher properties.sslCipher 필드에서 직접 매핑됩니다.
properties.sslClientCertificateIssuerName network.tls.server.certificate.issuer properties.sslClientCertificateIssuerName 필드에서 직접 매핑됩니다.
properties.sslProtocol network.tls.version properties.sslProtocol 필드에서 직접 매핑됩니다.
properties.timeTaken additional.fields[].key:"timeTaken", value.string_value properties.timeTaken 필드에서 직접 매핑됩니다.
properties.transactionId network.session_id properties.transactionId 필드에서 직접 매핑됩니다.
properties.userAgent network.http.user_agent, network.http.parsed_user_agent properties.userAgent 필드에서 직접 매핑됩니다. 또한 필드는 파싱된 사용자 에이전트로 변환되고 network.http.parsed_user_agent에 매핑됩니다.
properties.WAFEvaluationTime additional.fields[].key:"WAFEvaluationTime", value.string_value properties.WAFEvaluationTime 필드에서 직접 매핑됩니다.
properties.WAFMode additional.fields[].key:"WAFMode", value.string_value properties.WAFMode 필드에서 직접 매핑됩니다.
resourceId target.resource.id resourceId 필드에서 직접 매핑됩니다.
resourceid target.resource.product_object_id resourceid 필드에서 직접 매핑됩니다.
ruleName security_result.rule_name ruleName 필드에서 직접 매핑됩니다.
time/timeStamp metadata.event_timestamp, timestamp RFC 3339 또는 ISO8601 형식을 사용하여 타임스탬프로 파싱됩니다. timeStamp가 선호되지만 timeStamp가 없으면 time가 사용됩니다.
(파서 로직) metadata.event_type 주 구성원과 대상이 모두 있는 경우 'NETWORK_CONNECTION', 주 구성원만 있는 경우 'STATUS_UPDATE', 그 외의 경우 'GENERIC_EVENT'로 설정됩니다.
(파서 로직) metadata.product_name 'Azure 게이트웨이'로 설정합니다.
(파서 로직) metadata.vendor_name 'Microsoft'로 설정됩니다.
(파서 로직) has_principal 주 구성원 정보 (호스트 이름, IP 또는 포트)가 추출되면 'true'로 설정되고 그렇지 않으면 'false'로 설정되는 불리언 플래그입니다.
(파서 로직) has_target 타겟 정보 (호스트 이름, IP, 포트, 리소스 ID 또는 URL)가 추출되면 'true'로 설정되고, 그렇지 않으면 'false'로 설정되는 불리언 플래그입니다.
(파서 로직) disambiguation_key 단일 로그 항목에서 여러 이벤트가 추출될 때 추가됩니다.