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 엔드포인트 및 할당량을 참고하세요.
AWS S3 서버 액세스 로그를 수집하도록 Google SecOps에서 피드 구성
- Google SecOps 메뉴에서 설정 > 피드 > 새로 추가로 이동합니다.
- 소스 유형 목록에서 Amazon S3 또는 Amazon SQS를 선택합니다.
- 로그 유형 목록에서 AWS S3 서버 액세스를 선택합니다.
- 다음을 클릭합니다.
- Google SecOps는 액세스 키 ID 및 보안 비밀 메서드를 사용하여 로그 수집을 지원합니다. 액세스 키 ID와 보안 비밀을 만들려면 AWS로 도구 인증 구성을 참고하세요.
- 만든 AWS S3 서버 액세스 구성에 따라 입력 매개변수의 값을 지정합니다.
- Amazon S3를 사용하는 경우 다음 필드의 값을 지정합니다.
- 리전
- S3 URI
- URI
- 소스 삭제 옵션
- 액세스 키 ID
- 보안 비밀 액세스 키
- Amazon SQS를 사용하는 경우 다음 필드의 값을 지정합니다.
- 리전
- 대기열 이름
- 계정 번호
- 현재 재생목록 액세스 키 ID
- 현재 재생목록 보안 비밀 액세스 키
- 소스 삭제 옵션
- Amazon S3를 사용하는 경우 다음 필드의 값을 지정합니다.
- 다음을 클릭한 후 제출을 클릭합니다.
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 확장 요청 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 : 'Access Point 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 |
원시 로그 필드 request_time_ms 를 정수로 변환한 후 '-'를 '0'으로 바꾸고 나노초를 나타내기 위해 0으로 채워 직접 매핑합니다. |
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 Server Access' |
파서는 product_name 를 'AWS S3 Server Access'로 설정합니다. |
(파서 로직) | 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 를 현재 시간으로 설정합니다. |
변경사항
2023-07-19
- 버그 수정 -
- 데이터가 없을 때 하이픈 (-)을 처리하도록 Grok 패턴을 수정했습니다.
- 'aclRequired'가 'target.resource.attribute.labels'에 매핑되었습니다.
2023-05-04
- 개선 -
- JSON 형식 로그 지원이 추가되었습니다.
2022-07-21
- 새로 만든 파서
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가의 답변을 받으세요.