Elastic Auditbeat 로그 수집

다음에서 지원:

이 문서에서는 Amazon S3를 사용하여 Elastic Auditbeat 로그를 Google Security Operations에 수집하는 방법을 설명합니다. 파서는 JSON 로그에서 필드를 추출하고, 이를 통합 데이터 모델 (UDM)로 정규화하고, 호스트 정보, 네트워크 세부정보, 보안 결과 분류와 같은 추가 컨텍스트로 데이터를 보강합니다. event1.action 및 기타 필드를 특정 UDM 메타데이터 이벤트 유형에 매핑하여 다양한 이벤트 유형을 처리하며, 가능한 경우 GENERIC_EVENT 또는 더 구체적인 카테고리가 기본값으로 설정됩니다.

시작하기 전에

다음 기본 요건이 충족되었는지 확인합니다.

  • Google SecOps 인스턴스입니다.
  • Elastic Auditbeat 서버에 대한 권한이 있는 액세스
  • Logstash 서버에 대한 액세스 권한
  • AWS (S3, Identity and Access Management (IAM))에 대한 권한 있는 액세스

Elastic Auditbeat 기본 요건 가져오기

  1. Elastic Auditbeat가 서버에 설치 및 구성되어 있는지 확인합니다.
  2. 전용 서버 또는 Auditbeat와 함께 Logstash를 설치합니다.
  3. Auditbeat 구성 파일 위치 (일반적으로 /etc/auditbeat/auditbeat.yml)를 확인합니다.

Google SecOps용 AWS S3 버킷 및 IAM 구성

  1. 이 사용자 가이드(버킷 만들기)에 따라 Amazon S3 버킷을 만듭니다.
  2. 나중에 참조할 수 있도록 버킷 이름리전을 저장합니다 (예: elastic-auditbeat-logs).
  3. 이 사용자 가이드(IAM 사용자 만들기)에 따라 사용자를 만듭니다.
  4. 생성된 사용자를 선택합니다.
  5. 보안 사용자 인증 정보 탭을 선택합니다.
  6. 액세스 키 섹션에서 액세스 키 만들기를 클릭합니다.
  7. 사용 사례서드 파티 서비스를 선택합니다.
  8. 다음을 클릭합니다.
  9. 선택사항: 설명 태그를 추가합니다.
  10. 액세스 키 만들기를 클릭합니다.
  11. .CSV 파일 다운로드를 클릭하여 향후 참조할 수 있도록 액세스 키비밀 액세스 키를 저장합니다.
  12. 완료를 클릭합니다.
  13. 권한 탭을 선택합니다.
  14. 권한 정책 섹션에서 권한 추가를 클릭합니다.
  15. 권한 추가를 선택합니다.
  16. 정책 직접 연결을 선택합니다.
  17. AmazonS3FullAccess 정책을 검색합니다.
  18. 정책을 선택합니다.
  19. 다음을 클릭합니다.
  20. 권한 추가를 클릭합니다.

Logstash로 전송하도록 Auditbeat 구성

  1. Auditbeat 구성 파일 /etc/auditbeat/auditbeat.yml를 수정합니다.
  2. 기존 출력 구성 (Elasticsearch 등)을 주석 처리합니다.
  3. Logstash 출력 구성을 추가합니다.

    # ==================== Outputs ====================
    output.logstash:
      hosts: ["localhost:5044"]
      # If Logstash is on a different server, use its IP/hostname
      # hosts: ["logstash-server:5044"]
    
      # Optional: Enable load balancing if using multiple Logstash instances
      loadbalance: true
    
      # Optional: Configure bulk settings (default is 2048)
      bulk_max_size: 2048
    
      # Optional: Configure SSL if needed
      # ssl.enabled: true
      # ssl.certificate_authorities: ["/path/to/ca.crt"]
    
  4. Auditbeat를 다시 시작하여 변경사항을 적용합니다.

    sudo systemctl restart auditbeat
    

