VPC 흐름 로그 수집

다음에서 지원:

이 문서에서는 Google Cloud를 사용하여 VPC 흐름 로그를 Google Security Operations로 내보내는 방법을 설명합니다. 파서는 로그를 기본 제공 JSON 형식에서 Google Security Operations UDM으로 변환합니다. 소스 및 대상 IP, 포트, 프로토콜, 전송된 바이트와 같은 관련 필드를 추출한 다음 네트워크 방향과 특수한 사례를 고려하여 Google SecOps에서 정확하게 표현할 수 있도록 해당 UDM 필드에 매핑합니다.

시작하기 전에

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

  • Google SecOps 인스턴스
  • VPC 흐름이 Google Cloud 환경에서 설정되어 활성화되어 있습니다.
  • Google Cloud에 대한 액세스 권한 관리

Google Cloud Storage 버킷 만들기

  1. Google Cloud 콘솔에 로그인합니다.
  2. Cloud Storage 버킷 페이지로 이동합니다.

    버킷으로 이동

  3. 만들기를 클릭합니다.

  4. 버킷 만들기 페이지에서 버킷 정보를 입력합니다. 다음 각 단계를 완료한 후 계속을 클릭하여 다음 단계로 진행합니다.

    1. 시작하기 섹션에서 다음을 수행합니다.

      1. 버킷 이름 요구사항을 충족하는 고유한 이름을 입력합니다(예: vpcflow-logs).
      2. 계층적 네임스페이스를 사용 설정하려면 펼치기 화살표를 클릭하여 파일 지향 및 데이터 집약적인 워크로드에 최적화 섹션을 펼친 다음 이 버킷에서 계층적 네임스페이스 사용 설정을 선택합니다.

      3. 버킷 라벨을 추가하려면 펼치기 화살표를 클릭하여 라벨 섹션을 펼칩니다.

      4. 라벨 추가를 클릭하고 라벨의 키와 값을 지정합니다.

    2. 데이터 저장 위치 선택 섹션에서 다음을 수행합니다.

      1. 위치 유형을 선택합니다.
      2. 위치 유형 메뉴를 사용하여 버킷 내 객체 데이터가 영구적으로 저장될 위치를 선택합니다.

      3. 버킷 간 복제를 설정하려면 버킷 간 복제 설정 섹션을 펼칩니다.

    3. 데이터의 스토리지 클래스 선택 섹션에서 버킷에 기본 스토리지 클래스를 선택하거나, 버킷 데이터의 자동 스토리지 클래스 관리에 자동 클래스를 선택합니다.

    4. 객체 액세스를 제어하는 방식 선택 섹션에서 공개 액세스 방지를 적용하지 않음을 선택하고 버킷의 객체에 대한 액세스 제어 모델을 선택합니다.

    5. '객체 데이터 보호 방법 선택' 섹션에서 다음을 수행합니다.

      1. 버킷에 설정할 데이터 보호 옵션을 선택합니다.
      2. 객체 데이터의 암호화 방법을 선택하려면 데이터 암호화라는 펼치기 화살표를 클릭하고 데이터 암호화 방법을 선택합니다.
  5. 만들기를 클릭합니다.

Google Cloud VPC 흐름에서 로그 내보내기 구성

  1. 권한이 있는 계정을 사용하여 Google Cloud 계정에 로그인합니다.
  2. 시작하기 페이지에서 VPC 네트워크를 클릭합니다.
  3. 기본을 클릭하면 서브넷 페이지가 표시됩니다.
  4. 모든 로그를 선택합니다.
  5. 흐름 로그 > 구성을 클릭합니다.
  6. 집계 간격을 선택합니다(예: 30초).
  7. 샘플링 비율을 제공합니다(예: 50%).
  8. 저장을 클릭합니다.
  9. 검색창에 로깅을 검색하고 Enter 키를 누릅니다.
  10. 로그 탐색기에서 로그 이름VPC_flows를 선택하여 로그를 필터링하고 적용을 클릭합니다.
  11. 추가 작업을 클릭합니다.
  12. 싱크 만들기를 클릭합니다.
  13. 다음 구성을 제공합니다.
    1. 싱크 세부정보: 이름과 설명을 입력합니다.
    2. 다음을 클릭합니다.
    3. 싱크 대상 위치: Cloud Storage 버킷을 선택합니다.
    4. Cloud Storage 버킷: 이전에 만든 버킷을 선택하거나 새 버킷을 만듭니다.
    5. 다음을 클릭합니다.
    6. 싱크에 포함할 로그 선택: Cloud Storage 버킷에서 옵션을 선택하면 기본 로그가 채워집니다.
    7. 다음을 클릭합니다.
    8. 선택사항: 싱크에서 필터링할 로그 선택: 싱크하지 않을 로그를 선택합니다.
  14. 싱크 만들기를 클릭합니다.

