AWS VPC 흐름 로그 수집

다음에서 지원:

이 문서에서는 Google Security Operations 전달자를 사용하여 AWS VPC 흐름 로그를 수집하는 방법을 설명합니다.

자세한 내용은 Google Security Operations에 데이터 수집을 참조하세요.

수집 라벨은 원시 로그 데이터를 구조화된 UDM 형식으로 정규화하는 파서를 식별합니다. 이 문서의 정보는 AWS_VPC_FLOW 수집 라벨이 있는 파서에 적용됩니다.

시작하기 전에

AWS VPC 흐름 구성

로그를 Amazon S3로 전달할지 Amazon CloudWatch로 전달할지에 따라 AWS VPC Flow를 구성합니다.

로그를 Amazon S3로 전달하도록 흐름 로그 구성

Amazon S3 버킷을 만들고 구성한 후에는 네트워크 인터페이스, 서브넷, VPC 네트워크의 흐름 로그를 만들 수 있습니다.

네트워크 인터페이스의 흐름 로그 만들기

  1. Amazon EC2 콘솔에 로그인합니다.
  2. 탐색창에서 네트워크 인터페이스를 선택합니다.
  3. 네트워크 인터페이스를 하나 이상 선택합니다.
  4. 작업 > 흐름 로그 만들기를 선택합니다.
  5. 흐름 로그 설정을 구성합니다. 자세한 내용은 이 문서의 흐름 로그 설정 구성 섹션을 참고하세요.

서브넷의 흐름 로그 만들기

  1. Amazon VPC 콘솔에 로그인합니다.
  2. 탐색창에서 Subnets(서브넷)를 선택합니다.
  3. 서브넷을 하나 이상 선택합니다.
  4. 작업 > 흐름 로그 만들기를 선택합니다.
  5. 흐름 로그 설정을 구성합니다. 자세한 내용은 이 문서의 흐름 로그 설정 구성 섹션을 참고하세요.

VPC의 흐름 로그 만들기

  1. Amazon VPC 콘솔에 로그인합니다.
  2. 탐색창에서 VPC를 선택합니다.
  3. VPC를 하나 이상 선택합니다.
  4. 작업 > 흐름 로그 만들기를 선택합니다.
  5. 흐름 로그 설정을 구성합니다. 자세한 내용은 이 문서의 흐름 로그 설정 구성 섹션을 참고하세요.

흐름 로그 설정 구성

  1. 필터 섹션에서 로깅할 IP 트래픽을 지정합니다.

    • 수락: 허용된 트래픽만 로깅합니다.

    • 거부: 거부된 트래픽만 로깅합니다.

    • 모두: 수락된 트래픽과 거부된 트래픽을 로깅합니다.

  2. 최대 집계 간격 섹션에서 1분을 선택합니다.

  3. 대상 섹션에서 Amazon S3 버킷으로 전송을 선택합니다.

  4. S3 버킷 ARN 섹션에서 Amazon S3 버킷의 ARN을 지정합니다.

  5. 로그 레코드 형식 섹션에서 흐름 로그 레코드의 형식을 다음과 같이 지정합니다.

    1. 기본 흐름 로그 레코드 형식을 사용하려면 AWS 기본 형식을 선택합니다.
    2. 맞춤 형식을 만들려면 맞춤 형식을 선택합니다.
  6. MSS 실제 IP 기능을 사용하도록 맞춤 AWS 로그 형식으로 VPC 로그 흐름을 구성합니다.

  7. 로그 형식 목록에서 모든 속성을 선택합니다.

  8. 형식 미리보기 섹션에서 맞춤 형식을 검토합니다.

  9. 로그 파일 형식 섹션에서 텍스트 (기본값)를 선택합니다.

  10. Hive 호환 S3 접두사 섹션에서 사용 설정 체크박스를 선택 해제합니다.

  11. 시간별로 로그 파티션 나누기 섹션에서 1시간 (60분)마다를 선택합니다.

  12. 흐름 로그에 태그를 추가하려면 새 태그 추가를 선택하고 태그 키와 값을 지정합니다.

  13. 흐름 로그 만들기를 선택합니다. 자세한 내용은 Amazon S3에 흐름 로그 게시를 참고하세요.