Logstash 파이프라인 구성

  1. 새 Logstash 파이프라인 구성 파일 /etc/logstash/conf.d/auditbeat-to-s3.conf을 만듭니다.

    input {
      beats {
        port => 5044
        # Optional: Configure SSL
        # ssl => true
        # ssl_certificate => "/path/to/server.crt"
        # ssl_key => "/path/to/server.key"
      }
    }
    
    filter {
      # Add any necessary transformations here
      # The data should remain in raw JSON format for Chronicle parsing
    
      # Optional: Add metadata for debugging
      mutate {
        add_field => { "[@metadata][pipeline]" => "auditbeat-to-s3" }
      }
    }
    
    output {
      s3 {
        # AWS credentials
        access_key_id => "YOUR_AWS_ACCESS_KEY_ID"
        secret_access_key => "YOUR_AWS_SECRET_ACCESS_KEY"
    
        # S3 bucket configuration
        region => "us-east-1"  # Replace with your bucket region
        bucket => "elastic-auditbeat-logs"  # Replace with your bucket name
    
        # Organize logs by date using Logstash timestamp interpolation
        prefix => "auditbeat/%{+YYYY}/%{+MM}/%{+dd}/"
    
        # File rotation settings
        size_file => 10485760  # 10MB files
        time_file => 5  # Rotate every 5 minutes
    
        # Compression for cost optimization
        encoding => "gzip"
    
        # Output format - keep as JSON for Chronicle
        codec => "json_lines"
    
        # Optional: Server-side encryption
        # server_side_encryption => true
        # server_side_encryption_algorithm => "AES256"
      }
    
      # Optional: Keep a local copy for debugging
      # stdout { 
      #   codec => rubydebug 
      # }
    }
    
    • YOUR_AWS_ACCESS_KEY_IDYOUR_AWS_SECRET_ACCESS_KEY를 실제 AWS 사용자 인증 정보로 바꿉니다.
    • S3 구성과 일치하도록 regionbucket 값을 업데이트합니다.
    • Logstash를 시작하거나 다시 시작합니다.
    sudo systemctl restart logstash
    

(선택사항) Google SecOps용 읽기 전용 IAM 사용자 및 키 만들기

  1. AWS 콘솔 > IAM > 사용자로 이동합니다.
  2. Add users를 클릭합니다.
  3. 다음 구성 세부정보를 제공합니다.
    • 사용자: secops-reader를 입력합니다.
    • 액세스 유형: 액세스 키 – 프로그래매틱 액세스를 선택합니다.
  4. 사용자 만들기를 클릭합니다.
  5. 최소 읽기 정책 (맞춤) 연결: 사용자 > secops-reader > 권한 > 권한 추가 > 정책 직접 연결 > 정책 만들기
  6. JSON:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": ["s3:GetObject"],
          "Resource": "arn:aws:s3:::elastic-auditbeat-logs/*"
        },
        {
          "Effect": "Allow",
          "Action": ["s3:ListBucket"],
          "Resource": "arn:aws:s3:::elastic-auditbeat-logs"
        }
      ]
    }
    
  7. 이름 = secops-reader-policy

  8. 정책 만들기 > 검색/선택 > 다음 > 권한 추가를 클릭합니다.

  9. secops-reader의 액세스 키를 만듭니다(보안 사용자 인증 정보 > 액세스 키).

  10. 액세스 키 만들기를 클릭합니다.

  11. .CSV을 다운로드합니다. (이 값은 피드에 붙여넣습니다.)

Elastic Auditbeat 로그를 수집하도록 Google SecOps에서 피드 구성

  1. SIEM 설정> 피드로 이동합니다.
  2. + 새 피드 추가를 클릭합니다.
  3. 피드 이름 필드에 피드 이름을 입력합니다 (예: Elastic Auditbeat Logs).
  4. 소스 유형으로 Amazon S3 V2를 선택합니다.
  5. 로그 유형으로 Elastic Audit Beats를 선택합니다.
  6. 다음을 클릭합니다.
  7. 다음 입력 파라미터의 값을 지정합니다.
    • S3 URI: s3://elastic-auditbeat-logs/auditbeat/
    • 소스 삭제 옵션: 환경설정에 따라 삭제 옵션을 선택합니다.
    • 최대 파일 기간: 지난 일수 동안 수정된 파일을 포함합니다. 기본값은 180일입니다.
    • 액세스 키 ID: S3 버킷에 대한 액세스 권한이 있는 사용자 액세스 키입니다.
    • 보안 비밀 액세스 키: S3 버킷에 액세스할 수 있는 사용자 보안 비밀 키입니다.
    • 애셋 네임스페이스: 애셋 네임스페이스입니다.
    • 수집 라벨: 이 피드의 이벤트에 적용된 라벨입니다.
  8. 다음을 클릭합니다.
  9. 확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.

UDM 매핑 테이블

