AWS VPC 흐름 로그 수집

다음에서 지원:

이 문서에서는 Amazon S3 (텍스트 형식), Kinesis Data Firehose가 있는 Amazon CloudWatch Logs, Amazon S3의 CSV 형식 등 세 가지 방법을 사용하여 AWS VPC 흐름 로그를 Google Security Operations로 수집하는 방법을 설명합니다. AWS VPC 흐름 로그는 VPC의 네트워크 인터페이스에서 송수신되는 IP 트래픽에 대한 정보를 캡처할 수 있는 기능입니다. 이 통합을 사용하면 분석 및 모니터링을 위해 이러한 로그를 Google SecOps로 보낼 수 있습니다.

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

Google SecOps는 다음 두 가지 기본 텍스트 형식으로 AWS VPC 흐름 로그의 수집을 지원합니다.

  • JSON 형식: AWS_VPC_FLOW 로그 유형은 JSON 형식으로 로그를 파싱합니다. 이 형식에서 각 로그 항목에는 키와 해당 값이 모두 포함되어 데이터가 자체 설명됩니다.
  • CSV 형식: Google SecOps는 CSV 형식의 AWS VPC 흐름 로그용 파서도 제공합니다. 이 형식은 헤더 행에 필드 키를 한 번만 나열하고 후속 행에는 쉼표로 구분된 값만 포함합니다.

CSV 형식에는 각 로그 항목에 필드 키가 포함되지 않으므로 AWS_VPC_FLOW_CSV 파서는 엄격하게 사전 정의된 값 순서를 사용합니다. CSV 파일은 올바른 파싱을 위해 다음 필드 순서를 준수해야 합니다.

   Version,Account_id,Interface_id,Srcaddr,Dstaddr,Srcport,Dstport,Protocol,Packets,Bytes,Start,End,Action,Log_status,Vpc_id,Subnet_id,Instance_id,Tcp_flags,Type,Pkt_srcaddr,Pkt_dstaddr,Region,Az_id,Sublocation_type,Sublocation_id,Pkt_src_aws_service,Pkt_dst_aws_service,Flow_direction,Traffic_path,Ecs_cluster_arn,Ecs_cluster_name,Ecs_container_instance_arn,Ecs_container_instance_id,Ecs_container_id,Ecs_second_container_id,Ecs_service_name,Ecs_task_definition_arn,Ecs_task_arn,Ecs_task_id

다음은 CSV 로그 행의 예시입니다.

   7,369096419186,eni-0520bb5efed19d33a,10.119.32.34,10.119.223.3,51256,16020,6,14,3881,1723542839,1723542871,ACCEPT,OK,vpc-0769a6844ce873a6a,subnet-0cf9b2cb32f49f258,i-088d6080f45f5744f,0,IPv4,10.119.32.34,10.119.223.3,ap-northeast-1,apne1-az4,-,-,-,-,ingress,,-,-,-,-,-,-,-,-,-,-

사용할 수 있는 값이 없는 필드의 경우 CSV 행 내에서 올바른 위치 순서를 유지하기 위해 빈 값 (예: , ,)을 전달해야 합니다.

시작하기 전에

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

  • Google SecOps 인스턴스
  • AWS에 대한 액세스 권한 관리

옵션 1: AWS S3 (텍스트 형식)를 사용하여 AWS VPC 흐름 로그 내보내기 구성

다음 섹션에서는 Google SecOps에서 분석할 수 있도록 VPC 흐름 로그를 내보내기 위해 Amazon S3 및 Identity and Access Management 권한을 구성하는 방법을 설명합니다.

