F5 Distributed Cloud Services 로그 수집

다음에서 지원:

이 문서에서는 Google Cloud Storage V2를 사용하여 F5 Distributed Cloud Services 로그를 Google Security Operations에 수집하는 방법을 설명합니다.

F5 Distributed Cloud Services는 멀티 클라우드 및 에지 위치 전반에서 분산 클라우드 인프라, 애플리케이션 제공, API 보안, 웹 애플리케이션 방화벽 기능을 제공하는 SaaS 기반 보안, 네트워킹, 애플리케이션 관리 플랫폼입니다.

시작하기 전에

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

  • Google SecOps 인스턴스
  • Cloud Storage API가 사용 설정된 Google Cloud 프로젝트
  • GCS 버킷을 만들고 관리할 수 있는 권한
  • GCS 버킷의 IAM 정책을 관리할 수 있는 권한
  • F5 Distributed Cloud 콘솔에 대한 액세스 권한
  • F5 Distributed Cloud에서 전역 로그 수신기 객체를 만들 권한

Google Cloud Storage 버킷 만들기

  1. Google Cloud 콘솔로 이동합니다.
  2. 프로젝트를 선택하거나 새 프로젝트를 만듭니다.
  3. 탐색 메뉴에서 Cloud Storage> 버킷으로 이동합니다.
  4. 버킷 만들기를 클릭합니다.
  5. 다음 구성 세부정보를 제공합니다.

    설정
    버킷 이름 지정 전역적으로 고유한 이름 (예: f5-dcs-logs)을 입력합니다.
    위치 유형 필요에 따라 선택 (리전, 이중 리전, 멀티 리전)
    위치 위치를 선택합니다 (예: us-central1).
    스토리지 클래스 Standard (자주 액세스하는 로그에 권장)
    액세스 제어 균일 (권장)
    보호 도구 선택사항: 객체 버전 관리 또는 보관 정책 사용 설정
  6. 만들기를 클릭합니다.

GCS로 내보내도록 F5 Distributed Cloud 구성

방화벽 허용 목록에 GCS 버킷 추가

  1. F5 Distributed Cloud Global Log Receiver를 사용하려면 다음 IP 주소 범위를 방화벽 허용 목록에 추가해야 합니다.

    • 193.16.236.64/29
    • 185.160.8.152/29
  2. GCS 버킷에서 VPC 서비스 제어 또는 방화벽 규칙을 사용하는 경우 이러한 IP 범위를 허용 목록에 추가합니다.

F5 Distributed Cloud용 Google Cloud 서비스 계정 만들기

  1. Google Cloud 콘솔에서 IAM 및 관리자 > 서비스 계정으로 이동합니다.
  2. 서비스 계정 만들기를 클릭합니다.
  3. 다음 구성 세부정보를 제공합니다.

    • 서비스 계정 이름: f5-dcs-log-writer (또는 설명이 포함된 이름)을 입력합니다.
    • 서비스 계정 설명: Service account for F5 Distributed Cloud to write logs to GCS를 입력합니다.
  4. 만들고 계속하기를 클릭합니다.

  5. 이 서비스 계정에 프로젝트에 대한 액세스 권한 부여 섹션에서 다음 단계를 따르세요.

    1. 역할 선택을 클릭합니다.
    2. 스토리지 객체 관리자를 검색하여 선택합니다.
  6. 계속을 클릭합니다.

  7. 완료를 클릭합니다.

서비스 계정 키 만들기

  1. 서비스 계정 목록에서 만든 서비스 계정 (예: f5-dcs-log-writer)을 클릭합니다.
  2. 탭으로 이동합니다.
  3. 키 추가 > 새 키 만들기를 클릭합니다.
  4. 키 유형으로 JSON을 선택합니다.
  5. 만들기를 클릭합니다.
  6. JSON 키 파일이 컴퓨터에 다운로드됩니다.
  7. 이 파일을 안전하게 저장하세요. 다음 단계에서 필요합니다.

