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