Google SecOps용 AWS S3 버킷 및 IAM 구성

  1. 이 사용자 가이드(버킷 만들기)에 따라 Amazon S3 버킷을 만듭니다.
  2. 나중에 참조할 수 있도록 버킷 이름리전을 저장합니다 (예: aws-vpc-flowlogs).
  3. 이 사용자 가이드(IAM 사용자 만들기)에 따라 사용자를 만듭니다.
  4. 생성된 사용자를 선택합니다.
  5. 보안 사용자 인증 정보 탭을 선택합니다.
  6. 액세스 키 섹션에서 액세스 키 만들기를 클릭합니다.
  7. 사용 사례서드 파티 서비스를 선택합니다.
  8. 다음을 클릭합니다.
  9. 선택사항: 설명 태그를 추가합니다.
  10. 액세스 키 만들기를 클릭합니다.
  11. CSV 파일 다운로드를 클릭하여 향후 참조할 수 있도록 액세스 키비밀 액세스 키를 저장합니다.
  12. 완료를 클릭합니다.
  13. 권한 탭을 선택합니다.
  14. 권한 정책 섹션에서 권한 추가를 클릭합니다.
  15. 권한 추가를 선택합니다.
  16. 정책 직접 연결을 선택합니다.
  17. AmazonS3FullAccess 정책을 검색합니다.
  18. 정책을 선택합니다.
  19. 다음을 클릭합니다.
  20. 권한 추가를 클릭합니다.

VPC 흐름 로그 생성 (대상: Amazon S3, 텍스트 형식)

  1. AWS 콘솔 > VPC > 내 VPC/서브넷/네트워크 인터페이스를 열고 로깅할 범위를 선택합니다.
  2. 작업 > 흐름 로그 만들기를 클릭합니다.
  3. 다음 구성 세부정보를 제공합니다.
    • 필터: 정책에 따라 모두 (또는 수락 / 거부)를 선택합니다.
    • 최대 집계 간격: 1분 (권장) 또는 10분을 선택합니다.
    • 대상: Amazon S3 버킷으로 전송
    • S3 버킷 ARN: 이전 섹션에서 만든 버킷 이름을 arn:aws:s3:::<your-bucket> 형식으로 입력합니다.
    • 로그 레코드 형식: AWS 기본 형식을 선택합니다.
    • 로그 파일 형식: 텍스트 (일반)를 선택합니다.
    • 선택사항: 필요한 경우가 아니면 Hive 호환 프리픽스시간별 파티션을 사용 중지합니다.
  4. 흐름 로그 만들기를 클릭합니다.

