Azure Application Gateway 로그 수집
다음에서 지원:
Google SecOps
SIEM
이 문서에서는 Google Security Operations 피드를 설정하여 Azure Application Gateway 로그를 수집하는 방법을 설명합니다. 이 파서는 단일 레코드 JSON 구조와 다중 레코드 JSON 구조를 모두 처리하고, '레코드' 배열에서 필드를 추출하고, 데이터 유형 변환을 실행하고, 필드를 UDM에 매핑하고, 메타데이터 및 네트워크 연결 유형과 같은 파생된 필드로 데이터를 보강합니다. 또한 다양한 operationName
값에 관한 특정 로직을 처리하여 관련 IP 주소, 서브넷, 기타 구성 세부정보를 추출합니다.
시작하기 전에
다음을 확인하세요.
- Google SecOps 인스턴스
- Azure 구독에 대한 권한이 있는 액세스입니다.
- Azure의 Azure 애플리케이션 게이트웨이 환경 (테넌트)
Azure 스토리지 계정 구성
- Azure Console에서 스토리지 계정을 검색합니다.
- 만들기를 클릭합니다.
- 다음 입력 매개변수의 값을 지정합니다.
- 구독: 구독을 선택합니다.
- 리소스 그룹: 리소스 그룹을 선택합니다.
- 리전: 리전을 선택합니다.
- 실적: 실적을 선택합니다 (표준 권장).
- 중복성: 중복성을 선택합니다 (GRS 또는 LRS 권장).
- 스토리지 계정 이름: 새 스토리지 계정의 이름을 입력합니다.
- 검토 + 만들기를 클릭합니다.
- 계정 개요를 검토하고 만들기를 클릭합니다.
- 스토리지 계정 개요 페이지의 보안 + 네트워킹에서 하위 메뉴 액세스 키를 선택합니다.
- key1 또는 key2 옆에 있는 표시를 클릭합니다.
- 클립보드에 복사를 클릭하여 키를 복사합니다.
- 나중에 사용할 수 있도록 키를 안전한 위치에 저장합니다.
- 스토리지 계정 개요 페이지에서 설정의 하위 메뉴 엔드포인트를 선택합니다.
- 클립보드에 복사를 클릭하여 Blob 서비스 엔드포인트 URL을 복사합니다. (예:
https://<storageaccountname>.blob.core.windows.net
) - 나중에 사용할 수 있도록 엔드포인트 URL을 안전한 위치에 저장합니다.
Azure Application Gateway 구성
- Azure 포털에 로그인합니다.
- 원하는 리소스 그룹으로 이동합니다.
- 애플리케이션 게이트웨이를 선택합니다. 애플리케이션 게이트웨이 창이 표시됩니다.
- Monitoring 섹션에서 진단 설정 > 진단 사용을 선택합니다.
- 진단 설정 추가를 선택합니다. 진단 설정 창에 진단 로그의 설정이 표시됩니다.
- 로그 섹션에서 다음을 수행합니다.
- ApplicationGatewayAccessLog 체크박스를 선택합니다.
- ApplicationGatewayFirewallLog 체크박스를 선택합니다.
- 저장소 계정에 로그를 저장하려면 다음 단계를 따르세요.
- 스토리지 계정에 아카이브 체크박스를 선택합니다.
- 구독 목록에서 기존 구독을 선택합니다.
- 스토리지 계정 목록에서 기존 스토리지 계정을 선택합니다.
Azure 애플리케이션 게이트웨이 로그를 수집하도록 Google SecOps에서 피드 구성
- SIEM 설정 > 피드로 이동합니다.
- 새로 추가를 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다 (예: Azure 애플리케이션 게이트웨이 로그).
- 소스 유형으로 Microsoft Azure Blob Storage를 선택합니다.
- 로그 유형으로 Azure Application Gateway를 선택합니다.
- 다음을 클릭합니다.
다음 입력 매개변수의 값을 지정합니다.
- 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의 액세스 키입니다.
- 애셋 네임스페이스: 애셋 네임스페이스입니다.
- 수집 라벨: 이 피드의 이벤트에 적용할 라벨입니다.
- Azure uri: blob 엔드포인트 URL입니다.
다음을 클릭합니다.
확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.
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
- 파서를 새로 만들었습니다.