GCS 버킷에 IAM 권한 부여

  1. Cloud Storage> 버킷으로 이동합니다.
  2. 버킷 이름 (예: f5-dcs-logs)을 클릭합니다.
  3. 권한 탭으로 이동합니다.
  4. 액세스 권한 부여를 클릭합니다.
  5. 다음 구성 세부정보를 제공합니다.
    • 주 구성원 추가: 서비스 계정 이메일 (예: f5-dcs-log-writer@PROJECT_ID.iam.gserviceaccount.com)을 입력합니다.
    • 역할 할당: 스토리지 객체 관리자를 선택합니다.
  6. 저장을 클릭합니다.

F5 Distributed Cloud 콘솔에서 Google Cloud 사용자 인증 정보 만들기

  1. https://<tenant>.console.ves.volterra.io에서 F5 Distributed Cloud 콘솔에 로그인합니다.
  2. 홈페이지에서 Multi-Cloud Network Connect 서비스를 선택합니다.
  3. 관리 > 사이트 관리 > 클라우드 사용자 인증 정보로 이동합니다.
  4. Add Cloud Credentials(클라우드 사용자 인증 정보 추가)를 클릭합니다.
  5. 메타데이터 섹션에서 다음을 수행합니다.
    • 이름: 설명이 포함된 이름을 입력합니다 (예: gcp-chronicle-logs).
    • 설명 (선택사항): Cloud Storage credentials for Google SecOps log export를 입력합니다.
  6. 클라우드 사용자 인증 정보 유형 섹션에서 GCP 사용자 인증 정보를 선택합니다.
  7. GCP 사용자 인증 정보 필드에서 구성을 클릭합니다.
  8. 사용자 인증 정보 유형 드롭다운에서 서비스 계정 사용자 인증 정보 파일을 선택합니다.
  9. 파일 업로드를 클릭하고 이전 단계에서 다운로드한 JSON 키 파일을 선택합니다.
  10. 적용을 클릭합니다.
  11. 저장 후 종료를 클릭합니다.

전역 로그 수신기 만들기

  1. F5 Distributed Cloud Console에서 Multi-Cloud Network Connect 서비스에 있는지 확인합니다.
  2. 관리 > 로그 관리 > 전역 로그 수신기로 이동합니다.
  3. Add Global Log Receiver(전역 로그 수신기 추가)를 클릭합니다.
  4. 메타데이터 섹션에서 다음을 수행합니다.

    • 이름: 설명이 포함된 이름을 입력합니다 (예: chronicle-gcs-receiver).
    • 설명 (선택사항): Global log receiver for Google SecOps SIEM를 입력합니다.
  5. 로그 유형 드롭다운에서 내보낼 로그 유형을 선택합니다.

    • 요청 로그: 사용자, 경로, 메서드, 응답 코드가 포함된 HTTP 요청/응답 로그
    • 보안 이벤트: WAF 이벤트, DDoS, API 보호, 봇 방어 이벤트
    • 감사 로그: 공개 API를 통한 구성 변경사항
    • DNS 요청 로그: DNS 쿼리 로그
  6. 로그 메시지 선택 드롭다운에서 다음 중 하나를 선택합니다.

    • 현재 네임스페이스의 로그 선택: 현재 네임스페이스의 로그만 전송합니다.
    • 모든 네임스페이스의 로그 선택: 모든 네임스페이스의 로그를 전송합니다 (전체적인 가시성을 위해 권장됨).
    • 특정 네임스페이스의 로그 선택: 지정된 네임스페이스의 로그를 전송합니다 (항목 추가를 클릭하여 네임스페이스 이름을 추가).
  7. 수신기 구성 드롭다운에서 GCP 버킷 수신기를 선택합니다.

  8. GCP 버킷 이름 필드에 GCS 버킷의 이름을 입력합니다 (예: f5-dcs-logs).

  9. GCP Cloud Credentials 드롭다운에서 이전에 만든 클라우드 사용자 인증 정보 (예: gcp-chronicle-logs)를 선택합니다.

  10. 선택사항: 고급 필드 표시를 펼쳐 일괄 옵션을 구성합니다.

    • 일괄 제한 시간 옵션: 제한 시간(초)을 선택하고 값을 입력합니다(기본값: 300초).
    • 일괄 최대 이벤트: 최대 이벤트를 선택하고 32~2000 사이의 값을 입력합니다 (제한이 없으면 설정하지 않음).
    • 일괄 처리 바이트: 최대 바이트를 선택하고 4096~1048576 사이의 값을 입력합니다 (기본값: 10485760바이트 / 10MB).
  11. 저장 후 종료를 클릭합니다.

