Azure Application Gateway 로그 수집

다음에서 지원:

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

시작하기 전에

다음을 확인하세요.

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

Azure 스토리지 계정 구성

  1. Azure Console에서 스토리지 계정을 검색합니다.
  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. Monitoring 섹션에서 진단 설정 > 진단 사용을 선택합니다.
  5. 진단 설정 추가를 선택합니다. 진단 설정 창에 진단 로그의 설정이 표시됩니다.
  6. 로그 섹션에서 다음을 수행합니다.
    1. ApplicationGatewayAccessLog 체크박스를 선택합니다.
    2. ApplicationGatewayFirewallLog 체크박스를 선택합니다.
  7. 저장소 계정에 로그를 저장하려면 다음 단계를 따르세요.
    1. 스토리지 계정에 아카이브 체크박스를 선택합니다.
    2. 구독 목록에서 기존 구독을 선택합니다.
    3. 스토리지 계정 목록에서 기존 스토리지 계정을 선택합니다.

Azure 애플리케이션 게이트웨이 로그를 수집하도록 Google SecOps에서 피드 구성

  1. SIEM 설정 > 피드로 이동합니다.
  2. 새로 추가를 클릭합니다.
  3. 피드 이름 필드에 피드 이름을 입력합니다 (예: Azure 애플리케이션 게이트웨이 로그).
  4. 소스 유형으로 Microsoft Azure Blob Storage를 선택합니다.
  5. 로그 유형으로 Azure Application Gateway를 선택합니다.
  6. 다음을 클릭합니다.
  7. 다음 입력 매개변수의 값을 지정합니다.

    • Azure uri: blob 엔드포인트 URL입니다.
      • ENDPOINT_URL/BLOB_NAME
        • 다음을 바꿉니다.
          • ENDPOINT_URL: blob 엔드포인트 URL입니다. (https://<storageaccountname>.blob.core.windows.net)
          • BLOB_NAME: blob의 이름입니다. (예: insights-logs-<logname>)
    • URI: 로그 스트림 구성 (단일 파일 | 디렉터리 | 하위 디렉터리가 포함된 디렉터리)에 따라 URI 유형을 선택합니다.
    • 소스 삭제 옵션: 원하는 삭제 옵션을 선택합니다.
    • 공유 키: Azure Blob Storage의 액세스 키입니다.
    • 애셋 네임스페이스: 애셋 네임스페이스입니다.
    • 수집 라벨: 이 피드의 이벤트에 적용할 라벨입니다.
  8. 다음을 클릭합니다.

  9. 확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.

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 단일 로그 항목에서 여러 이벤트가 추출될 때 추가됩니다.

변경사항

2024-04-19

  • 여러 이벤트 JSON 로그에 대한 지원을 추가했습니다.

2023-12-22

  • 'resourceid'가 'target.resource.id'에 매핑되었습니다.
  • 'properties.operationStatus'가 'security_result.category_details'에 매핑되었습니다.
  • 'properties.configuration.Name'이 'principal.hostname'에 매핑되었습니다.
  • 'properties.message'가 'metadata.description'에 매핑되었습니다.
  • 'properties.configuration.RemoteStie'가 'target.hostname'에 매핑되었습니다.
  • 'level'이 'security_result.severity_details'에 매핑되었습니다.
  • 'properties.configuration.Ikeversion'이 'principal.resource.attribute.labels'에 매핑되었습니다.
  • 'properties.configuration.LocalTunnelEndpoint'가 'principal.ip'에 매핑되었습니다.
  • 'properties.configuration.RemoteTunnelEndpoint'가 'target.ip'에 매핑되었습니다.
  • 'properties.configuration.LocalSubnets', 'properties.configuration.RemoteSubnets', 'properties.configuration.VirtualNetworkRanges', 'properties.configuration.VirtualNetworkSubnets'가 'principal.resource.attribute.labels'에 매핑되었습니다.
  • 'properties.configuration.VIPAddress'가 'principal.ip'에 매핑되었습니다.
  • 'properties.configuration.BgpConfiguration.GatewayConfig.PeerAddress'가 'targrt.ip'에 매핑되었습니다.
  • 'properties.configuration.BgpConfiguration.GatewayConfig.PeerType' 및 'properties.configuration.BgpConfiguration.GatewayConfig.Asn'이 'security_result.detection_fields'에 매핑되었습니다.

2023-11-16

  • 파서를 새로 만들었습니다.