AWS Elastic Load Balancer 로그 수집
이 문서에서는 Google Security Operations 피드를 설정하여 AWS Elastic Load Balancer 로그를 수집하는 방법을 설명합니다. 파서는 로그를 UDM 형식으로 변환합니다. CEF 및 비CEF 형식 메시지에서 grok 패턴을 사용하여 필드를 추출하고, 이를 UDM 필드에 매핑하고, HTTP, TLS, 보안 관련 필드의 특정 로직을 비롯한 다양한 데이터 변환을 처리합니다. 또한 특정 필드의 존재 여부 또는 형식을 기반으로 조건부 처리를 실행하여 정확한 UDM 표현을 보장합니다.
시작하기 전에
다음 기본 요건이 충족되었는지 확인합니다.
- Google SecOps 인스턴스
- AWS에 대한 액세스 권한
AWS Elastic Load Balancer 구성
- 액세스 로깅을 사용 설정하여 액세스 로그를 S3 스토리지 버킷으로 전송
- Amazon Simple Queue Service (SQS)를 만들고 S3 스토리지 버킷에 연결합니다.
Amazon S3 버킷 구성
- AWS 콘솔에 로그인합니다.
- 이 사용자 가이드(버킷 만들기)에 따라 Amazon S3 버킷을 만듭니다.
- 나중에 사용할 수 있도록 버킷 이름 (예:
elb-logs
)과 리전을 저장합니다. - 이 사용자 가이드(IAM 사용자 만들기)에 따라 사용자를 만듭니다.
- 생성된 사용자를 선택합니다.
- 보안 사용자 인증 정보 탭을 선택합니다.
- 액세스 키 섹션에서 액세스 키 만들기를 클릭합니다.
- 사용 사례로 서드 파티 서비스를 선택합니다.
- 다음을 클릭합니다.
- 선택사항: 설명 태그를 추가합니다.
- 액세스 키 만들기를 클릭합니다.
- CSV 파일 다운로드를 클릭하여 나중에 사용할 수 있도록 액세스 키와 비밀 액세스 키를 저장합니다.
- 완료를 클릭합니다.
- 권한 탭을 선택합니다.
- 권한 정책 섹션에서 권한 추가를 클릭합니다.
- 권한 추가를 선택합니다.
- 정책 직접 연결을 선택합니다.
- AmazonS3FullAccess 정책을 검색하여 선택합니다.
- 다음을 클릭합니다.
- 권한 추가를 클릭합니다.
액세스 로그를 사용 설정하도록 AWS Elastic Load Balancer를 구성하는 방법
- AWS Management Console에 로그인합니다.
- EC2를 검색하여 선택합니다.
- 탐색 메뉴에서 부하 분산기를 선택합니다.
- 로깅을 사용 설정할 부하 분산기를 선택합니다.
- 설명 탭에서 속성까지 스크롤합니다.
- 속성 수정을 클릭합니다.
- 사용 설정을 선택하여 액세스 로그를 사용 설정합니다.
- 이전에 만든 S3 버킷 (예:
elb-logs
)을 선택합니다. - 선택사항: 로그를 더 쉽게 식별할 수 있도록 로그 접두사를 설정합니다 (예:
elb/access-logs/
). - 저장을 클릭합니다.
피드 설정
Google SecOps 플랫폼에서 피드를 설정하는 방법은 두 가지입니다.
- SIEM 설정 > 피드 > 새로 추가
- 콘텐츠 허브 > 콘텐츠 팩 > 시작하기
AWS Elastic Load Balancer 피드를 설정하는 방법
- Amazon Cloud Platform 팩을 클릭합니다.
- AWS Elastic Load Balancer 로그 유형을 찾습니다.
다음 필드에 값을 지정합니다.
- 다음 필드에 값을 지정합니다.
- 소스 유형: Amazon SQS V2
- Queue Name: 읽어올 SQS 큐 이름
- S3 URI: 버킷 URI입니다.
s3://your-log-bucket-name/
your-log-bucket-name
을 실제 S3 버킷 이름으로 바꿉니다.
소스 삭제 옵션: 수집 환경설정에 따라 삭제 옵션을 선택합니다.
최대 파일 기간: 지난 일수 동안 수정된 파일을 포함합니다. 기본값은 180일입니다.
SQS 대기열 액세스 키 ID: 20자리 영숫자 문자열인 계정 액세스 키입니다.
SQS 대기열 보안 비밀 액세스 키: 40자로 된 영숫자 문자열인 계정 액세스 키입니다.
고급 옵션
- 피드 이름: 피드를 식별하는 미리 채워진 값입니다.
- 애셋 네임스페이스: 피드와 연결된 네임스페이스입니다.
- 수집 라벨: 이 피드의 모든 이벤트에 적용되는 라벨입니다.
피드 만들기를 클릭합니다.
이 제품군 내에서 다양한 로그 유형에 대해 여러 피드를 구성하는 방법에 관한 자세한 내용은 제품별 피드 구성을 참고하세요.
UDM 매핑 테이블
로그 필드 | UDM 매핑 | 논리 |
---|---|---|
actions_executed |
security_result.action |
actions_executed 이 'waf,forward' 또는 'waf,redirect'인 경우 'ALLOW'로 설정합니다. actions_executed 이 'waf'인 경우 'BLOCK'으로 설정합니다. |
chosen_cert_arn |
principal.user.attribute.labels |
chosen_cert_arn 에 'session'이 포함된 경우 값을 security_result.description 에 매핑합니다. 그렇지 않으면 키가 'ARN'이고 값이 chosen_cert_arn 인 라벨을 만들어 principal.user.attribute.labels 배열에 추가합니다. |
chosen_cert_arn |
security_result.description |
chosen_cert_arn 에 'session'이 포함된 경우 값을 이 필드에 매핑합니다. |
client_ip |
principal.asset.ip |
직접 매핑됩니다. |
client_ip |
principal.ip |
직접 매핑됩니다. |
client_port |
principal.port |
직접 매핑됩니다. |
classification |
security_result.rule_name |
비어 있지 않거나 '-'인 경우 직접 매핑됩니다. |
classification_reason |
security_result.summary |
비어 있지 않거나 '-'인 경우 직접 매핑됩니다. |
Customer (CEF) |
principal.user.user_display_name |
CEF 필드에서 직접 매핑됩니다. |
data |
Various | grok 패턴을 사용하여 파싱하여 여러 필드를 추출했습니다. 특정 매핑은 다른 행을 참고하세요. |
data.act (CEF) |
security_result.action_details |
CEF 필드에서 직접 매핑됩니다. |
data.app (CEF) |
principal.application |
CEF 필드에서 직접 매핑됩니다. |
data.ccode (CEF) |
principal.location.country |
CEF 필드에서 직접 매핑됩니다. |
data.cicode (CEF) |
principal.location.city |
CEF 필드에서 직접 매핑됩니다. |
data.cn1 (CEF) |
network.http.response_code |
CEF 필드에서 직접 매핑됩니다. |
data.cpt (CEF) |
principal.port |
CEF 필드에서 직접 매핑됩니다. |
data.cs1Label (CEF) |
additional.fields |
키가 'Cap Support'이고 값이 cs1Label 인 키-값 쌍을 만듭니다. |
data.cs2Label (CEF) |
additional.fields |
키가 'Javascript Support'이고 값이 cs2Label 인 키-값 쌍을 만듭니다. |
data.cs3Label (CEF) |
additional.fields |
키가 'CO Support'이고 값이 cs3Label 인 키-값 쌍을 만듭니다. |
data.cs4Label (CEF) |
additional.fields |
키가 'VID'이고 값이 cs4Label 인 키-값 쌍을 만듭니다. |
data.cs5Label (CEF) |
additional.fields |
키가 'clappsig'이고 값이 cs5Label 인 키-값 쌍을 만듭니다. |
data.cs6Label (CEF) |
additional.fields |
키가 'clapp'이고 값이 cs6Label 인 키-값 쌍을 만듭니다. |
data.cs7Label (CEF) |
additional.fields |
키가 'latitude'이고 값이 cs7Label 인 키-값 쌍을 만듭니다. |
data.deviceExternalId (CEF) |
about.asset.asset_id |
애셋 ID의 일부로 사용됩니다(Incapsula.SIEMintegration:deviceExternalId ). |
data.deviceFacility (CEF) |
principal.location.region |
CEF 필드에서 직접 매핑됩니다. |
data.dproc (CEF) |
target.process.command_line |
CEF 필드에서 직접 매핑됩니다. |
data.dst_ip |
target.asset.ip |
직접 매핑됩니다. |
data.dst_ip |
target.ip |
직접 매핑됩니다. |
data.dst_port |
target.port |
직접 매핑됩니다. |
data.elb |
target.resource.id |
직접 매핑됩니다. |
data.fileId (CEF) |
security_result.detection_fields |
키가 'fileId'이고 값이 fileId 인 키-값 쌍을 만듭니다. |
data.in (CEF) |
network.received_bytes |
CEF 필드에서 직접 매핑됩니다. |
data.request (CEF) |
target.url |
CEF 필드에서 직접 매핑됩니다. |
data.requestClientApplication (CEF) |
network.http.user_agent |
CEF 필드에서 직접 매핑됩니다. |
data.requestMethod (CEF) |
network.http.method |
CEF 필드에서 직접 매핑됩니다. |
data.severity (CEF) |
security_result.severity |
심각도가 0이면 LOW로 매핑됩니다. |
data.sip (CEF) |
principal.asset.ip |
CEF 필드에서 직접 매핑됩니다. |
data.sip (CEF) |
principal.ip |
CEF 필드에서 직접 매핑됩니다. |
data.siteid (CEF) |
security_result.detection_fields |
키가 'siteid'이고 값이 siteid 인 키-값 쌍을 만듭니다. |
data.sourceServiceName (CEF) |
principal.application |
CEF 필드에서 직접 매핑됩니다. |
data.spt (CEF) |
principal.port |
CEF 필드에서 직접 매핑됩니다. |
data.src (CEF) |
principal.ip |
CEF 필드에서 직접 매핑됩니다. |
data.suid (CEF) |
principal.user.userid |
CEF 필드에서 직접 매핑됩니다. |
data.ver (CEF) |
network.tls.version |
버전 부분은 grok을 사용하여 추출되고 매핑됩니다. |
data.ver (CEF) |
network.tls.cipher |
암호화 부분은 grok을 사용하여 추출되고 매핑됩니다. |
data.xff (CEF) |
principal.ip |
CEF 필드에서 직접 매핑됩니다. |
domain_name |
principal.administrative_domain |
직접 매핑됩니다. |
http_method |
network.http.method |
직접 매핑됩니다. |
log_type |
metadata.log_type |
직접 매핑됩니다. |
message |
Various | grok 패턴을 사용하여 파싱하여 여러 필드를 추출했습니다. 특정 매핑은 다른 행을 참고하세요. |
received_bytes |
network.received_bytes |
직접 매핑됩니다. |
redirect_url |
network.application_protocol |
redirect_url 이 'http'로 시작하면 프로토콜이 추출되어 매핑됩니다. |
redirect_url |
target.asset.hostname |
redirect_url 이 'http'로 시작하면 호스트 이름이 추출되어 매핑됩니다. |
redirect_url |
target.hostname |
redirect_url 이 'http'로 시작하면 호스트 이름이 추출되어 매핑됩니다. |
redirect_url |
target.port |
redirect_url 가 'http'로 시작하면 포트가 추출되어 매핑됩니다. |
request_creation_time |
metadata.collected_timestamp |
날짜 파싱 후 직접 매핑됩니다. |
request_processing_time |
security_result.detection_fields |
키가 'request_processing_time'이고 값이 이 필드에서 가져온 키-값 쌍을 만듭니다. |
response_processing_time |
security_result.detection_fields |
키가 'response_processing_time'이고 값이 이 필드에서 가져온 키-값 쌍을 만듭니다. |
sent_bytes |
network.sent_bytes |
직접 매핑됩니다. |
ssl_cipher |
network.tls.cipher |
직접 매핑됩니다. |
ssl_protocol |
network.tls.version |
직접 매핑됩니다. |
target_group_arn |
target.group.group_display_name |
직접 매핑됩니다. |
target_processing_time |
security_result.detection_fields |
'target_processing_time' 키와 이 필드의 값으로 키-값 쌍을 만듭니다. |
target_status_code |
target.labels |
키가 'target_status_code'이고 값이 이 필드에서 가져온 라벨을 만들어 target.labels 배열에 추가합니다. |
time |
metadata.event_timestamp |
날짜 파싱 후 직접 매핑됩니다. |
trace_id |
metadata.product_log_id |
'Root='를 삭제한 후 직접 매핑됩니다. |
url |
network.http.referral_url |
직접 매핑됩니다. |
user_agent |
network.http.user_agent |
직접 매핑됩니다. |
(파서) | metadata.event_type |
주 구성원 및 대상 머신 ID가 있는 경우 'NETWORK_HTTP', 주 구성원 머신 ID만 있는 경우 'STATUS_UPDATE', 대상 IP, 호스트 이름 또는 대상 IP가 없는 경우 'GENERIC_EVENT', 그 외의 경우 'NETWORK_HTTP'로 설정합니다. |
(파서) | metadata.product_name |
'AWS Elastic Load Balancer'로 설정합니다. |
(파서) | metadata.vendor_name |
'AMAZON'으로 설정합니다. |
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가로부터 답변을 받으세요.