피드 설정

Google SecOps 플랫폼에서 피드를 설정하는 방법은 두 가지입니다.

  • SIEM 설정 > 피드 > 새로 추가
  • 콘텐츠 허브 > 콘텐츠 팩 > 시작하기

Google Cloud VPC 흐름 피드를 설정하는 방법

  1. Google Cloud Compute 플랫폼 팩을 클릭합니다.
  2. GCP VPC 흐름 피드 logtype을 찾습니다.
  3. 다음 필드에 값을 지정합니다.

    • 소스 유형: Amazon SQS V2
    • Queue Name: 읽어올 SQS 큐 이름
    • S3 URI: 버킷 URI입니다.
      • s3://your-log-bucket-name/
        • your-log-bucket-name을 실제 S3 버킷 이름으로 바꿉니다.
    • 소스 삭제 옵션: 수집 환경설정에 따라 삭제 옵션을 선택합니다.

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

    • SQS 대기열 액세스 키 ID: 20자리 영숫자 문자열인 계정 액세스 키입니다.

    • SQS 대기열 보안 비밀 액세스 키: 40자로 된 영숫자 문자열인 계정 액세스 키입니다.

    고급 옵션

    • 피드 이름: 피드를 식별하는 미리 채워진 값입니다.
    • 애셋 네임스페이스: 피드와 연결된 네임스페이스입니다.
    • 수집 라벨: 이 피드의 모든 이벤트에 적용되는 라벨입니다.
  4. 피드 만들기를 클릭합니다.

이 제품군 내에서 다양한 로그 유형에 대해 여러 피드를 구성하는 방법에 관한 자세한 내용은 제품별 피드 구성을 참고하세요.

지원되는 VPC 흐름 로그 로그 형식

VPC 흐름 로그 파서는 JSON 형식의 로그를 지원합니다.

지원되는 VPC 흐름 로그 샘플 로그

  • JSON

    {
      "insertId": "1wjp1y9f8vc6y6",
      "jsonPayload": {
        "bytes_sent": "0",
        "connection": {
          "dest_ip": "198.51.100.0",
          "dest_port": 32846,
          "protocol": 6,
          "src_ip": "198.51.100.1",
          "src_port": 443
        },
        "dest_instance": {
          "project_id": "logging-259109",
          "region": "us-west2",
          "vm_name": "demisto-01",
          "zone": "us-west2-a"
        },
        "dest_vpc": {
          "project_id": "logging-259109",
          "subnetwork_name": "default",
          "vpc_name": "default"
        },
        "end_time": "2020-03-28T10:44:41.896734136Z",
        "packets_sent": "2",
        "reporter": "DEST",
        "start_time": "2020-03-28T10:44:41.896734136Z"
      },
      "logName": "projects/logging-259109/logs/compute.googleapis.com%2Fvpc_flows",
      "receiveTimestamp": "2020-03-28T10:44:50.112903743Z",
      "resource": {
        "labels": {
          "location": "us-west2-a",
          "project_id": "dummy_project_id",
          "subnetwork_id": "subnetwork_id",
          "subnetwork_name": "default"
        },
        "type": "gce_subnetwork"
      },
      "timestamp": "2020-03-28T10:44:50.112903743Z"
    }
    

UDM 매핑 테이블

