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 구성
- 이 사용자 가이드(버킷 만들기)에 따라 Amazon S3 버킷을 만듭니다.
- 나중에 참조할 수 있도록 버킷 이름과 리전을 저장합니다 (예:
aws-vpc-flowlogs
). - 이 사용자 가이드(IAM 사용자 만들기)에 따라 사용자를 만듭니다.
- 생성된 사용자를 선택합니다.
- 보안 사용자 인증 정보 탭을 선택합니다.
- 액세스 키 섹션에서 액세스 키 만들기를 클릭합니다.
- 사용 사례로 서드 파티 서비스를 선택합니다.
- 다음을 클릭합니다.
- 선택사항: 설명 태그를 추가합니다.
- 액세스 키 만들기를 클릭합니다.
- CSV 파일 다운로드를 클릭하여 향후 참조할 수 있도록 액세스 키와 비밀 액세스 키를 저장합니다.
- 완료를 클릭합니다.
- 권한 탭을 선택합니다.
- 권한 정책 섹션에서 권한 추가를 클릭합니다.
- 권한 추가를 선택합니다.
- 정책 직접 연결을 선택합니다.
- AmazonS3FullAccess 정책을 검색합니다.
- 정책을 선택합니다.
- 다음을 클릭합니다.
- 권한 추가를 클릭합니다.
VPC 흐름 로그 생성 (대상: Amazon S3, 텍스트 형식)
- AWS 콘솔 > VPC > 내 VPC/서브넷/네트워크 인터페이스를 열고 로깅할 범위를 선택합니다.
- 작업 > 흐름 로그 만들기를 클릭합니다.
- 다음 구성 세부정보를 제공합니다.
- 필터: 정책에 따라 모두 (또는 수락 / 거부)를 선택합니다.
- 최대 집계 간격: 1분 (권장) 또는 10분을 선택합니다.
- 대상: Amazon S3 버킷으로 전송
- S3 버킷 ARN: 이전 섹션에서 만든 버킷 이름을
arn:aws:s3:::<your-bucket>
형식으로 입력합니다. - 로그 레코드 형식: AWS 기본 형식을 선택합니다.
- 로그 파일 형식: 텍스트 (일반)를 선택합니다.
- 선택사항: 필요한 경우가 아니면 Hive 호환 프리픽스와 시간별 파티션을 사용 중지합니다.
- 흐름 로그 만들기를 클릭합니다.
AWS VPC 흐름 로그 (S3 텍스트)를 수집하도록 Google SecOps에서 피드 구성
- SIEM 설정> 피드로 이동합니다.
- + 새 피드 추가를 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다 (예:
AWS VPC Flow Logs - S3 (Text)
). - 소스 유형으로 Amazon S3 V2를 선택합니다.
- 로그 유형으로 AWS VPC 흐름을 선택합니다.
- 다음을 클릭합니다.
- 다음 입력 파라미터의 값을 지정합니다.
- S3 URI: S3 버킷 주소를 입력합니다 (예:
s3://<your-bucket>/AWSLogs/<account-id>/vpcflowlogs/<region>/
). - 소스 삭제 옵션: 환경설정에 따라 삭제 옵션을 선택합니다.
- 최대 파일 기간: 기본값은 180일입니다.
- 액세스 키 ID: S3 버킷에 액세스할 수 있는 사용자 액세스 키입니다.
- 보안 비밀 액세스 키: S3 버킷에 액세스할 수 있는 사용자 보안 비밀 키입니다.
- 애셋 네임스페이스: 애셋 네임스페이스입니다.
- 수집 라벨: 이 피드의 이벤트에 적용된 라벨입니다.
- S3 URI: S3 버킷 주소를 입력합니다 (예:
- 다음을 클릭합니다.
- 확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.
옵션 2: Amazon CloudWatch Logs 및 Kinesis Data Firehose를 사용하여 AWS VPC 흐름 로그 내보내기 구성
CloudWatch로 이동하도록 흐름 로그를 설정한 후 이 옵션은 Kinesis Data Firehose를 사용하여 선택한 대상으로 로그 데이터를 스트리밍하여 추가 데이터 내보내기 계층을 제공합니다.
VPC 흐름 로그 만들기 (대상: Amazon CloudWatch Logs)
- AWS 콘솔 > VPC > 내 VPC/서브넷/네트워크 인터페이스를 엽니다.
- 작업 > 흐름 로그 만들기를 클릭합니다.
- 다음 구성 세부정보를 제공합니다.
- 필터: 정책에 따라 모두 (또는 수락/거부)를 선택합니다.
- 최대 집계 간격: 1분 (권장) 또는 10분을 선택합니다.
- 대상: CloudWatch Logs로 전송을 선택합니다.
- 대상 로그 그룹: 로그 그룹 (예:
/aws/vpc/flowlogs
)을 선택하거나 만듭니다. - IAM 역할: CloudWatch Logs에 쓸 수 있는 역할을 선택합니다.
- 로그 레코드 형식: AWS 기본값 (버전 2) 또는 맞춤 (추가 필드 포함)을 선택합니다.
- 흐름 로그 만들기를 클릭합니다.
Google SecOps에서 피드를 만들어 엔드포인트 URL과 보안 비밀 키 가져오기
- SIEM 설정> 피드로 이동합니다.
- + 새 피드 추가를 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다 (예:
AWS VPC Flow Logs - CloudWatch via Firehose
). - 소스 유형으로 Amazon Data Firehose를 선택합니다.
- 로그 유형으로 AWS VPC 흐름을 선택합니다.
- 다음을 클릭합니다.
- 다음 입력 파라미터의 값을 지정합니다.
- 분할 구분자: 선택사항
n
- 애셋 네임스페이스: 애셋 네임스페이스 (예:
aws.vpc.flowlogs.cwl
)입니다. - 수집 라벨: 이 피드의 이벤트에 적용할 라벨입니다 (예:
source=vpc_flow_firehose
).
- 분할 구분자: 선택사항
- 다음을 클릭합니다.
- 피드 구성을 검토하고 제출을 클릭합니다.
- 보안 비밀 키 생성을 클릭하여 이 피드를 인증하기 위한 보안 비밀 키를 생성합니다.
- 이 보안 비밀을 다시 볼 수 없으므로 보안 비밀 키를 복사하여 저장합니다.
- 세부정보 탭으로 이동합니다.
- 엔드포인트 정보 필드에서 피드 엔드포인트 URL을 복사합니다.
- 완료를 클릭합니다.
Amazon Data Firehose 피드에 대한 API 키 만들기
- Google Cloud 콘솔의 사용자 인증 정보 페이지로 이동합니다.
- 사용자 인증 정보 만들기를 클릭한 후 API 키를 선택합니다.
- 키를 복사하여 안전한 위치에 저장합니다.
- Google SecOps API에 대한 API 키 액세스를 제한합니다.
CloudWatch Logs에서 Firehose로의 IAM 권한 구성
- AWS 콘솔에서 IAM > 정책 > 정책 만들기 > JSON으로 이동합니다.
다음 정책 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" } ] }
정책 이름을
CWLtoFirehoseWrite
로 지정하고 정책 만들기를 클릭합니다.IAM > 역할 > 역할 만들기로 이동합니다.
커스텀 트러스트 정책을 선택하고 다음을 붙여넣습니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.<region>.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
역할에
CWLtoFirehoseWrite
정책을 연결합니다.역할 이름을
CWLtoFirehoseRole
로 지정하고 역할 만들기를 클릭합니다.
Amazon Kinesis Data Firehose를 Google SecOps에 구성
- AWS 콘솔에서 Kinesis > Data Firehose > 전송 스트림 만들기로 이동합니다.
- 다음 구성 세부정보를 제공합니다.
- 소스: 직접 PUT 또는 기타 소스를 선택합니다.
- 대상: HTTP 엔드포인트를 선택합니다.
- 이름:
cwlogs-to-secops
- HTTP 엔드포인트 URL: API 키가 추가된 Google SecOps의 피드 HTTPS 엔드포인트 URL을 입력합니다.
<ENDPOINT_URL>?key=<API_KEY>
- HTTP 메서드: POST를 선택합니다.
- 액세스 키에서 다음을 수행합니다.
- Google SecOps 피드에서 생성된 보안 비밀 키를 입력합니다 (이 키는
X-Amz-Firehose-Access-Key
헤더가 됨). - 버퍼링 힌트: 버퍼 크기 = 1MiB, 버퍼 간격 = 60초
- 압축: 사용 중지됨을 선택합니다.
- S3 백업: 사용 중지됨을 선택합니다.
- 재시도 및 로깅 설정은 기본값으로 둡니다.
- Google SecOps 피드에서 생성된 보안 비밀 키를 입력합니다 (이 키는
- 전송 스트림 만들기를 클릭합니다.
CloudWatch Logs 그룹을 Firehose 스트림에 구독
- CloudWatch > 로그 > 로그 그룹으로 이동합니다.
- 타겟 로그 그룹 (예:
/aws/vpc/flowlogs
)을 선택합니다. - 구독 필터 탭을 열고 만들기를 클릭합니다.
- Amazon Kinesis Data Firehose 구독 필터 만들기를 선택합니다.
- 다음 구성 세부정보를 제공합니다.
- 대상: 전송 스트림
cwlogs-to-secops
를 선택합니다. - 권한 부여: 역할
CWLtoFirehoseRole
를 선택합니다. - 필터 이름:
all-events
를 입력합니다. - 필터 패턴: 모든 이벤트를 전송하려면 비워 둡니다.
- 대상: 전송 스트림
- 스트리밍 시작을 클릭합니다.
옵션 3: Amazon S3를 사용하여 CSV 형식으로 AWS VPC 흐름 로그 구성
로그를 CSV 형식으로 변환 (선택사항)
- CSV 행이 VPC 흐름 로그 맞춤 형식 (예: 표준 v2 필드 집합 또는 v5/v7 집합)에서 선택한 필드와 일치하는 엄격하고 일관된 열 순서를 따르는지 확인합니다. 파서 옵션에서 헤더 행을 예상하지 않는 한 프로덕션 파일에 헤더 행을 포함하지 마세요.
- 안정적인 접두사(예:
s3://<your-bucket>/vpcflowlogs-csv/<region>/year=<year>/month=<month>/day=<day>/
)에 CSV 파일을 씁니다.
AWS VPC 흐름 로그 (CSV)를 수집하도록 Google SecOps에서 피드 구성
- SIEM 설정> 피드로 이동합니다.
- + 새 피드 추가를 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다 (예:
AWS VPC Flow Logs - S3 (CSV)
). - 소스 유형으로 Amazon S3 V2를 선택합니다.
- 로그 유형으로 AWS VPC 흐름 (CSV)을 선택합니다.
- 다음을 클릭합니다.
- 다음 입력 파라미터의 값을 지정합니다.
- S3 URI: S3 버킷 주소를 입력합니다 (예:
s3://<your-bucket>/vpcflowlogs-csv/<region>/
). - 소스 삭제 옵션: 환경설정에 따라 삭제 옵션을 선택합니다.
- 최대 파일 기간: 기본값은 180일입니다.
- 액세스 키 ID: S3 버킷에 액세스할 수 있는 사용자 액세스 키입니다.
- 보안 비밀 액세스 키: S3 버킷에 액세스할 수 있는 사용자 보안 비밀 키입니다.
- 애셋 네임스페이스: 애셋 네임스페이스입니다.
- 수집 라벨: 이 피드의 이벤트에 적용된 라벨입니다.
- S3 URI: S3 버킷 주소를 입력합니다 (예:
- 다음을 클릭합니다.
- 확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.
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로 매핑되고 action 가 REJECT 인 경우 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_direction 이 ingress 이면 INBOUND에 매핑되고, flow_direction 이 egress 이면 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 전문가로부터 답변을 받으세요.