연결 테스트

  1. 전역 로그 수신기 목록에서 만든 수신기를 찾습니다 (예: chronicle-gcs-receiver).
  2. 작업 열에서 점 3개 (...)를 클릭합니다.
  3. 연결 테스트를 선택합니다.
  4. 테스트가 완료될 때까지 기다립니다.
  5. 연결이 성공했음을 나타내는 메시지가 표시됩니다.

GCS 버킷에서 로그 확인

  1. GCP 콘솔에서 Cloud Storage> 버킷으로 이동합니다.
  2. 버킷 이름 (예: f5-dcs-logs)을 클릭합니다.
  3. 로그 파일이 버킷에 생성되고 있는지 확인합니다.
  4. F5 Distributed Cloud는 다음 폴더 구조로 로그를 구성합니다.

    YYYY/MM/DD/HH/
    
    • 날짜별로 폴더가 생성됩니다 (YYYY/MM/DD).
    • 각 날짜 폴더 내에 시간 (HH)별로 하위 폴더가 생성됩니다.
    • 5분마다 새로운 압축 gzip 파일이 시간별 하위 폴더에 작성됩니다.
    • 파일은 NDJSON 형식 (줄바꿈으로 구분된 JSON)입니다.
  5. gzip 파일을 클릭하여 다운로드하고 로그 형식을 검사합니다.

Google SecOps 서비스 계정 가져오기

Google SecOps는 고유한 서비스 계정을 사용하여 GCS 버킷에서 데이터를 읽습니다. 이 서비스 계정에 버킷에 대한 액세스 권한을 부여해야 합니다.

서비스 계정 이메일 가져오기

  1. SIEM 설정> 피드로 이동합니다.
  2. 새 피드 추가를 클릭합니다.
  3. 단일 피드 구성을 클릭합니다.
  4. 피드 이름 필드에 피드 이름을 입력합니다(예: F5 DCS Logs).
  5. 소스 유형으로 Google Cloud Storage V2를 선택합니다.
  6. 로그 유형으로 F5 Distributed Cloud Services를 선택합니다.
  7. 서비스 계정 가져오기를 클릭합니다. 고유한 서비스 계정 이메일이 표시됩니다. 예를 들면 다음과 같습니다.

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. 다음 단계에서 사용할 수 있도록 이 이메일 주소를 복사합니다.

  9. 다음을 클릭합니다.

  10. 다음 입력 매개변수의 값을 지정합니다.

    • 스토리지 버킷 URL: GCS 버킷 URI를 입력합니다.

      gs://f5-dcs-logs/
      

      f5-dcs-logs을 GCS 버킷 이름으로 바꿉니다.

    • 소스 삭제 옵션: 환경설정에 따라 삭제 옵션을 선택합니다.

      • 삭제 안함: 전송 후 파일을 삭제하지 않습니다 (테스트에 권장).
      • 전송된 파일 삭제: 전송이 완료되면 파일을 삭제합니다.
      • 전송된 파일 및 빈 디렉터리 삭제: 전송이 완료되면 파일과 빈 디렉터리를 삭제합니다.

    • 최대 파일 기간: 지난 일수 동안 수정된 파일을 포함합니다 (기본값은 180일).

    • 애셋 네임스페이스: 애셋 네임스페이스

    • 수집 라벨: 이 피드의 이벤트에 적용할 라벨입니다.

  11. 다음을 클릭합니다.

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

Google SecOps 서비스 계정에 IAM 권한 부여

Google SecOps 서비스 계정에는 GCS 버킷에 대한 스토리지 객체 뷰어 역할이 필요합니다.

  1. Cloud Storage> 버킷으로 이동합니다.
  2. 버킷 이름 (예: f5-dcs-logs)을 클릭합니다.
  3. 권한 탭으로 이동합니다.
  4. 액세스 권한 부여를 클릭합니다.
  5. 다음 구성 세부정보를 제공합니다.

    • 주 구성원 추가: Google SecOps 서비스 계정 이메일을 붙여넣습니다.
    • 역할 할당: 스토리지 객체 뷰어 선택
  6. 저장을 클릭합니다.

