AWS VPC 흐름 로그 수집
이 문서에서는 Google Security Operations 전달자를 사용하여 AWS VPC 흐름 로그를 수집하는 방법을 설명합니다.
자세한 내용은 Google Security Operations에 데이터 수집을 참조하세요.
수집 라벨은 원시 로그 데이터를 구조화된 UDM 형식으로 정규화하는 파서를 식별합니다. 이 문서의 정보는 AWS_VPC_FLOW
수집 라벨이 있는 파서에 적용됩니다.
시작하기 전에
Amazon S3 버킷이 생성되었는지 확인합니다. 자세한 내용은 첫 번째 S3 버킷 만들기를 참고하세요.
Amazon CloudWatch 로그 그룹이 생성되었는지 확인합니다. 자세한 내용은 로그 그룹 및 로그 스트림 작업을 참고하세요.
AWS VPC 흐름 구성
로그를 Amazon S3로 전달할지 Amazon CloudWatch로 전달할지에 따라 AWS VPC Flow를 구성합니다.
로그를 Amazon S3 버킷으로 전달하는 방법에 관한 자세한 내용은 이 문서의 로그를 Amazon S3로 전달하도록 흐름 로그 구성 섹션을 참고하세요.
Amazon CloudWatch로 로그를 전달하는 방법에 관한 자세한 내용은 이 문서의 Amazon CloudWatch로 흐름 로그 구성 섹션을 참고하세요.
로그를 Amazon S3로 전달하도록 흐름 로그 구성
Amazon S3 버킷을 만들고 구성한 후에는 네트워크 인터페이스, 서브넷, VPC 네트워크의 흐름 로그를 만들 수 있습니다.
네트워크 인터페이스의 흐름 로그 만들기
- Amazon EC2 콘솔에 로그인합니다.
- 탐색창에서 네트워크 인터페이스를 선택합니다.
- 네트워크 인터페이스를 하나 이상 선택합니다.
- 작업 > 흐름 로그 만들기를 선택합니다.
- 흐름 로그 설정을 구성합니다. 자세한 내용은 이 문서의 흐름 로그 설정 구성 섹션을 참고하세요.
서브넷의 흐름 로그 만들기
- Amazon VPC 콘솔에 로그인합니다.
- 탐색창에서 Subnets(서브넷)를 선택합니다.
- 서브넷을 하나 이상 선택합니다.
- 작업 > 흐름 로그 만들기를 선택합니다.
- 흐름 로그 설정을 구성합니다. 자세한 내용은 이 문서의 흐름 로그 설정 구성 섹션을 참고하세요.
VPC의 흐름 로그 만들기
- Amazon VPC 콘솔에 로그인합니다.
- 탐색창에서 VPC를 선택합니다.
- VPC를 하나 이상 선택합니다.
- 작업 > 흐름 로그 만들기를 선택합니다.
- 흐름 로그 설정을 구성합니다. 자세한 내용은 이 문서의 흐름 로그 설정 구성 섹션을 참고하세요.
흐름 로그 설정 구성
필터 섹션에서 로깅할 IP 트래픽을 지정합니다.
수락: 허용된 트래픽만 로깅합니다.
거부: 거부된 트래픽만 로깅합니다.
모두: 수락된 트래픽과 거부된 트래픽을 로깅합니다.
최대 집계 간격 섹션에서 1분을 선택합니다.
대상 섹션에서 Amazon S3 버킷으로 전송을 선택합니다.
S3 버킷 ARN 섹션에서 Amazon S3 버킷의 ARN을 지정합니다.
로그 레코드 형식 섹션에서 흐름 로그 레코드의 형식을 다음과 같이 지정합니다.
- 기본 흐름 로그 레코드 형식을 사용하려면 AWS 기본 형식을 선택합니다.
- 맞춤 형식을 만들려면 맞춤 형식을 선택합니다.
MSS 실제 IP 기능을 사용하도록 맞춤 AWS 로그 형식으로 VPC 로그 흐름을 구성합니다.
로그 형식 목록에서 모든 속성을 선택합니다.
형식 미리보기 섹션에서 맞춤 형식을 검토합니다.
로그 파일 형식 섹션에서 텍스트 (기본값)를 선택합니다.
Hive 호환 S3 접두사 섹션에서 사용 설정 체크박스를 선택 해제합니다.
시간별로 로그 파티션 나누기 섹션에서 1시간 (60분)마다를 선택합니다.
흐름 로그에 태그를 추가하려면 새 태그 추가를 선택하고 태그 키와 값을 지정합니다.
흐름 로그 만들기를 선택합니다. 자세한 내용은 Amazon S3에 흐름 로그 게시를 참고하세요.
Amazon CloudWatch에 흐름 로그 구성
VPC, 서브넷 또는 네트워크 인터페이스에서 흐름 로그를 구성할 수 있습니다.
필터 섹션에서 로깅할 IP 트래픽 유형을 지정합니다.
수락: 허용된 트래픽만 로깅합니다.
거부: 거부된 트래픽만 로깅합니다.
모두: 수락된 트래픽과 거부된 트래픽을 로깅합니다.
최대 집계 간격 섹션에서 1분을 선택합니다.
대상 섹션에서 CloudWatch Logs로 전송을 선택합니다.
대상 로그 그룹 섹션에 만든 대상 로그 그룹 이름을 입력합니다.
IAM 역할 목록에서 역할 이름을 선택합니다. 선택한 역할 이름에는 CloudWatch Logs에 로그를 게시할 권한이 있습니다.
IAM 역할에는 다음 권한이 포함되어야 합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogGroups", "logs:DescribeLogStreams" ], "Resource": "*" } ] }
로그 레코드 형식 섹션에서 흐름 로그 레코드의 맞춤 형식을 선택합니다.
흐름 로그에 태그를 추가하려면 새 태그 추가를 선택하고 태그 키와 값을 지정합니다.
흐름 로그 만들기를 선택합니다. 자세한 내용은 Amazon S3에 흐름 로그 게시를 참고하세요.
Amazon S3는 이벤트 알림을 Amazon SQS로 전송하도록 구성할 수 있습니다. 자세한 내용은 알림 버킷 구성 (SNS 주제 또는 SQS 대기열)을 참고하세요.
로그 수집 방법으로 Amazon SQS (Amazon SQS를 사용하는 Amazon S3)를 사용하는 경우 Amazon S3 및 Amazon SQS에 IAM 사용자 정책이 필요합니다. 자세한 내용은 AWS KMS에서 IAM 정책 사용을 참고하세요.
서비스 및 리전을 기반으로 다음 AWS 문서를 참고하여 연결 엔드포인트를 식별합니다.
로깅 소스에 관한 자세한 내용은 AWS Identity and Access Management 엔드포인트 및 할당량을 참고하세요.
Amazon S3 로깅 소스에 대한 자세한 내용은 Amazon Simple Storage Service 엔드포인트 및 할당량을 참고하세요.
Amazon SQS 로깅 소스에 관한 자세한 내용은 Amazon Simple Queue Service 엔드포인트 및 할당량을 참고하세요.
Amazon CloudWatch 로깅 소스에 관한 자세한 내용은 Amazon CloudWatch 로그 엔드포인트 및 할당량을 참고하세요.
AWS VPC 흐름 로그를 수집하도록 Google Security Operations 전달자 및 syslog 구성
- SIEM 설정 > 전달자를 선택합니다.
- 새 전달자 추가를 클릭합니다.
- 전달자 이름에 고유한 이름을 입력합니다.
- 제출을 클릭한 다음 확인을 클릭합니다. 전달자가 추가되고 수집기 구성 추가 창이 표시됩니다.
- 수집기 이름 입력란에 이름을 입력합니다.
- 로그 유형 필드에서 AWS VPC 흐름을 선택합니다.
- 수집기 유형 필드에서 Syslog를 선택합니다.
- 다음 필수 입력 매개변수를 구성합니다.
- 프로토콜: 수집기가 syslog 데이터를 리슨하는 데 사용할 연결 프로토콜을 지정합니다.
- 주소: 수집기가 상주하고 syslog 데이터를 처리하는 대상 IP 주소 또는 호스트 이름을 지정합니다.
- 포트: 수집기가 상주하고 syslog 데이터를 리슨하는 대상 포트를 지정합니다.
- 제출을 클릭한 다음 확인을 클릭합니다.
Google Security Operations 전달자에 대한 자세한 내용은 Google Security Operations 전달자 문서를 참고하세요. 각 전달자 유형의 요구사항은 유형별 전달자 구성을 참고하세요.
전달자를 만들 때 문제가 발생하면 Google Security Operations 지원팀에 문의하세요.
필드 매핑 참조
이 파서 코드는 EC2 VPC 이벤트를 설명하는 JSON 형식의 원시 AWS CloudTrail 로그를 가져와 구조화된 UDM 형식으로 변환합니다. 관련 필드를 추출하고 UDM 스키마와 일치하도록 이름을 바꾸며, 더 쉽게 분석할 수 있도록 리소스 유형, 클라우드 환경, 라벨과 같은 추가 컨텍스트로 데이터를 보강합니다.
AWS EC2 VPC 파서용 UDM 매핑 표
로그 필드 (오름차순) | UDM 매핑 | 논리 |
---|---|---|
CidrBlock | event.idm.entity.entity.resource.attribute.labels.cidr_block | 원시 로그의 'CidrBlock' 필드에서 직접 매핑됩니다. |
CidrBlock | event.idm.entity.entity.network.ip_subnet_range | 원시 로그의 'CidrBlock' 필드에서 직접 매핑됩니다. |
CidrBlockAssociation.AssociationID | event.idm.entity.entity.resource.attribute.labels.cidr_block_association_association_id | 원시 로그의 'CidrBlockAssociation' 배열 내 'AssociationID' 필드에서 직접 매핑됩니다. |
CidrBlockAssociation.CidrBlockState.State | event.idm.entity.entity.resource.attribute.labels.cidr_block_association_cidr_block_state_state | 원시 로그의 'CidrBlockAssociation' 배열에 있는 'CidrBlockState' 객체 내의 'State' 필드에서 직접 매핑됩니다. |
CidrBlockAssociation.CidrBlockState.StatusMessage | event.idm.entity.entity.resource.attribute.labels.cidr_block_association_cidr_block_state_status_message | 원시 로그의 'CidrBlockAssociation' 배열에 있는 'CidrBlockState' 객체 내의 'StatusMessage' 필드에서 직접 매핑됩니다. |
DhcpOptionsID | event.idm.entity.entity.resource.attribute.labels.dhcp_options_id | 원시 로그의 'DhcpOptionsID' 필드에서 직접 매핑됩니다. |
ID | event.idm.entity.entity.resource.product_object_id | 원시 로그의 'ID' 필드에서 직접 매핑되며, 이 필드의 이름은 파서에서 'VpcID'로 변경됩니다. |
ID | event.idm.entity.metadata.product_entity_id | 원시 로그의 'ID' 필드에서 직접 매핑되며, 이 필드의 이름은 파서에서 'VpcID'로 변경됩니다. |
InstanceTenancy | event.idm.entity.entity.resource.attribute.labels.instance_tenancy | 원시 로그의 'InstanceTenancy' 필드에서 직접 매핑됩니다. |
IsDefault | event.idm.entity.entity.resource.attribute.labels.is_default | 원시 로그의 'IsDefault' 필드에서 직접 매핑됩니다. |
Ipv6CidrBlockAssociationSet.AssociationID | event.idm.entity.entity.resource.attribute.labels.ipv6_cidr_block_association_set_association_id | 원시 로그의 'Ipv6CidrBlockAssociationSet' 배열 내 'AssociationID' 필드에서 직접 매핑됩니다. |
Ipv6CidrBlockAssociationSet.Ipv6CidrBlock | event.idm.entity.entity.resource.attribute.labels.ipv6_cidr_block_association_set_ipv6_cidr_block | 원시 로그의 'Ipv6CidrBlockAssociationSet' 배열 내 'Ipv6CidrBlock' 필드에서 직접 매핑됩니다. |
Ipv6CidrBlockAssociationSet.Ipv6CidrBlockState.State | event.idm.entity.entity.resource.attribute.labels.ipv6_cidr_block_association_set_ipv6_cidr_block_state_state | 원시 로그의 'Ipv6CidrBlockAssociationSet' 배열에 있는 'Ipv6CidrBlockState' 객체 내의 'State' 필드에서 직접 매핑됩니다. |
Ipv6CidrBlockAssociationSet.Ipv6CidrBlockState.StatusMessage | event.idm.entity.entity.resource.attribute.labels.ipv6_cidr_block_association_set_ipv6_cidr_block_state_status_message | 원시 로그의 'Ipv6CidrBlockAssociationSet' 배열에 있는 'Ipv6CidrBlockState' 객체 내의 'StatusMessage' 필드에서 직접 매핑됩니다. |
Ipv6CidrBlockAssociationSet.Ipv6Pool | event.idm.entity.entity.resource.attribute.labels.ipv6_cidr_block_association_set_ipv6_pool | 원시 로그의 'Ipv6CidrBlockAssociationSet' 배열 내 'Ipv6Pool' 필드에서 직접 매핑됩니다. |
Ipv6CidrBlockAssociationSet.NetworkBorderGroup | event.idm.entity.entity.resource.attribute.labels.ipv6_cidr_block_association_set_network_border_group | 원시 로그의 'Ipv6CidrBlockAssociationSet' 배열 내 'NetworkBorderGroup' 필드에서 직접 매핑됩니다. |
OwnerID | event.idm.entity.entity.resource.attribute.labels.owner_id | 원시 로그의 'OwnerID' 필드에서 직접 매핑됩니다. |
주 | event.idm.entity.entity.resource.attribute.labels.state | 원시 로그의 '상태' 필드에서 직접 매핑됩니다. |
TagSet.Key | event.idm.entity.entity.resource.attribute.labels.key | 원시 로그의 'TagSet' 배열 내 'Key' 필드에서 직접 매핑됩니다. 이렇게 하면 'TagSet'의 각 태그에 대해 새 라벨이 생성됩니다. |
TagSet.Value | event.idm.entity.entity.resource.attribute.labels.value | 원시 로그의 'TagSet' 배열 내 'Value' 필드에서 직접 매핑됩니다. 이렇게 하면 '키' 필드에서 생성된 각 해당 라벨의 값이 채워집니다. |
해당 사항 없음 | event.idm.entity.entity.resource.attribute.cloud.environment | 파서 코드에서 'AMAZON_WEB_SERVICES'로 하드코딩됩니다. |
해당 사항 없음 | event.idm.entity.entity.resource.resource_type | 파서 코드에서 'VPC_NETWORK'로 하드코딩됩니다. |
해당 사항 없음 | event.idm.entity.metadata.collected_timestamp | 원시 로그의 'collection_time' 필드에서 파생된 이벤트 타임스탬프로 채워집니다. |
해당 사항 없음 | event.idm.entity.metadata.entity_type | 파서 코드에서 'RESOURCE'로 하드코딩됩니다. |
해당 사항 없음 | event.idm.entity.metadata.product_name | 파서 코드에서 'Amazon VPC'로 하드코딩됩니다. |
해당 사항 없음 | event.idm.entity.metadata.vendor_name | 파서 코드에서 'AWS'로 하드코딩됩니다. |
해당 사항 없음 | events.timestamp | 원시 로그의 'collection_time' 필드에서 파생된 이벤트 타임스탬프로 채워집니다. |