AWS VPC 흐름 로그 (S3 텍스트)를 수집하도록 Google SecOps에서 피드 구성

  1. SIEM 설정> 피드로 이동합니다.
  2. + 새 피드 추가를 클릭합니다.
  3. 피드 이름 필드에 피드 이름을 입력합니다 (예: AWS VPC Flow Logs - S3 (Text)).
  4. 소스 유형으로 Amazon S3 V2를 선택합니다.
  5. 로그 유형으로 AWS VPC 흐름을 선택합니다.
  6. 다음을 클릭합니다.
  7. 다음 입력 파라미터의 값을 지정합니다.
    • S3 URI: S3 버킷 주소를 입력합니다 (예: s3://<your-bucket>/AWSLogs/<account-id>/vpcflowlogs/<region>/).
    • 소스 삭제 옵션: 환경설정에 따라 삭제 옵션을 선택합니다.
    • 최대 파일 기간: 기본값은 180일입니다.
    • 액세스 키 ID: S3 버킷에 액세스할 수 있는 사용자 액세스 키입니다.
    • 보안 비밀 액세스 키: S3 버킷에 액세스할 수 있는 사용자 보안 비밀 키입니다.
    • 애셋 네임스페이스: 애셋 네임스페이스입니다.
    • 수집 라벨: 이 피드의 이벤트에 적용된 라벨입니다.
  8. 다음을 클릭합니다.
  9. 확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.

옵션 2: Amazon CloudWatch Logs 및 Kinesis Data Firehose를 사용하여 AWS VPC 흐름 로그 내보내기 구성

CloudWatch로 이동하도록 흐름 로그를 설정한 후 이 옵션은 Kinesis Data Firehose를 사용하여 선택한 대상으로 로그 데이터를 스트리밍하여 추가 데이터 내보내기 계층을 제공합니다.

VPC 흐름 로그 만들기 (대상: Amazon CloudWatch Logs)

  1. AWS 콘솔 > VPC > 내 VPC/서브넷/네트워크 인터페이스를 엽니다.
  2. 작업 > 흐름 로그 만들기를 클릭합니다.
  3. 다음 구성 세부정보를 제공합니다.
    • 필터: 정책에 따라 모두 (또는 수락/거부)를 선택합니다.
    • 최대 집계 간격: 1분 (권장) 또는 10분을 선택합니다.
    • 대상: CloudWatch Logs로 전송을 선택합니다.
    • 대상 로그 그룹: 로그 그룹 (예: /aws/vpc/flowlogs)을 선택하거나 만듭니다.
    • IAM 역할: CloudWatch Logs에 쓸 수 있는 역할을 선택합니다.
    • 로그 레코드 형식: AWS 기본값 (버전 2) 또는 맞춤 (추가 필드 포함)을 선택합니다.
  4. 흐름 로그 만들기를 클릭합니다.

Google SecOps에서 피드를 만들어 엔드포인트 URL과 보안 비밀 키 가져오기

  1. SIEM 설정> 피드로 이동합니다.
  2. + 새 피드 추가를 클릭합니다.
  3. 피드 이름 필드에 피드 이름을 입력합니다 (예: AWS VPC Flow Logs - CloudWatch via Firehose).
  4. 소스 유형으로 Amazon Data Firehose를 선택합니다.
  5. 로그 유형으로 AWS VPC 흐름을 선택합니다.
  6. 다음을 클릭합니다.
  7. 다음 입력 파라미터의 값을 지정합니다.
    • 분할 구분자: 선택사항 n
    • 애셋 네임스페이스: 애셋 네임스페이스 (예: aws.vpc.flowlogs.cwl)입니다.
    • 수집 라벨: 이 피드의 이벤트에 적용할 라벨입니다 (예: source=vpc_flow_firehose).
  8. 다음을 클릭합니다.
  9. 피드 구성을 검토하고 제출을 클릭합니다.
  10. 보안 비밀 키 생성을 클릭하여 이 피드를 인증하기 위한 보안 비밀 키를 생성합니다.
  11. 이 보안 비밀을 다시 볼 수 없으므로 보안 비밀 키를 복사하여 저장합니다.
  12. 세부정보 탭으로 이동합니다.
  13. 엔드포인트 정보 필드에서 피드 엔드포인트 URL을 복사합니다.
  14. 완료를 클릭합니다.

Amazon Data Firehose 피드에 대한 API 키 만들기

  1. Google Cloud 콘솔의 사용자 인증 정보 페이지로 이동합니다.
  2. 사용자 인증 정보 만들기를 클릭한 후 API 키를 선택합니다.
  3. 키를 복사하여 안전한 위치에 저장합니다.
  4. Google SecOps API에 대한 API 키 액세스를 제한합니다.

CloudWatch Logs에서 Firehose로의 IAM 권한 구성

  1. AWS 콘솔에서 IAM > 정책 > 정책 만들기 > JSON으로 이동합니다.
  2. 다음 정책 JSON을 붙여넣고 <region><account-id>을 AWS 리전 및 계정 ID로 바꿉니다.

    {
    "Version": "2012-10-17",
    "Statement": [
       {
          "Effect": "Allow",
          "Action": [
          "firehose:PutRecord",
          "firehose:PutRecordBatch"
          ],
          "Resource": "arn:aws:firehose:<region>:<account-id>:deliverystream/cwlogs-to-secops"
       }
    ]
    }
    
  3. 정책 이름을 CWLtoFirehoseWrite로 지정하고 정책 만들기를 클릭합니다.

  4. IAM > 역할 > 역할 만들기로 이동합니다.

  5. 커스텀 트러스트 정책을 선택하고 다음을 붙여넣습니다.

    {
    "Version": "2012-10-17",
    "Statement": [
       {
          "Effect": "Allow",
          "Principal": {
          "Service": "logs.<region>.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
       }
    ]
    }
    
  6. 역할에 CWLtoFirehoseWrite 정책을 연결합니다.

  7. 역할 이름을 CWLtoFirehoseRole로 지정하고 역할 만들기를 클릭합니다.

Amazon Kinesis Data Firehose를 Google SecOps에 구성

  1. AWS 콘솔에서 Kinesis > Data Firehose > 전송 스트림 만들기로 이동합니다.
  2. 다음 구성 세부정보를 제공합니다.
    • 소스: 직접 PUT 또는 기타 소스를 선택합니다.
    • 대상: HTTP 엔드포인트를 선택합니다.
    • 이름: cwlogs-to-secops
    • HTTP 엔드포인트 URL: API 키가 추가된 Google SecOps의 피드 HTTPS 엔드포인트 URL을 입력합니다. <ENDPOINT_URL>?key=<API_KEY>
    • HTTP 메서드: POST를 선택합니다.
  3. 액세스 키에서 다음을 수행합니다.
    • Google SecOps 피드에서 생성된 보안 비밀 키를 입력합니다 (이 키는 X-Amz-Firehose-Access-Key 헤더가 됨).
    • 버퍼링 힌트: 버퍼 크기 = 1MiB, 버퍼 간격 = 60초
    • 압축: 사용 중지됨을 선택합니다.
    • S3 백업: 사용 중지됨을 선택합니다.
    • 재시도로깅 설정은 기본값으로 둡니다.
  4. 전송 스트림 만들기를 클릭합니다.

CloudWatch Logs 그룹을 Firehose 스트림에 구독

  1. CloudWatch > 로그 > 로그 그룹으로 이동합니다.
  2. 타겟 로그 그룹 (예: /aws/vpc/flowlogs)을 선택합니다.
  3. 구독 필터 탭을 열고 만들기를 클릭합니다.
  4. Amazon Kinesis Data Firehose 구독 필터 만들기를 선택합니다.
  5. 다음 구성 세부정보를 제공합니다.
    • 대상: 전송 스트림 cwlogs-to-secops를 선택합니다.
    • 권한 부여: 역할 CWLtoFirehoseRole를 선택합니다.
    • 필터 이름: all-events를 입력합니다.
    • 필터 패턴: 모든 이벤트를 전송하려면 비워 둡니다.
  6. 스트리밍 시작을 클릭합니다.

옵션 3: Amazon S3를 사용하여 CSV 형식으로 AWS VPC 흐름 로그 구성

로그를 CSV 형식으로 변환 (선택사항)

  1. CSV 행이 VPC 흐름 로그 맞춤 형식 (예: 표준 v2 필드 집합 또는 v5/v7 집합)에서 선택한 필드와 일치하는 엄격하고 일관된 열 순서를 따르는지 확인합니다. 파서 옵션에서 헤더 행을 예상하지 않는 한 프로덕션 파일에 헤더 행을 포함하지 마세요.
  2. 안정적인 접두사(예: s3://<your-bucket>/vpcflowlogs-csv/<region>/year=<year>/month=<month>/day=<day>/)에 CSV 파일을 씁니다.

AWS VPC 흐름 로그 (CSV)를 수집하도록 Google SecOps에서 피드 구성

  1. SIEM 설정> 피드로 이동합니다.
  2. + 새 피드 추가를 클릭합니다.
  3. 피드 이름 필드에 피드 이름을 입력합니다 (예: AWS VPC Flow Logs - S3 (CSV)).
  4. 소스 유형으로 Amazon S3 V2를 선택합니다.
  5. 로그 유형으로 AWS VPC 흐름 (CSV)을 선택합니다.
  6. 다음을 클릭합니다.
  7. 다음 입력 파라미터의 값을 지정합니다.
    • S3 URI: S3 버킷 주소를 입력합니다 (예: s3://<your-bucket>/vpcflowlogs-csv/<region>/).
    • 소스 삭제 옵션: 환경설정에 따라 삭제 옵션을 선택합니다.
    • 최대 파일 기간: 기본값은 180일입니다.
    • 액세스 키 ID: S3 버킷에 액세스할 수 있는 사용자 액세스 키입니다.
    • 보안 비밀 액세스 키: S3 버킷에 액세스할 수 있는 사용자 보안 비밀 키입니다.
    • 애셋 네임스페이스: 애셋 네임스페이스입니다.
    • 수집 라벨: 이 피드의 이벤트에 적용된 라벨입니다.
  8. 다음을 클릭합니다.
  9. 확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.

UDM 매핑 테이블

로그 필드 UDM 매핑 논리
accountId read_only_udm.metadata.product_log_id 원시 로그 필드 accountId에서 추출한 값입니다.
action read_only_udm.security_result.action_details 원시 로그 필드 action에서 추출한 값입니다.
action read_only_udm.security_result.action action가 ACCEPT인 경우 ALLOW로 매핑되고 actionREJECT인 경우 BLOCK으로 매핑됩니다.
az_id read_only_udm.principal.cloud.availability_zone 원시 로그 필드 az_id에서 추출한 값입니다.
바이트 read_only_udm.network.received_bytes 원시 로그 필드 bytes에서 추출한 값입니다.
dstaddr read_only_udm.target.ip 원시 로그 필드 dstaddr에서 추출한 값입니다.
dstport read_only_udm.target.port 원시 로그 필드 dstport에서 추출한 값입니다.
end_time read_only_udm.about.resource.attribute.labels.value 원시 로그 필드 end_time에서 추출한 값입니다.
end_time read_only_udm.metadata.ingested_timestamp 원시 로그 필드 end_time에서 추출한 값입니다.
flow_direction read_only_udm.network.direction flow_directioningress이면 INBOUND에 매핑되고, flow_directionegress이면 OUTBOUND에 매핑됩니다.
InstanceID read_only_udm.principal.cloud.project.id 원시 로그 필드 InstanceID에서 추출한 값입니다.
interfaceId read_only_udm.about.resource.attribute.labels.value 원시 로그 필드 interfaceId에서 추출한 값입니다.
logStatus read_only_udm.about.resource.attribute.labels.value 원시 로그 필드 logStatus에서 추출한 값입니다.
packets read_only_udm.about.resource.attribute.labels.value 원시 로그 필드 packets에서 추출한 값입니다.
pkt_dst_aws_service read_only_udm.about.resource.attribute.labels.value 원시 로그 필드 pkt_dst_aws_service에서 추출한 값입니다.
pkt_dstaddr read_only_udm.intermediary.ip 원시 로그 필드 pkt_dstaddr에서 추출한 값입니다.
pkt_srcaddr read_only_udm.intermediary.ip 원시 로그 필드 pkt_srcaddr에서 추출한 값입니다.
pkt_src_aws_service read_only_udm.about.resource.attribute.labels.value 원시 로그 필드 pkt_src_aws_service에서 추출한 값입니다.
프로토콜 read_only_udm.network.ip_protocol protocol이 6이면 TCP에 매핑되고, protocol이 17이면 UDP에 매핑되며, 그 밖의 경우에는 UNKNOWN_IP_PROTOCOL에 매핑됩니다.
리전 read_only_udm.principal.location.country_or_region 원시 로그 필드 Region에서 추출한 값입니다.
srcaddr read_only_udm.principal.ip 원시 로그 필드 srcaddr에서 추출한 값입니다.
srcport read_only_udm.principal.port 원시 로그 필드 srcport에서 추출한 값입니다.
start_time read_only_udm.about.resource.attribute.labels.value 원시 로그 필드 start_time에서 추출한 값입니다.
start_time read_only_udm.metadata.event_timestamp 원시 로그 필드 start_time에서 추출한 값입니다.
SubnetID read_only_udm.about.resource.attribute.labels.value 원시 로그 필드 SubnetID에서 추출한 값입니다.
tcp_flags read_only_udm.about.resource.attribute.labels.value 원시 로그 필드 tcp_flags에서 추출한 값입니다.
traffic_path read_only_udm.about.resource.attribute.labels.value 원시 로그 필드 traffic_path에서 추출한 값입니다.
버전 read_only_udm.metadata.product_version 원시 로그 필드 version에서 추출한 값입니다.
vpcID read_only_udm.principal.cloud.vpc.id 원시 로그 필드 vpcID에서 추출한 값입니다.
read_only_udm.metadata.vendor_name AMAZON로 하드코딩되었습니다.
read_only_udm.metadata.product_name AWS VPC Flow로 하드코딩되었습니다.
read_only_udm.metadata.log_type AWS_VPC_FLOW로 하드코딩되었습니다.
read_only_udm.metadata.event_type dstaddr이 비어 있지 않으면 NETWORK_CONNECTION에 매핑되고, 그렇지 않으면 GENERIC_EVENT에 매핑됩니다.

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