AWS EC2 호스트 로그 수집
파서 버전: 1.0
이 문서에서는 모니터링 및 분석을 위해 AWS EC2 호스트 로그를 Google Security Operations에 통합하는 방법을 설명합니다. 통합에는 EC2 호스트 로그를 통합 데이터 모델 (UDM)로 파싱 및 매핑하고, 데이터 변환을 실행하고, EC2 호스트와 인스턴스 간의 관계를 만드는 작업이 포함됩니다. 로그는 보안 모니터링, 감사, 규정 준수에 사용할 수 있는 인스턴스, 호스트 속성, 인스턴스 유형, 실적 측정항목에 관한 유용한 정보를 제공합니다.
시작하기 전에
- Google SecOps 인스턴스가 있는지 확인합니다.
- AWS에 대한 권한 있는 액세스 권한이 있는지 확인합니다.
AWS IAM 및 S3 구성
- 이 사용자 가이드(버킷 만들기)에 따라 Amazon S3 버킷을 만듭니다.
- 나중에 사용할 수 있도록 버킷 이름과 리전을 저장합니다.
- 이 사용자 가이드(IAM 사용자 만들기)에 따라 사용자를 만듭니다.
- 생성된 사용자를 선택합니다.
- 보안용 사용자 인증 정보 탭을 선택합니다.
- 액세스 키 섹션에서 액세스 키 만들기를 클릭합니다.
- 사용 사례로 서드 파티 서비스를 선택합니다.
- 다음을 클릭합니다.
- 선택사항: 설명 태그를 추가합니다.
- 액세스 키 만들기를 클릭합니다.
- CSV 파일 다운로드를 클릭하여 나중에 사용할 수 있도록 액세스 키와 보안 비밀 액세스 키를 저장합니다.
- 완료를 클릭합니다.
- 권한 탭을 선택합니다.
- 권한 정책 섹션에서 권한 추가를 클릭합니다.
- 권한 추가를 선택합니다.
- 정책 직접 연결을 선택합니다.
- AmazonS3FullAccess 정책을 검색하여 선택합니다.
- 다음을 클릭합니다.
- 권한 추가를 클릭합니다.
AWS KMS용 CloudTrail 구성
- AWS 관리 콘솔에 로그인합니다.
- 검색창에 CloudTrail을 입력하고 서비스 목록에서 CloudTrail을 선택합니다.
- 트레일 만들기를 클릭합니다.
- 추적 이름을 제공합니다(예:
EC2-Activity-Trail). - 내 조직의 모든 계정에 사용 설정 체크박스를 선택합니다.
- 이전에 만든 S3 버킷 URI (형식:
s3://your-log-bucket-name/)를 입력하거나 새 S3 버킷을 만듭니다. - SSE-KMS가 사용 설정된 경우 AWS KMS 별칭 이름을 입력하거나 기존 AWS KMS 키를 선택합니다.
- 다른 설정은 기본값으로 두어도 됩니다.
- 다음을 클릭합니다.
- 이벤트 유형에서 관리 이벤트와 데이터 이벤트를 선택하여 EC2 호스트 활동을 캡처합니다.
- 다음을 클릭합니다.
- 검토 및 만들기에서 설정을 검토합니다.
- 트레일 만들기를 클릭합니다.
- 선택사항: 새 버킷을 만든 경우 다음 프로세스를 계속 진행합니다.
- S3로 이동합니다.
- 새로 만든 로그 버킷을 식별하고 선택합니다.
- AWSLogs 폴더를 선택합니다.
- S3 URI 복사를 클릭하고 저장합니다.
AWS EC2 호스트를 수집하도록 Google SecOps에서 피드 구성
- SIEM 설정 > 피드로 이동합니다.
- 새로 추가를 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다(예: AWS EC2 호스트 로그).
- 소스 유형으로 Amazon S3 V2를 선택합니다.
- 로그 유형으로 AWS EC2 호스트를 선택합니다.
- 다음을 클릭합니다.
다음 입력 파라미터의 값을 지정합니다.
- S3 URI: 버킷 URI입니다.
s3://your-log-bucket-name/your-log-bucket-name을 버킷의 실제 이름으로 바꿉니다.
소스 삭제 옵션: 환경설정에 따라 삭제 옵션을 선택합니다.
최대 파일 기간: 지난 일수 동안 수정된 파일을 포함합니다. 기본값은 180일입니다.
액세스 키 ID: s3 버킷에 액세스할 수 있는 사용자 액세스 키입니다.
보안 비밀 액세스 키: s3 버킷에 액세스할 수 있는 사용자 보안 비밀 키입니다.
애셋 네임스페이스: 애셋 네임스페이스입니다.
수집 라벨: 이 피드의 이벤트에 적용할 라벨입니다.
- S3 URI: 버킷 URI입니다.
다음을 클릭합니다.
확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.
지원되는 AWS EC2 호스트 로그 형식
AWS EC2 호스트 파서는 JSON 형식의 로그를 지원합니다.
지원되는 AWS EC2 호스트 샘플 로그
JSON
{ "AllocationTime": "2018-01-23T12:33:31.692Z", "AllowsMultipleInstanceTypes": "", "AssetID": "", "AutoPlacement": "off", "AvailabilityZone": "us-east-1a", "AvailabilityZoneID": "", "AvailableCapacity": { "VCPUs": 96, "Instance": { "Available": 48, "Total": 48, "Type": "m5.large" } }, "ClientToken": "", "ID": "h-05abcdd12ee9ca123", "Maintenance": "", "Properties": { "Cores": 48, "InstanceFamily": "", "InstanceType": "m5.large", "Sockets": 2, "TotalVCPUs": 96 }, "Recovery": "off", "ReservationID": "", "Instances": null, "MemberOfServiceLinkedResourceGroup": false, "OutpostARN": "", "OwnerID": "", "ReleaseTime": "", "State": "available", "TagSet": null }
UDM 매핑 테이블
| 로그 필드 | UDM 매핑 | 로직 |
|---|---|---|
AllocationTime |
entity.metadata.creation_timestamp |
AllocationTime 필드는 타임스탬프로 파싱되고 creation_timestamp 필드에 매핑됩니다. 파서는 다양한 형식 (yyyy-MM-dd HH:mm:ss, RFC 3339, UNIX, ISO8601)을 시도합니다. |
AllowsMultipleInstanceTypes |
entity.entity.asset.attribute.labels.value |
원시 로그의 AllowsMultipleInstanceTypes 값이 라벨 값으로 사용됩니다. 이 라벨의 키는 allows_multiple_instance_types로 설정됩니다. |
AutoPlacement |
entity.entity.asset.attribute.labels.value |
원시 로그의 AutoPlacement 값이 라벨 값으로 사용됩니다. 이 라벨의 키는 auto_placement로 설정됩니다. |
AvailabilityZone |
entity.entity.asset.attribute.cloud.availability_zone |
AvailabilityZone 필드는 availability_zone 필드에 직접 매핑됩니다. |
AvailabilityZoneID |
entity.entity.asset.attribute.labels.value |
원시 로그의 AvailabilityZoneID 값이 라벨 값으로 사용됩니다. 이 라벨의 키는 availability_zone_id로 설정됩니다. |
AvailableCapacity.AvailableInstanceCapacity.AvailableCapacity |
entity.entity.asset.attribute.labels.value |
AvailableCapacity.AvailableInstanceCapacity.AvailableCapacity (또는 이름 변경 후 AvailableCapacity.Instance.Available) 값이 문자열로 변환되어 라벨 값으로 사용됩니다. 키는 available_instance_capacity_available_capacity로 설정됩니다. |
AvailableCapacity.AvailableInstanceCapacity.InstanceType |
entity.entity.asset.attribute.labels.value |
AvailableCapacity.AvailableInstanceCapacity.InstanceType (또는 이름 변경 후 AvailableCapacity.Instance.Type)의 값이 라벨 값으로 사용됩니다. 키는 available_instance_capacity_instance_type로 설정됩니다. |
AvailableCapacity.AvailableInstanceCapacity.TotalCapacity |
entity.entity.asset.attribute.labels.value |
AvailableCapacity.AvailableInstanceCapacity.TotalCapacity (또는 이름 변경 후 AvailableCapacity.Instance.Total)의 값은 문자열로 변환되어 라벨 값으로 사용됩니다. 키는 total_capacity로 설정됩니다. |
AvailableCapacity.AvailableVCpus |
entity.entity.asset.attribute.labels.value |
AvailableCapacity.AvailableVCpus (또는 이름 변경 후 AvailableCapacity.VCPUs)의 값은 문자열로 변환되어 라벨 값으로 사용됩니다. 키는 available_v_cpus로 설정됩니다. |
ClientToken |
entity.entity.asset.attribute.labels.value |
원시 로그의 ClientToken 값이 라벨 값으로 사용됩니다. 이 라벨의 키는 client_token로 설정됩니다. |
HostID |
entity.metadata.product_entity_id |
HostID (또는 이름 변경 후 ID) 필드가 product_entity_id 필드에 직접 매핑됩니다. |
HostID |
entity.entity.asset.asset_id |
HostID (또는 이름 변경 후 ID) 필드가 asset_id 필드에 직접 매핑됩니다. |
HostMaintenance |
entity.entity.asset.attribute.labels.value |
원시 로그의 HostMaintenance (또는 이름 변경 후 Maintenance) 값이 라벨 값으로 사용됩니다. 이 라벨의 키는 host_maintenance로 설정됩니다. |
HostProperties.Cores |
entity.entity.asset.hardware.cpu_number_cores |
HostProperties.Cores 값이 부호 없는 정수로 변환되고 cpu_number_cores에 매핑됩니다. |
HostProperties.InstanceFamily |
entity.entity.asset.attribute.labels.value |
원시 로그의 HostProperties.InstanceFamily 값이 라벨 값으로 사용됩니다. 이 라벨의 키는 host_properties_instance_family로 설정됩니다. |
HostProperties.InstanceType |
entity.entity.asset.attribute.labels.value |
원시 로그의 HostProperties.InstanceType 값이 라벨 값으로 사용됩니다. 이 라벨의 키는 host_properties_instance_type로 설정됩니다. |
HostProperties.Sockets |
entity.entity.asset.attribute.labels.value |
HostProperties.Sockets의 값이 문자열로 변환되고 라벨의 값으로 사용됩니다. 키는 host_properties_sockets로 설정됩니다. |
HostProperties.TotalVCpus |
entity.entity.asset.attribute.labels.value |
HostProperties.TotalVCpus (또는 이름 변경 후 HostProperties.TotalVCPUs) 값이 문자열로 변환되어 라벨 값으로 사용됩니다. 키는 host_properties_total_v_cpus로 설정됩니다. |
HostRecovery |
entity.entity.asset.attribute.labels.value |
원시 로그의 HostRecovery (또는 이름 변경 후 Recovery) 값이 라벨 값으로 사용됩니다. 이 라벨의 키는 host_recovery로 설정됩니다. |
HostReservationID |
entity.entity.asset.attribute.labels.value |
원시 로그의 HostReservationID (또는 이름 변경 후 ReservationID) 값이 라벨 값으로 사용됩니다. 이 라벨의 키는 host_reservation_id로 설정됩니다. |
MemberOfServiceLinkedResourceGroup |
entity.entity.asset.attribute.labels.value |
MemberOfServiceLinkedResourceGroup의 값이 문자열로 변환되고 라벨의 값으로 사용됩니다. 키는 member_of_service_linked_resource_group로 설정됩니다. |
OwnerID |
entity.entity.asset.attribute.labels.value |
원시 로그의 OwnerID 값이 라벨 값으로 사용됩니다. 이 라벨의 키는 owner_id로 설정됩니다. |
ReleaseTime |
entity.entity.asset.attribute.labels.value |
원시 로그의 ReleaseTime 값이 라벨 값으로 사용됩니다. 이 라벨의 키는 release_time로 설정됩니다. |
State |
entity.entity.asset.attribute.labels.value |
원시 로그의 State 값이 라벨 값으로 사용됩니다. 이 라벨의 키는 state로 설정됩니다. |
TagSet |
entity.entity.asset.attribute.labels |
TagSet 배열이 반복되고 각 태그의 Key 및 Value이 각각 라벨의 키와 값으로 사용됩니다. AMAZON_WEB_SERVICES 값은 파서에 의해 이 필드에 할당됩니다. 원시 로그의 collection_time이 collected_timestamp 필드에 매핑됩니다. ASSET 값은 파서에 의해 이 필드에 할당됩니다. AWS EC2 HOSTS 값은 파서에 의해 이 필드에 할당됩니다. AWS 값은 파서에 의해 이 필드에 할당됩니다. 관계는 Instances 및 OutpostArn 필드에서 파생되지만 이러한 필드 자체는 IDM 객체에 직접 매핑되지 않습니다. 파서 로직은 이러한 필드를 기반으로 관계 객체를 만들고 이를 relations 배열로 병합합니다. |
collection_time |
entity.metadata.collected_timestamp |
로그의 collection_time이 이벤트의 collected_timestamp으로 사용됩니다. |
변경 로그
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.