AWS S3 서버 액세스 로그 수집
이 문서에서는 Google Security Operations 피드를 설정하여 AWS S3 서버 액세스 로그를 수집하는 방법을 설명합니다. 파서는 grok 패턴을 사용하여 필드를 추출하고, 잠재적인 JSON 입력을 처리하고, 추출된 필드를 UDM에 매핑합니다. 정확한 UDM 표현을 보장하기 위해 특정 필드의 존재 및 값을 기반으로 데이터 변환, 유형 변환, 조건부 로직을 실행합니다.
시작하기 전에
다음 기본 요건이 충족되었는지 확인합니다.
- Google SecOps 인스턴스
- AWS에 대한 액세스 권한
AWS S3 서버 액세스 로깅을 구성하는 방법
Google SecOps는 Amazon SQS를 통한 Amazon S3를 사용한 로그 수집을 지원합니다.
- AWS 관리 콘솔에 로그인합니다.
- Amazon S3 콘솔에 액세스합니다.
- Amazon S3> 버킷으로 이동합니다.
- 기존 버킷을 선택하거나 새 버킷을 만듭니다.
- 속성을 클릭합니다.
- 서버 액세스 로깅 섹션에서 수정을 클릭합니다.
- 사용 설정을 선택합니다.
- 타겟 버킷 필드에 로그 레코드 객체를 전송할 새 버킷의 이름을 입력하거나 기존 버킷을 타겟으로 선택합니다.
- 변경사항 저장을 클릭합니다.
- S3 버킷의 SQS 큐를 만들려면 S3 스토리지를 사용하여 Amazon SQS 인스턴스를 구성합니다. 자세한 내용은 알림용 버킷 구성 (SNS 주제 또는 SQS 대기열)을 참고하세요.
서비스 및 리전을 기반으로 다음 AWS 문서를 참조하여 연결 엔드포인트를 식별합니다.
- 로깅 소스에 대한 자세한 내용은 AWS Identity and Access Management 엔드포인트 및 할당량을 참고하세요.
- S3 로깅 소스에 대한 자세한 내용은 Amazon Simple Storage Service 엔드포인트 및 할당량을 참고하세요.
- SQS 로깅 소스에 대한 자세한 내용은 Amazon Simple Queue Service 엔드포인트 및 할당량을 참고하세요.
피드 설정
Google SecOps 플랫폼에서 피드를 설정하는 방법은 두 가지입니다.
- SIEM 설정 > 피드 > 새 피드 추가
- 콘텐츠 허브 > 콘텐츠 팩 > 시작하기
AWS S3 서비스 액세스 피드를 설정하는 방법
- Amazon Cloud Platform 팩을 클릭합니다.
- AWS S3 서비스 액세스 로그 유형을 찾습니다.
- Google SecOps는 액세스 키 ID 및 보안 비밀 메서드를 사용한 로그 수집을 지원합니다. 액세스 키 ID와 보안 비밀을 만드는 방법은 AWS로 도구 인증 구성을 참고하세요.
다음 필드에 값을 지정합니다.
- 소스 유형: 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 매핑 | 논리 |
---|---|---|
aclRequired |
target.resource.attribute.labels.key : 'aclRequired'target.resource.attribute.labels.value : aclRequired 값 |
원시 로그 필드 aclRequired 에서 직접 매핑됩니다. |
authenticationtype |
extensions.auth.auth_details |
원시 로그 필드 authenticationtype 에서 직접 매핑됩니다. |
bucket |
target.resource.name |
원시 로그 필드 bucket 에서 직접 매핑됩니다. |
bucket |
target.resource.resource_type : 'STORAGE_BUCKET' |
파서는 bucket 필드가 있는 경우 resource_type 을 'STORAGE_BUCKET'으로 설정합니다. |
bucketowner |
target.resource.product_object_id |
원시 로그 필드 bucketowner 에서 직접 매핑됩니다. |
bytes_sent |
network.sent_bytes |
원시 로그 필드 bytes_sent 에서 직접 매핑되며, 이를 부호 없는 정수로 변환하고 '-'를 '0'으로 대체합니다. |
ciphersuite |
network.application_protocol : 'HTTPS' |
파서는 ciphersuite 필드가 있으면 application_protocol 을 'HTTPS'로 설정합니다. |
ciphersuite |
network.tls.cipher |
원시 로그 필드 ciphersuite 에서 직접 매핑됩니다. |
errorcode |
security_result.action_details |
원시 로그 필드 errorcode 에서 직접 매핑됩니다. |
errorcode |
security_result.action : 'BLOCK' |
파서는 errorcode 필드에 'AccessDenied' (대소문자 구분 안 함)가 포함된 경우 action 을 'BLOCK'으로 설정합니다. |
hostheader |
target.hostname |
원시 로그 필드 hostheader 에서 추출되었으며 포트 번호가 삭제되었을 수 있습니다. |
hostheader |
target.port |
포트 번호가 있는 경우 원시 로그 필드 hostheader 에서 추출됩니다. |
hostid |
target.resource.attribute.labels.key : 'S3 Extended Request ID'target.resource.attribute.labels.value : hostid 값 |
원시 로그 필드 hostid 에서 직접 매핑됩니다. |
http_capture |
network.http.method |
HTTP 메서드는 http_capture 필드에서 추출됩니다. |
http_capture |
network.http.version |
HTTP 버전은 http_capture 필드에서 추출됩니다. |
http_capture |
target.url |
타겟 URL은 hostheader 및 http_request_uri (http_capture 에서 추출됨)를 사용하여 구성되며, ciphersuite 의 존재 여부에 따라 'http://' 또는 'https://'가 접두사로 붙습니다. |
httpstatus |
network.http.response_code |
원시 로그 필드 httpstatus 에서 정수로 변환된 후 직접 매핑됩니다. |
object_version_id |
target.resource.product_object_id |
원시 로그 필드 object_version_id 에서 직접 매핑됩니다. |
objectsize |
target.file.size |
원시 로그 필드 objectsize 에서 직접 매핑되며, 이를 부호 없는 정수로 변환하고 '-'를 '0'으로 대체합니다. |
operation |
metadata.product_event_type |
원시 로그 필드 operation 에서 직접 매핑됩니다. |
referrer |
network.http.referral_url |
따옴표를 삭제한 후 원시 로그 필드 referrer 에서 직접 매핑됩니다. |
remoteip |
metadata.event_type : 'USER_RESOURCE_ACCESS' |
파서는 remoteip 필드가 비어 있으면 event_type 를 'USER_RESOURCE_ACCESS'로 설정합니다. |
remoteip |
principal.ip |
원시 로그 필드 remoteip 에서 직접 매핑됩니다. |
requester |
target.resource.attribute.labels.key : '액세스 포인트 ARN'target.resource.attribute.labels.value : requester 값 |
원시 로그 필드 requester 에서 직접 매핑됩니다. |
requester_user |
principal.user.userid |
원시 로그 필드 requester_user 에서 직접 매핑됩니다. |
requestid |
network.session_id |
원시 로그 필드 requestid 에서 직접 매핑됩니다. |
request_time_ms |
network.session_duration.nanos |
정수로 변환하고 '-'를 '0'으로 대체하고 나노초를 나타내기 위해 0으로 패딩한 후 원시 로그 필드 request_time_ms 에서 직접 매핑됩니다. |
signatureversion |
target.resource.attribute.labels.key : '서명 버전'target.resource.attribute.labels.value : signatureversion 값 |
원시 로그 필드 signatureversion 에서 직접 매핑됩니다. |
time |
metadata.event_timestamp |
원시 로그 필드 time 에서 파싱되어 타임스탬프로 변환됩니다. |
tlsVersion |
network.tls.version |
원시 로그 필드 tlsVersion 에서 직접 매핑됩니다. |
useragent |
network.http.user_agent |
따옴표를 삭제한 후 원시 로그 필드 useragent 에서 직접 매핑됩니다. |
(파서 로직) | metadata.event_type : 'NETWORK_HTTP' |
파서는 기본 event_type 을 'NETWORK_HTTP'로 설정합니다. |
(파서 로직) | metadata.log_type : 'AWS_S3_SERVER_ACCESS' |
파서는 log_type 을 'AWS_S3_SERVER_ACCESS'로 설정합니다. |
(파서 로직) | metadata.product_name : 'AWS S3 서버 액세스' |
파서는 product_name 를 'AWS S3 서버 액세스'로 설정합니다. |
(파서 로직) | metadata.product_version : 'HTTP/http_version ' |
파서는 추출된 http_version 을 사용하여 product_version 을 설정합니다. |
(파서 로직) | metadata.vendor_name : 'AMAZON' |
파서는 vendor_name 을 'AMAZON'으로 설정합니다. |
(파서 로직) | network.application_protocol : 'HTTP' |
파서는 ciphersuite 필드가 없으면 application_protocol 을 'HTTP'로 설정합니다. |
(파서 로직) | timestamp |
파서는 이벤트가 처리될 때 이벤트 timestamp 을 현재 시간으로 설정합니다. |
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가로부터 답변을 받으세요.