로그 필드 UDM 매핑 논리
@timestamp metadata.event_timestamp 이벤트 타임스탬프는 @timestamp 필드에서 파싱됩니다.
agent.id observer.asset_id 'agent_id: '가 앞에 붙습니다.
agent.type observer.application 관찰자 애플리케이션이 에이전트 유형으로 설정됩니다.
agent.version observer.platform_version 관찰자 플랫폼 버전이 에이전트 버전으로 설정됩니다.
client.bytes principal.labels 'Bytes' 키가 있는 라벨로 추가되었습니다. 문자열로 변환되었습니다.
client.ip principal.ip 주 구성원 IP가 클라이언트 IP로 설정됩니다.
client.packets principal.labels 'Packets' 키가 있는 라벨로 추가되었습니다. 문자열로 변환되었습니다.
client.port principal.port 주 포트가 클라이언트 포트로 설정됩니다. 정수로 변환되었습니다.
cloud.availability_zone principal.cloud.availability_zone 기본 클라우드 가용성 영역이 클라우드 가용성 영역으로 설정됩니다.
cloud.instance.id principal.resource.id 주 구성원 리소스 ID가 클라우드 인스턴스 ID로 설정됩니다.
cloud.machine.type principal.resource.resource_subtype 주 구성원 리소스 하위 유형이 클라우드 머신 유형으로 설정됩니다.
cloud.region principal.cloud.availability_zone 클라우드 리전이 있으면 가용성 영역이 재정의됩니다.
destination.bytes target.labels 'Bytes' 키가 있는 라벨로 추가되었습니다. 문자열로 변환되었습니다.
destination.ip target.ip 타겟 IP가 대상 IP로 설정됩니다.
destination.packets target.labels 'Packets' 키가 있는 라벨로 추가되었습니다. 문자열로 변환되었습니다.
destination.port target.port 타겟 포트가 대상 포트로 설정됩니다. 정수로 변환되었습니다.
ecs.version metadata.product_version 있는 경우 jsonPayload.@metadata.version의 값을 재정의합니다.
event1.category security_result.category_details 모든 값이 category_details에 추가됩니다.
event1.duration network.session_duration.seconds 정수로 변환되었습니다.
event1.id metadata.product_log_id 메타데이터 제품 로그 ID가 이벤트 ID로 설정됩니다.
event1.outcome extensions.auth.auth_details 인증 세부정보가 이벤트 결과로 설정됩니다.
file.extension target.file.mime_type 타겟 파일 MIME 유형이 파일 확장자로 설정됩니다.
file.hash.sha1 target.file.sha1 타겟 파일 SHA-1이 파일 SHA-1 해시로 설정됩니다.
file.path target.file.full_path 타겟 파일 전체 경로가 경로로 설정됩니다.
file.size target.file.size uinteger로 변환되었습니다.
group.id principal.group.product_object_id 기본 그룹 제품 객체 ID가 그룹 ID로 설정됩니다.
group.name principal.group.group_display_name 기본 그룹 표시 이름이 그룹 이름으로 설정됩니다.
host.architecture principal.asset.hardware.cpu_platform 임시 변수 hardware.cpu_platform에 저장된 후 principal.asset.hardware에 병합됩니다.
host.hostname principal.hostname 주 서버 호스트 이름이 호스트 호스트 이름으로 설정됩니다.
host.id principal.asset.asset_id '호스트 ID: '가 앞에 붙습니다.
host.ip principal.asset.ip 모든 값이 기본 애셋 IP에 추가됩니다.
host.mac principal.mac 대시가 콜론으로 바뀝니다.
host.name principal.hostname, observer.hostname 있는 경우 host.hostname의 값을 재정의합니다.
host.os.kernel principal.platform_patch_level 주요 플랫폼 패치 수준이 호스트 OS 커널로 설정됩니다.
host.os.version principal.platform_version 기본 플랫폼 버전이 호스트 OS 버전으로 설정됩니다. 임시 변수 host_os_version에 저장됩니다.
httpRequest.remoteIp target.ip 이 값이 있고 다른 타겟 IP가 설정되지 않은 경우 이 값이 사용됩니다.
httpRequest.requestMethod network.http.method 네트워크 HTTP 메서드가 HTTP 요청 메서드로 설정됩니다.
httpRequest.requestSize network.sent_bytes uinteger로 변환되었습니다.
httpRequest.requestUrl network.http.referral_url 네트워크 HTTP 추천 URL이 HTTP 요청 URL로 설정됩니다.
httpRequest.responseSize network.received_bytes uinteger로 변환되었습니다.
httpRequest.serverIp principal.ip 이 값이 있고 다른 주 구성원 IP가 설정되지 않은 경우 이 값이 사용됩니다.
httpRequest.status network.http.response_code 정수로 변환되었습니다.
httpRequest.userAgent network.http.user_agent 네트워크 HTTP 사용자 에이전트가 HTTP 요청 사용자 에이전트로 설정됩니다.
insertId network.session_id 네트워크 세션 ID가 삽입 ID로 설정됩니다.
jsonPayload.@metadata.beat metadata.product_event_type 메타데이터 제품 이벤트 유형이 메타데이터 비트로 설정됩니다.
jsonPayload.@metadata.version metadata.product_version 메타데이터 제품 버전이 메타데이터 버전으로 설정됩니다.
jsonPayload.destination.ip target.ip 이 값이 있고 다른 타겟 IP가 설정되지 않은 경우 이 값이 사용됩니다.
jsonPayload.destination.port target.port 이 값이 있고 다른 타겟 포트가 설정되지 않은 경우 이 값이 사용됩니다. 정수로 변환되었습니다.
jsonPayload.event1.category security_result.category_details 모든 값이 category_details에 추가됩니다.
jsonPayload.file.path target.file.full_path 이 값이 있고 다른 타겟 경로가 설정되지 않은 경우 이 값이 사용됩니다.
jsonPayload.process.executable principal.process.file.full_path, target.process.file.full_path 다른 값이 없는 경우 주체 및 타겟 프로세스 전체 경로를 모두 설정하는 데 사용됩니다.
jsonPayload.process.name principal.application 이 값이 있고 다른 주 애플리케이션이 설정되지 않은 경우 이 값이 사용됩니다.
jsonPayload.process.parent.pid principal.process.pid 이 값이 있고 다른 기본 프로세스 PID가 설정되지 않은 경우 이 값이 사용됩니다. 문자열로 변환되었습니다.
jsonPayload.process.parent.ppid principal.process.parent_process.pid 이 값이 있고 다른 기본 상위 프로세스 PID가 설정되지 않은 경우 이 값이 사용됩니다. 문자열로 변환되었습니다.
jsonPayload.process.parent.process.executable principal.process.file.full_path 이 값이 있고 다른 주 프로세스 전체 경로가 설정되지 않은 경우 이 값이 사용됩니다.
jsonPayload.process.parent.process.exe principal.process.file.full_path 이 값이 있고 다른 주 프로세스 전체 경로가 설정되지 않은 경우 이 값이 사용됩니다.
jsonPayload.process.parent.process.title principal.process.command_line 이 값이 있고 다른 기본 프로세스 명령줄이 설정되지 않은 경우 이 값이 사용됩니다.
jsonPayload.process.pid target.process.pid 타겟 프로세스 PID가 JSON 페이로드 프로세스 PID로 설정됩니다.
jsonPayload.process.title target.process.command_line 타겟 프로세스 명령줄이 JSON 페이로드 프로세스 제목으로 설정됩니다.
jsonPayload.user.id target.user.userid 이 값이 있고 다른 타겟 사용자 ID가 설정되지 않은 경우 이 값이 사용됩니다. 문자열로 변환되었습니다.
jsonPayload.user.name target.user.user_display_name 이 값이 있고 다른 대상 사용자 표시 이름이 설정되지 않은 경우 이 값이 사용됩니다.
msg metadata.description 메타데이터 설명이 메시지로 설정됩니다.
network.bytes network.sent_bytes uinteger로 변환되었습니다.
network.community_id network.community_id 네트워크 커뮤니티 ID는 네트워크 커뮤니티 ID로 설정됩니다.
network.transport network.ip_protocol 대문자로 변환되었습니다.
package.description security_result.description 보안 결과 설명이 패키지 설명으로 설정됩니다.
package.name security_result.rule_name 보안 결과 규칙 이름이 패키지 이름으로 설정됩니다.
package.reference security_result.about.url 보안 결과 URL이 패키지 참조로 설정됩니다.
package.size security_result.about.file.size uinteger로 변환되었습니다.
package.type security_result.about.file.mime_type, security_result.rule_type 보안 결과 MIME 유형과 규칙 유형이 패키지 유형으로 설정됩니다.
process.created principal.asset.creation_time 이 값이 있으면 이 값이 사용됩니다. ISO8601로 파싱됩니다.
process.entity_id principal.process.product_specific_process_id 'Process:'가 앞에 붙습니다.
process.executable principal.process.file.full_path, target.process.file.full_path 다른 값이 없는 경우 주체 및 타겟 프로세스 전체 경로를 모두 설정하는 데 사용됩니다.
process.hash.sha1 principal.process.file.sha1 주 프로세스 SHA-1이 프로세스 SHA-1 해시로 설정됩니다.
process.name principal.application 이 값이 있고 다른 주 애플리케이션이 설정되지 않은 경우 이 값이 사용됩니다.
process.pid principal.process.pid 이 값이 있고 다른 기본 프로세스 PID가 설정되지 않은 경우 이 값이 사용됩니다. 문자열로 변환되었습니다.
process.ppid principal.process.parent_process.pid 이 값이 있고 다른 기본 상위 프로세스 PID가 설정되지 않은 경우 이 값이 사용됩니다. 문자열로 변환되었습니다.
process.start principal.asset.creation_time process.created이 없고 이 필드가 있으면 이 값이 사용됩니다. ISO8601로 파싱됩니다.
resource.labels.backend_service_name target.resource.name 타겟 리소스 이름이 리소스 백엔드 서비스 이름으로 설정됩니다.
resource.labels.forwarding_rule_name target.resource.attribute.labels '전달 규칙 이름' 키가 있는 라벨로 추가되었습니다.
resource.labels.project_id target.resource.product_object_id 타겟 리소스 제품 객체 ID가 리소스 프로젝트 ID로 설정됩니다.
resource.labels.target_proxy_name target.resource.attribute.labels '타겟 프록시 이름' 키가 있는 라벨로 추가됩니다.
resource.labels.url_map_name target.resource.attribute.labels 'URL 맵 이름' 키가 있는 라벨로 추가되었습니다.
server.bytes intermediary.labels 'Bytes' 키가 있는 라벨로 추가되었습니다. 문자열로 변환되었습니다.
server.ip intermediary.ip 중개자 IP가 서버 IP로 설정됩니다.
server.packets intermediary.labels 'Packets' 키가 있는 라벨로 추가되었습니다. 문자열로 변환되었습니다.
server.port intermediary.port 중개 포트가 서버 포트로 설정됩니다. 정수로 변환되었습니다.
service.type target.application 타겟 애플리케이션이 서비스 유형으로 설정됩니다.
source.bytes src.labels 'Bytes' 키가 있는 라벨로 추가되었습니다. 문자열로 변환되었습니다.
source.ip src.ip 소스 IP가 소스 IP로 설정됩니다.
source.packets src.labels 'Packets' 키가 있는 라벨로 추가되었습니다. 문자열로 변환되었습니다.
source.port src.port 소스 포트가 소스 포트로 설정됩니다. 정수로 변환되었습니다.
system.audit.host.boottime about.asset.last_boot_time ISO8601로 파싱됩니다.
system.audit.host.hostname about.hostname about 호스트 이름이 시스템 감사 호스트 호스트 이름으로 설정됩니다.
system.audit.host.id principal.user.userid 주 사용자 ID가 시스템 감사 호스트 ID로 설정됩니다.
system.audit.host.mac.0 about.mac MAC 주소 정보는 첫 번째 시스템 감사 호스트 MAC 주소로 설정됩니다.
trace target.process.file.full_path 이 값이 있고 다른 타겟 프로세스 전체 경로가 설정되지 않은 경우 이 값이 사용됩니다.
user.effective.id target.user.userid 이 값이 있고 다른 타겟 사용자 ID가 설정되지 않은 경우 이 값이 사용됩니다.
user.effective.name target.user.user_display_name 이 값이 있고 다른 대상 사용자 표시 이름이 설정되지 않은 경우 이 값이 사용됩니다.
user.id target.user.userid 이 값이 있고 다른 타겟 사용자 ID가 설정되지 않은 경우 이 값이 사용됩니다. 문자열로 변환되었습니다.
user.name target.user.user_display_name 이 값이 있고 다른 대상 사용자 표시 이름이 설정되지 않은 경우 이 값이 사용됩니다.
해당 사항 없음 metadata.event_type 처음에는 'GENERIC_EVENT'로 설정합니다. 파서 코드 주석에 설명된 로직에 따라 변경되었습니다.
해당 사항 없음 metadata.log_type 'ELASTIC_AUDITBEAT'으로 설정됩니다.
해당 사항 없음 metadata.product_name 'Auditbeat'으로 설정합니다.
해당 사항 없음 metadata.vendor_name '탄력적'으로 설정합니다.
해당 사항 없음 extensions.auth.type USER_LOGIN 및 USER_LOGOUT 이벤트의 경우 'AUTHTYPE_UNSPECIFIED'로 설정됩니다.
auditd.data.syscall metadata.product_event_type 메타데이터 제품 이벤트 유형이 auditd syscall로 설정됩니다.

도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가로부터 답변을 받으세요.