로그 필드 UDM 매핑 논리
connection.dest_ip target.asset.ip
target.ip
network.direction이 OUTBOUND인 경우 직접 매핑
network.direction이 INBOUND인 경우 principal.ip에서 매핑됩니다.
connection.dest_port target.port -1보다 큰 경우 정수로 변환됩니다.
connection.protocol network.ip_protocol 문자열로 변환된 후 정수로 매핑됩니다.
정수 값을 기반으로 IP 프로토콜 이름에 매핑됩니다 (예: TCP, UDP, ICMP)
connection.src_ip principal.ip 직접 매핑
connection.src_port principal.port 정수로 변환되었습니다.
dest_instance.region target.location.name 직접 매핑
dest_instance.vm_name target.asset.hostname 직접 매핑
dest_location.city target.location.city 직접 매핑
dest_location.country target.location.country_or_region 직접 매핑
dest_location.region target.location.state 직접 매핑
dest_vpc.project_id target.namespace dest_vpc.vpc_name과 함께 사용하여 target.namespace를 형성합니다.
dest_vpc.vpc_name target.namespace dest_vpc.project_id와 함께 사용하여 target.namespace를 형성합니다.
insertId metadata.product_log_id 직접 매핑
jsonPayload.bytes_sent network.sent_bytes network.sent_bytes로 이름이 변경되고 uinteger로 변환되었습니다.
jsonPayload.packets_sent network.sent_packets 정수로 변환되었습니다.
labels.tunnel_id additional.fields Tunnel Id 키와 string_value 유형으로 additional.fields에 병합되었습니다.
logName security_result.category_details 직접 매핑
resource.labels.project_id target.resource.name //cloudresourcemanager.googleapis.com/projects/{resource.labels.project_id} 형식으로 target.resource.name을 생성하는 데 사용됩니다.
resource.labels.region target.location.country_or_region 직접 매핑
resource.labels.subnetwork_id target.user.attribute.labels 키가 subnetwork_id인 target.user.attribute.labels로 병합되었습니다.
resource.type metadata.product_event_type 직접 매핑
줄이는 것을 security_result.severity 값이 DEBUG이면 LOW에 매핑됩니다.
src_gke_details.cluster.cluster_location principal.resource.attribute.labels cluster_location 키와 함께 principal.resource.attribute.labels로 병합되었습니다.
src_gke_details.cluster.cluster_name principal.resource.attribute.labels cluster_name 키와 함께 principal.resource.attribute.labels로 병합되었습니다.
src_gke_details.pod.pod_name principal.resource.attribute.labels pod_name 키와 함께 principal.resource.attribute.labels로 병합되었습니다.
src_gke_details.pod.pod_namespace principal.resource.attribute.labels pod_namespace 키와 함께 principal.resource.attribute.labels로 병합되었습니다.
src_instance.region principal.location.name 직접 매핑
src_instance.vm_name principal.asset.hostname 직접 매핑
src_location.city principal.location.city 직접 매핑
src_location.country principal.location.country_or_region 직접 매핑
src_location.region principal.location.state 직접 매핑
src_vpc.project_id principal.namespace src_vpc.vpc_name과 함께 사용하여 principal.namespace를 형성합니다.
src_vpc.vpc_name principal.namespace src_vpc.project_id와 함께 사용하여 principal.namespace를 형성합니다.
textPayload additional.fields Textpayload 키와 string_value 유형으로 additional.fields에 병합되었습니다.
타임스탬프 metadata.event_timestamp jsonPayload.end_time이 비어 있는 경우 event_timestamp를 채우는 데 사용됩니다.
metadata.description 'reporter' 필드를 기반으로 신고자 (SRC 또는 DEST)와 방향 (INBOUND 또는 OUTBOUND)을 포함한 네트워크 흐름 설명이 생성됩니다.
metadata.event_type VPC 흐름 로그의 경우 NETWORK_CONNECTION로 설정하고 기타 로그 유형의 경우 USER_RESOURCE_ACCESS로 설정합니다.
metadata.log_type GCP_VPC_FLOW로 설정합니다.
metadata.product_name GCP VPC Flow Logs로 설정합니다.
metadata.product_version 1.0로 설정합니다.
metadata.vendor_name Google Cloud로 설정합니다.
network.direction target.port를 기반으로 결정됩니다. 포트가 잘 알려진 포트 또는 예약된 포트인 경우 INBOUND로 간주되고, 그렇지 않으면 OUTBOUND로 간주됩니다.
security_result.severity 기본적으로 LOW로 설정합니다.
target.resource.attribute.cloud.environment GOOGLE_CLOUD_PLATFORM로 설정합니다.
target.resource.resource_type CLOUD_PROJECT로 설정합니다.

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