AWS S3 서버 액세스 로그 수집

다음에서 지원:

이 문서에서는 Google Security Operations 피드를 설정하여 AWS S3 서버 액세스 로그를 수집하는 방법을 설명합니다. 파서는 grok 패턴을 사용하여 필드를 추출하고, 잠재적인 JSON 입력을 처리하고, 추출된 필드를 UDM에 매핑합니다. 특정 필드의 존재 여부와 값을 기반으로 데이터 변환, 유형 변환, 조건부 로직을 실행하여 정확한 UDM 표현을 보장합니다.

시작하기 전에

  • Google SecOps 인스턴스가 있는지 확인합니다.
  • AWS에 대한 권한이 있는지 확인합니다.

AWS S3 서버 액세스 로깅 구성

Google SecOps는 Amazon SQS를 통해 Amazon S3를 사용하는 로그 수집을 지원합니다.

  1. AWS 관리 콘솔에 로그인합니다.
  2. Amazon S3 콘솔에 액세스합니다.
  3. Amazon S3 > 버킷으로 이동합니다.
  4. 기존 버킷을 선택하거나 새 버킷을 만듭니다.
  5. 속성을 클릭합니다.
  6. 서버 액세스 로깅 섹션에서 수정을 클릭합니다.
  7. 사용 설정을 선택합니다.
  8. 타겟 버킷 필드에 로그 레코드 객체를 전송할 새 버킷의 이름을 입력하거나 기존 버킷을 타겟으로 선택합니다.
  1. 변경사항 저장을 클릭합니다.
  2. 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에서 피드 구성

  1. Google SecOps 메뉴에서 설정 > 피드 > 새로 추가로 이동합니다.
  2. 소스 유형 목록에서 Amazon S3 또는 Amazon SQS를 선택합니다.
  3. 로그 유형 목록에서 AWS S3 서버 액세스를 선택합니다.
  4. 다음을 클릭합니다.
  5. Google SecOps는 액세스 키 ID 및 보안 비밀 메서드를 사용하여 로그 수집을 지원합니다. 액세스 키 ID와 보안 비밀을 만들려면 AWS로 도구 인증 구성을 참고하세요.
  6. 만든 AWS S3 서버 액세스 구성에 따라 입력 매개변수의 값을 지정합니다.
    • Amazon S3를 사용하는 경우 다음 필드의 값을 지정합니다.
      • 리전
      • S3 URI
      • URI
      • 소스 삭제 옵션
      • 액세스 키 ID
      • 보안 비밀 액세스 키
    • Amazon SQS를 사용하는 경우 다음 필드의 값을 지정합니다.
      • 리전
      • 대기열 이름
      • 계정 번호
      • 현재 재생목록 액세스 키 ID
      • 현재 재생목록 보안 비밀 액세스 키
      • 소스 삭제 옵션
  7. 다음을 클릭한 후 제출을 클릭합니다.

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은 hostheaderhttp_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 전문가의 답변을 받으세요.