UDM 매핑 테이블

로그 필드 UDM 매핑 논리
_id metadata.product_log_id 값이 직접 복사됨
src principal.namespace 값이 직접 복사됨
kubernetes_labels_app target.resource.attribute.labels app_label에서 병합됨 (kubernetes_labels_app에서 파생됨)
kubernetes_host target.hostname 값이 직접 복사됨
kubernetes_container_name target.resource.product_object_id 값이 직접 복사됨
bot_info.classification security_result.detection_fields bot_info_classification_label (bot_info.classification에서 파생됨)에서 병합됨
bot_info.name security_result.detection_fields bot_info_name_label (bot_info.name에서 파생됨)에서 병합됨
bot_info.type security_result.detection_fields bot_info_type_label (bot_info.type에서 파생됨)에서 병합됨
타임스탬프 @timestamp RFC3339, UNIX, ISO8601을 사용하여 날짜 필터로 파싱됨
visitor_id security_result.detection_fields visitor_id_label (visitor_id에서 파생됨)에서 병합됨
태그 security_result.detection_fields tag_label에서 병합됨 (태그에서 파생됨)
action security_result.action 일치 항목이 허용되면 ALLOW로 설정하고, 일치 항목이 거부되면 BLOCK으로 설정합니다.
줄이는 것을 security_result.severity 오류/경고인 경우 HIGH, 심각한 경우 CRITICAL, 알림인 경우 MEDIUM, 정보/정보인 경우 LOW로 설정합니다.
줄이는 것을 security_result.severity_details 값이 직접 복사됨
api_endpoint target.labels api_endpoint_label에서 병합됨 (api_endpoint에서 파생됨)
app_firewall_name principal.process.command_line 값이 직접 복사됨
app_type security_result.detection_fields about_app_type (app_type에서 파생됨)에서 병합됨
as_org security_result.detection_fields about_as_org (as_org에서 파생됨)에서 병합됨
asn security_result.detection_fields about_asn에서 병합됨 (asn에서 파생됨)
kubernetes.pod_id security_result.detection_fields about_pod_id에서 병합됨 (kubernetes.pod_id에서 파생됨)
kubernetes.pod_name security_result.detection_fields about_pod_name (kubernetes.pod_name에서 파생됨)에서 병합됨
위도 principal.location.region_latitude 부동 소수점으로 변환됨
longitude principal.location.region_longitude 부동 소수점으로 변환됨
req_params additional.fields about_req_params (req_params에서 파생됨)에서 병합됨
as_number additional.fields about_as_number에서 병합됨 (as_number에서 문자열로 변환됨)
x_forwarded_for intermediary.ip 유효한 IP인 경우 병합됨
x_forwarded_for security_result.about.resource.attribute.labels IP가 아닌 경우 x_forwarded_for_label에서 병합됨
policy_hit.malicious_user_mitigate_action security_result.detection_fields malicious_user_label에서 병합됨 (policy_hit.malicious_user_mitigate_action에서 파생됨)
policy_hit.policy security_result.about.resource.attribute.labels policy_label에서 병합됨 (policy_hit.policy에서 파생됨)
policy_hit.policy_namespace additional.fields policy_namespace_label에서 병합됨 (policy_hit.policy_namespace에서 파생됨)
policy_hit.policy_rule security_result.rule_name 값이 직접 복사됨
policy_hit.policy_rule_description security_result.description 값이 직접 복사됨
policy_hit.policy_set target.resource.name 값이 직접 복사됨
policy_hit.result additional.fields result_label에서 병합됨 (policy_hit.result에서 파생됨)
vhost_id security_result.detection_fields vhostlabel에서 병합됨 (vhost_id에서 파생됨)
messageid security_result.detection_fields messageid_label (messageid에서 파생됨)에서 병합됨
sec_event_name security_result.detection_fields sec_event_name_label (sec_event_name에서 파생됨)에서 병합됨
sec_event_type security_result.detection_fields sec_event_type_label (sec_event_type에서 파생됨)에서 병합됨
vh_name security_result.detection_fields vhost_name_label (vh_name에서 파생됨)에서 병합됨
tls_fingerprint security_result.detection_fields tls_fingerprint_label (tls_fingerprint에서 파생됨)에서 병합됨
시간 additional.fields time_label (시간에서 파생됨)에서 병합됨
kubernetes.namespace_name additional.fields namespace_name_label (kubernetes.namespace_name에서 파생됨)에서 병합됨
src_instance additional.fields src_instance_label (src_instance에서 파생됨)에서 병합됨
violation_rating additional.fields violation_rating_label (violation_rating에서 파생됨)에서 병합됨
req_size additional.fields req_size_label에서 병합됨 (req_size에서 문자열로 변환됨)
rsp_code additional.fields rsp_code_label에서 병합됨 (rsp_code에서 문자열로 변환됨)
rsp_code_class additional.fields rsp_code_class_label에서 병합됨 (rsp_code_class에서 문자열로 변환됨)
rsp_size additional.fields rsp_size_label에서 병합됨 (rsp_size에서 문자열로 변환됨)
original_path additional.fields original_path_label (original_path에서 파생됨)에서 병합됨
req_path target.url 값이 직접 복사됨
req_headers_size additional.fields req_headers_size_label (req_headers_size에서 파생됨)에서 병합됨
recommended_action additional.fields recommended_action_label (recommended_action에서 파생됨)에서 병합됨
enforcement_mode additional.fields enforcement_mode_label (enforcement_mode에서 파생됨)에서 병합됨
src_ip principal.ip, principal.asset.ip IPv4 정규식과 일치하는 경우 병합됨
호스트 principal.ip, principal.asset.ip IPv4 정규식과 일치하는 경우 병합됨
호스트 이름 principal.hostname, principal.asset.hostname 비어 있지 않거나 다음인 경우 값이 직접 복사됩니다.
http_version network.application_protocol_version 값이 직접 복사됨
http_version network.application_protocol HTTP를 포함하는 경우 HTTP로, HTTPS를 포함하는 경우 HTTPS로 설정됩니다.
네트워크 principal.nat_ip IPv4 정규식과 일치하는 경우 병합됨
dst_ip target.ip, target.asset.ip IPv4 정규식과 일치하는 경우 병합됨
dst_port target.port 정수로 변환됨
src_port principal.port 정수로 변환됨
src_site additional.fields src_site_field (src_site에서 파생됨)에서 병합됨
사이트 additional.fields site_field에서 병합됨 (사이트에서 파생됨)
cluster_name additional.fields cluster_name_field (cluster_name에서 파생됨)에서 병합됨
도메인 principal.administrative_domain 값이 직접 복사됨
메서드 network.http.method 비어 있지 않거나 N/A인 경우 값이 직접 복사됨
네임스페이스 target.namespace 값이 직접 복사됨
city principal.location.city 값이 직접 복사됨
스트림 security_result.detection_fields stream_label (스트림에서 파생됨)에서 병합됨
리전 principal.location.country_or_region 값이 직접 복사됨
사용자 principal.user.userid user_id의 grok 패턴을 사용하여 사용자로부터 추출됨
user_ip target.ip, target.asset.ip 추출된 user_ip에서 병합됨
쿠키 additional.fields 쿠키에서 병합됨 (req_headers의 쿠키에서 파생됨)
X-F5-Request-Id security_result.detection_fields x_f5_request_id에서 병합됨 (req_headers의 X-F5-Request-Id에서 파생됨)
X-Request-Id security_result.detection_fields request_id에서 병합됨 (req_headers의 X-Request-Id에서 파생됨)
security_result security_result 직접 병합됨
has_network, has_principal, has_target metadata.event_type 모두 true인 경우 NETWORK_CONNECTION으로 설정, has_principal이 true인 경우 STATUS_UPDATE로 설정, 그 외의 경우 GENERIC_EVENT로 설정
metadata.vendor_name 'F5_DCS'로 설정
metadata.product_name 'F5 DCS'로 설정
intermediary intermediary 직접 병합됨

도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.