Amazon CloudWatch에 흐름 로그 구성

VPC, 서브넷 또는 네트워크 인터페이스에서 흐름 로그를 구성할 수 있습니다.

  1. 필터 섹션에서 로깅할 IP 트래픽 유형을 지정합니다.

    • 수락: 허용된 트래픽만 로깅합니다.

    • 거부: 거부된 트래픽만 로깅합니다.

    • 모두: 수락된 트래픽과 거부된 트래픽을 로깅합니다.

  2. 최대 집계 간격 섹션에서 1분을 선택합니다.

  3. 대상 섹션에서 CloudWatch Logs로 전송을 선택합니다.

  4. 대상 로그 그룹 섹션에 만든 대상 로그 그룹 이름을 입력합니다.

  5. IAM 역할 목록에서 역할 이름을 선택합니다. 선택한 역할 이름에는 CloudWatch Logs에 로그를 게시할 권한이 있습니다.

    IAM 역할에는 다음 권한이 포함되어야 합니다.

       {
         "Version": "2012-10-17",
         "Statement": [
           {
             "Effect": "Allow",
             "Action": [
               "logs:CreateLogGroup",
               "logs:CreateLogStream",
               "logs:PutLogEvents",
               "logs:DescribeLogGroups",
               "logs:DescribeLogStreams"
           ],
           "Resource": "*"
         }
        ]
       }
    
  6. 로그 레코드 형식 섹션에서 흐름 로그 레코드의 맞춤 형식을 선택합니다.

  7. 흐름 로그에 태그를 추가하려면 새 태그 추가를 선택하고 태그 키와 값을 지정합니다.

  8. 흐름 로그 만들기를 선택합니다. 자세한 내용은 Amazon S3에 흐름 로그 게시를 참고하세요.

Amazon S3는 이벤트 알림을 Amazon SQS로 전송하도록 구성할 수 있습니다. 자세한 내용은 알림 버킷 구성 (SNS 주제 또는 SQS 대기열)을 참고하세요.

로그 수집 방법으로 Amazon SQS (Amazon SQS를 사용하는 Amazon S3)를 사용하는 경우 Amazon S3 및 Amazon SQS에 IAM 사용자 정책이 필요합니다. 자세한 내용은 AWS KMS에서 IAM 정책 사용을 참고하세요.

서비스 및 리전을 기반으로 다음 AWS 문서를 참고하여 연결 엔드포인트를 식별합니다.

AWS VPC 흐름 로그를 수집하도록 Google Security Operations 전달자 및 syslog 구성

  1. SIEM 설정 > 전달자를 선택합니다.
  2. 새 전달자 추가를 클릭합니다.
  3. 전달자 이름에 고유한 이름을 입력합니다.
  4. 제출을 클릭한 다음 확인을 클릭합니다. 전달자가 추가되고 수집기 구성 추가 창이 표시됩니다.
  5. 수집기 이름 입력란에 이름을 입력합니다.
  6. 로그 유형 필드에서 AWS VPC 흐름을 선택합니다.
  7. 수집기 유형 필드에서 Syslog를 선택합니다.
  8. 다음 필수 입력 매개변수를 구성합니다.
    • 프로토콜: 수집기가 syslog 데이터를 리슨하는 데 사용할 연결 프로토콜을 지정합니다.
    • 주소: 수집기가 상주하고 syslog 데이터를 처리하는 대상 IP 주소 또는 호스트 이름을 지정합니다.
    • 포트: 수집기가 상주하고 syslog 데이터를 리슨하는 대상 포트를 지정합니다.
  9. 제출을 클릭한 다음 확인을 클릭합니다.

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' 필드에서 파생된 이벤트 타임스탬프로 채워집니다.