DNSFilter 로그 수집
이 문서에서는 HTTP 이벤트 수집기 (HEC) 프로토콜을 통해 웹훅을 사용하여 로그를 Google Security Operations로 푸시하도록 DNSFilter를 구성하는 방법을 설명합니다.
DNSFilter는 위협 보호, 콘텐츠 필터링, 네트워크 가시성을 제공하는 AI 기반 DNS 보안 솔루션입니다. 데이터 내보내기 기능을 사용하면 HTTP 이벤트 수집기 (HEC) API를 통해 DNS 쿼리 로그 데이터를 SIEM 플랫폼으로 자동 내보내 실시간 보안 모니터링 및 규정 준수 보고를 지원할 수 있습니다.
시작하기 전에
다음 기본 요건이 충족되었는지 확인합니다.
- Google SecOps 인스턴스
- 관리자 권한 이상의 권한으로 DNSFilter 대시보드에 액세스
- DNSFilter 데이터 내보내기 부가기능이 사용 설정됨 (Basic, Pro, Enterprise 요금제에서 유료 부가기능으로 사용 가능)
- Google Cloud 콘솔 액세스 (API 키 생성용)
Google SecOps에서 웹훅 피드 만들기
피드 만들기
- SIEM 설정> 피드로 이동합니다.
- 새 피드 추가를 클릭합니다.
- 다음 페이지에서 단일 피드 구성을 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다(예:
DNSFilter HEC Feed). - 소스 유형으로 웹훅을 선택합니다.
- 로그 유형으로 DNSFILTER를 선택합니다.
- 다음을 클릭합니다.
- 다음 입력 파라미터의 값을 지정합니다.
- 분할 구분자 (선택사항): 각 HEC 요청에 형식이 올바른 이벤트가 포함되어 있으므로 비워 둡니다.
- 애셋 네임스페이스: 애셋 네임스페이스
- 수집 라벨: 이 피드의 이벤트에 적용할 라벨입니다.
- 다음을 클릭합니다.
- 확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.
보안 비밀 키 생성 및 저장
피드를 만든 후 인증을 위한 보안 비밀 키를 생성해야 합니다.
- 피드 세부정보 페이지에서 보안 비밀 키 생성을 클릭합니다.
- 대화상자에 보안 비밀 키가 표시됩니다.
보안 비밀번호를 안전하게 복사하여 저장합니다.
피드 엔드포인트 URL 가져오기
- 피드의 세부정보 탭으로 이동합니다.
- 엔드포인트 정보 섹션에서 피드 엔드포인트 URL을 복사합니다.
URL 형식은 다음과 같습니다.
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate또는
https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate다음 단계를 위해 이 URL을 저장합니다.
완료를 클릭합니다.
Google Cloud API 키 만들기
Google SecOps에는 인증을 위한 API 키가 필요합니다. Google Cloud 콘솔에서 제한된 API 키를 만듭니다.
API 키 만들기
- Google Cloud 콘솔 사용자 인증 정보 페이지로 이동합니다.
- 프로젝트 (Google SecOps 인스턴스와 연결된 프로젝트)를 선택합니다.
- 사용자 인증 정보 만들기 API 키를 클릭합니다.
- API 키가 생성되어 대화상자에 표시됩니다.
- API 키 수정을 클릭하여 키를 제한합니다.
API 키 제한
- API 키 설정 페이지에서 다음을 수행합니다.
이름: 설명이 포함된 이름 (예:
Google SecOps DNSFilter Webhook API Key)을 입력합니다. - API 제한사항에서 다음을 수행합니다.
- 키 제한을 선택합니다.
- API 선택 드롭다운에서 Google SecOps API (또는 Chronicle API)를 검색하여 선택합니다.
- 저장을 클릭합니다.
- 페이지 상단의 API 키 필드에서 API 키 값을 복사합니다.
API 키를 안전하게 저장합니다.
DNSFilter 데이터 내보내기 구성
HEC 엔드포인트 URL 구성
Google SecOps 엔드포인트 URL과 API 키를 결합하여 HEC URL을 만듭니다.
<ENDPOINT_URL>?key=<API_KEY>예:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...
DNSFilter에서 데이터 내보내기 구성
- DNSFilter 대시보드에 로그인합니다.
- 도구 > 데이터 내보내기로 이동합니다.
- 내보내기 대상 섹션에서 HTTP Event Collector (HEC)를 선택합니다.
- HEC 구성 섹션에 다음을 입력합니다.
- HTTP 이벤트 수집기 URL: 이전 단계의 API 키가 포함된 전체 엔드포인트 URL을 붙여넣습니다.
- 활성 이벤트 수집기 토큰: Google SecOps 피드 생성 중에 생성된 보안 비밀 키를 붙여넣습니다.
- Save Configuration(구성 저장)을 클릭합니다.
DNSFilter에서 연결을 테스트하고 구성이 올바르면 성공 메시지를 표시합니다.
데이터 수집 확인
- DNSFilter 대시보드에서 도구 > 데이터 내보내기로 이동합니다.
- 상태가 활성 또는 연결됨으로 표시되는지 확인합니다.
- Google SecOps 콘솔에서 SIEM 설정 > 피드로 이동합니다.
- DNSFilter 피드를 찾아 상태가 활성으로 표시되는지 확인합니다.
- 피드 이름을 클릭하여 세부정보를 확인합니다.
- 수집된 로그 측정항목을 확인하여 데이터가 흐르는지 확인합니다.
DNSFilter 이벤트를 검색하려면 검색으로 이동하여 다음 쿼리를 실행합니다.
metadata.log_type = "DNSFILTER"
인증 방법 참조
Google SecOps 웹훅 피드는 여러 인증 방법을 지원합니다. DNSFilter HEC 통합은 하이브리드 메서드를 사용합니다.
사용된 방법: 하이브리드 (URL + 헤더)
DNSFilter는 URL에 API 키를 보내고 요청 헤더에 보안 비밀 키 (HEC 토큰)를 보냅니다.
요청 형식:
POST <ENDPOINT_URL>?key=<API_KEY> HTTP/1.1 Content-Type: application/json Authorization: Splunk <SECRET_KEY> { "event": "data", "timestamp": "2025-01-15T10:30:00Z" }
대체 방법: 맞춤 헤더
로그를 Google SecOps로 전송하도록 맞춤 애플리케이션을 구성하는 경우 보안을 강화하기 위해 이 방법을 사용하세요.
요청 형식:
POST <ENDPOINT_URL> HTTP/1.1 Content-Type: application/json x-goog-chronicle-auth: <API_KEY> x-chronicle-auth: <SECRET_KEY> { "event": "data", "timestamp": "2025-01-15T10:30:00Z" }장점:
- API 키와 보안 비밀이 URL에 표시되지 않음
- 더 안전함 (헤더가 웹 서버 액세스 로그에 기록되지 않음)
- 공급업체에서 지원하는 경우 선호되는 방법
인증 헤더 이름
Google SecOps는 인증을 위해 다음 헤더 이름을 허용합니다.
API 키:
x-goog-chronicle-auth(권장)X-Goog-Chronicle-Auth(대소문자 구분 안 함)
보안 비밀 키:
x-chronicle-auth(권장)X-Chronicle-Auth(대소문자 구분 안 함)Authorization: Splunk <TOKEN>(HEC 호환성)
웹훅 한도 및 권장사항
요청 한도
| 한도 | 값 |
|---|---|
| 최대 요청 크기 | 4MB |
| 최대 QPS (초당 쿼리 수) | 15,000 |
| 요청 제한 시간 | 30초 |
| 재시도 동작 | 지수 백오프를 사용한 자동 |
권장사항
- 내보내기 상태 모니터링: DNSFilter 대시보드에서 데이터 내보내기 상태를 정기적으로 확인하여 데이터 흐름이 지속되는지 확인합니다.
- API 키 순환: 보안을 위해 Google Cloud API 키를 주기적으로 순환합니다.
- 보안 비밀 키 관리: Google SecOps 보안 비밀 키를 안전하게 저장하고 보안이 침해된 경우 재생성합니다.
- 데이터 보관: DNSFilter와 Google SecOps 모두에서 적절한 데이터 보관 정책을 구성합니다.
- 알림 구성: Google SecOps에서 심각한 DNS 보안 이벤트에 대한 알림을 설정합니다.
문제 해결
연결 테스트 실패
DNSFilter 데이터 내보내기 구성 테스트가 실패하는 경우:
- HEC URL이 올바르고 API 키 매개변수가 포함되어 있는지 확인합니다.
- 보안 비밀 키 (HEC 토큰)가 추가 공백 없이 올바르게 복사되었는지 확인합니다.
- Google Cloud API 키에 Chronicle API 액세스가 사용 설정되어 있는지 확인합니다.
- Google SecOps 피드가 활성 상태인지 확인합니다.
- DNSFilter에서 Google Cloud 엔드포인트로의 네트워크 연결을 확인합니다.
Google SecOps에 데이터가 표시되지 않음
연결에 성공했지만 데이터가 표시되지 않는 경우:
- DNSFilter 배포에서 DNS 쿼리가 생성되는지 확인합니다.
- DNSFilter 쿼리 로그를 확인하여 트래픽이 처리되고 있는지 확인합니다.
- Google SecOps에서
metadata.log_type = "DNSFILTER"을 검색하여 수집을 확인합니다. - Google SecOps에서 피드 수집된 로그 측정항목을 확인합니다.
- 피드 오류 로그에서 수집 오류를 검토합니다.
데이터 내보내기에서 오류 메시지가 반환됨
일반적인 오류 원인:
- 잘못된 사용자 인증 정보: API 키 또는 비밀 키가 잘못되었거나 만료되었습니다.
- 리전 불일치: Google SecOps 엔드포인트 URL 리전이 인스턴스와 일치하지 않습니다.
- 권한: API 키에 Chronicle API 액세스가 사용 설정되어 있지 않습니다.
- 네트워크 문제: 방화벽 또는 프록시가 아웃바운드 HTTPS 연결을 차단합니다.
UDM 매핑 테이블
| 로그 필드 | UDM 매핑 | 논리 |
|---|---|---|
| 시간 | metadata.collected_timestamp | 날짜 형식 yyyy-MM-dd HH:mm:ss Z UTC를 사용하여 변환됨 |
| metadata.event_type | principal_ip_present, principal_hostname_present 또는 principal_mac_present가 true인 경우 'STATUS_UPDATE'로 설정되고, 그렇지 않으면 'GENERIC_EVENT'로 설정됩니다. | |
| question_type | network.dns.questions | DNS 레코드 유형 매핑을 사용하여 question_type을 question.type으로 변환한 후 배열로 병합 |
| 코드 | network.dns.response_code | DNS 응답 코드 매핑을 사용하여 변환됨 |
| 프로토콜 | network.ip_protocol | IP 프로토콜 매핑을 사용하여 변환됨 |
| 클라이언트 | principal.hostname | 값이 직접 복사됨 |
| request_address, ip4, ip6, source_addresses | principal.ip | request_address (추출된 IP), ip4 (추출된 IP), ip6 (추출된 IP), source_addresses 배열에서 추출된 IP에서 병합됨 |
| 리전 | principal.location.country_or_region | 값이 직접 복사됨 |
| clientMac | principal.mac | MAC 정규식과 일치하는 경우 값이 직접 복사됨 |
| clientID | principal.resource.product_object_id | 값이 직접 복사됨 |
| 사용자 이름 | principal.user.user_display_name | 값이 직접 복사됨 |
| user_id | principal.user.userid | 값이 직접 복사됨 |
| code, original_code, clientType, collection, network_name, networkID, collectionID, policy, policyID, scheduled_policy, scheduled_policyID, sec_cats, sec_allow_cats, block_cats, block_allow_cats, threat, allowed, method, organization, organizationID, applicationID, application_name, application_categoryID, application_category_name | security_result.detection_fields | 다양한 소스 필드에서 병합된 라벨(키-값 쌍) |
| 도메인 | target.administrative_domain | 값이 직접 복사됨 |
| fqdn | target.domain.name | 값이 직접 복사됨 |
| metadata.product_name | 'DNSFILTER'로 설정 | |
| metadata.vendor_name | 'DNSFILTER'로 설정 |
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.