Raccogliere i log di Elastic Auditbeat

Supportato in:

Questo documento spiega come importare i log di Elastic Auditbeat in Google Security Operations utilizzando Amazon S3. Il parser estrae i campi dai log JSON, li normalizza nel modello Unified Data Model (UDM) e arricchisce i dati con contesto aggiuntivo, come informazioni sull'host, dettagli di rete e classificazioni dei risultati di sicurezza. Gestisce vari tipi di eventi mappando event1.action e altri campi a tipi di eventi di metadati UDM specifici, impostando come predefinito GENERIC_EVENT o categorie più specifiche, se possibile.

Prima di iniziare

Assicurati di soddisfare i seguenti prerequisiti:

  • Un'istanza Google SecOps.
  • Accesso con privilegi al server Elastic Auditbeat.
  • Accesso con privilegi al server Logstash.
  • Accesso privilegiato ad AWS (S3, Identity and Access Management (IAM)).

Recuperare i prerequisiti di Elastic Auditbeat

  1. Assicurati che Elastic Auditbeat sia installato e configurato sui tuoi server.
  2. Installa Logstash su un server dedicato o insieme ad Auditbeat.
  3. Prendi nota della posizione del file di configurazione di Auditbeat (in genere /etc/auditbeat/auditbeat.yml).

Configura il bucket AWS S3 e IAM per Google SecOps

  1. Crea un bucket Amazon S3 seguendo questa guida utente: Creazione di un bucket
  2. Salva il nome e la regione del bucket per riferimento futuro (ad esempio, elastic-auditbeat-logs).
  3. Crea un utente seguendo questa guida utente: Creazione di un utente IAM.
  4. Seleziona l'utente creato.
  5. Seleziona la scheda Credenziali di sicurezza.
  6. Fai clic su Crea chiave di accesso nella sezione Chiavi di accesso.
  7. Seleziona Servizio di terze parti come Caso d'uso.
  8. Fai clic su Avanti.
  9. (Facoltativo) Aggiungi il tag della descrizione.
  10. Fai clic su Crea chiave di accesso.
  11. Fai clic su Scarica file .CSV per salvare la chiave di accesso e la chiave di accesso segreta per riferimento futuro.
  12. Fai clic su Fine.
  13. Seleziona la scheda Autorizzazioni.
  14. Fai clic su Aggiungi autorizzazioni nella sezione Criteri per le autorizzazioni.
  15. Seleziona Aggiungi autorizzazioni.
  16. Seleziona Allega direttamente i criteri.
  17. Cerca i criteri AmazonS3FullAccess.
  18. Seleziona la policy.
  19. Fai clic su Avanti.
  20. Fai clic su Aggiungi autorizzazioni.

Configura Auditbeat per l'invio a Logstash

  1. Modifica il file di configurazione di Auditbeat /etc/auditbeat/auditbeat.yml.
  2. Commenta qualsiasi configurazione di output esistente (Elasticsearch e così via).
  3. Aggiungi la configurazione dell'output 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. Riavvia Auditbeat per applicare le modifiche:

    sudo systemctl restart auditbeat
    

Configura la pipeline Logstash

  1. Crea un nuovo file di configurazione della pipeline 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 
      # }
    }
    
    • Sostituisci YOUR_AWS_ACCESS_KEY_ID e YOUR_AWS_SECRET_ACCESS_KEY con le tue credenziali AWS effettive.
    • Aggiorna i valori region e bucket in modo che corrispondano alla configurazione di S3.
    • Avvia o riavvia Logstash:
    sudo systemctl restart logstash
    

(Facoltativo) Crea chiavi e utenti IAM di sola lettura per Google SecOps

  1. Vai alla console AWS > IAM > Utenti.
  2. Fai clic su Add users (Aggiungi utenti).
  3. Fornisci i seguenti dettagli di configurazione:
    • Utente: inserisci secops-reader.
    • Tipo di accesso: seleziona Chiave di accesso - Accesso programmatico.
  4. Fai clic su Crea utente.
  5. Collega la criterio per la lettura minima (personalizzata): Utenti > secops-reader > Autorizzazioni > Aggiungi autorizzazioni > Collega le norme direttamente > Crea norma.
  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. Name = secops-reader-policy.

  8. Fai clic su Crea criterio > cerca/seleziona > Avanti > Aggiungi autorizzazioni.

  9. Crea la chiave di accesso per secops-reader: Credenziali di sicurezza > Chiavi di accesso.

  10. Fai clic su Crea chiave di accesso.

  11. Scarica il .CSV. Incollerai questi valori nel feed.

Configura un feed in Google SecOps per importare i log di Elastic Auditbeat

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su + Aggiungi nuovo feed.
  3. Nel campo Nome feed, inserisci un nome per il feed (ad esempio, Elastic Auditbeat Logs).
  4. Seleziona Amazon S3 V2 come Tipo di origine.
  5. Seleziona Elastic Audit Beats come Tipo di log.
  6. Fai clic su Avanti.
  7. Specifica i valori per i seguenti parametri di input:
    • URI S3: s3://elastic-auditbeat-logs/auditbeat/
    • Opzioni di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze.
    • Età massima del file: includi i file modificati nell'ultimo numero di giorni. Il valore predefinito è 180 giorni.
    • ID chiave di accesso: chiave di accesso utente con accesso al bucket S3.
    • Chiave di accesso segreta: chiave segreta dell'utente con accesso al bucket S3.
    • Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset.
    • Etichette di importazione: l'etichetta applicata agli eventi di questo feed.
  8. Fai clic su Avanti.
  9. Controlla la nuova configurazione del feed nella schermata Finalizza e poi fai clic su Invia.

Tabella di mappatura UDM

Campo log Mappatura UDM Logic
@timestamp metadata.event_timestamp Il timestamp dell'evento viene analizzato dal campo @timestamp.
agent.id observer.asset_id Prefisso "agent_id: ".
agent.type observer.application L'applicazione osservatore è impostata sul tipo di agente.
agent.version observer.platform_version La versione della piattaforma dell'osservatore è impostata sulla versione dell'agente.
client.bytes principal.labels Aggiunto come etichetta con la chiave "Byte". Convertito in stringa.
client.ip principal.ip L'IP principale è impostato sull'IP client.
client.packets principal.labels Aggiunto come etichetta con la chiave "Pacchetti". Convertito in stringa.
client.port principal.port La porta principale è impostata sulla porta client. Convertito in numero intero.
cloud.availability_zone principal.cloud.availability_zone La zona di disponibilità del cloud principale è impostata sulla zona di disponibilità del cloud.
cloud.instance.id principal.resource.id L'ID risorsa principale è impostato sull'ID istanza cloud.
cloud.machine.type principal.resource.resource_subtype Il sottotipo di risorsa principale è impostato sul tipo di macchina cloud.
cloud.region principal.cloud.availability_zone Se è presente la regione cloud, questa sostituisce la zona di disponibilità.
destination.bytes target.labels Aggiunto come etichetta con la chiave "Byte". Convertito in stringa.
destination.ip target.ip L'IP di destinazione è impostato sull'IP di destinazione.
destination.packets target.labels Aggiunto come etichetta con la chiave "Pacchetti". Convertito in stringa.
destination.port target.port La porta di destinazione è impostata sulla porta di destinazione. Convertito in numero intero.
ecs.version metadata.product_version Se presente, sovrascrive il valore di jsonPayload.@metadata.version.
event1.category security_result.category_details Tutti i valori vengono aggiunti a category_details.
event1.duration network.session_duration.seconds Convertito in numero intero.
event1.id metadata.product_log_id L'ID log prodotto dei metadati è impostato sull'ID evento.
event1.outcome extensions.auth.auth_details I dettagli di autorizzazione sono impostati sul risultato dell'evento.
file.extension target.file.mime_type Il tipo MIME del file di destinazione è impostato sull'estensione del file.
file.hash.sha1 target.file.sha1 L'SHA-1 del file di destinazione è impostato sull'hash SHA-1 del file.
file.path target.file.full_path Il percorso completo del file di destinazione è impostato sul percorso.
file.size target.file.size Convertito in uinteger.
group.id principal.group.product_object_id L'ID oggetto prodotto del gruppo principale è impostato sull'ID gruppo.
group.name principal.group.group_display_name Il nome visualizzato del gruppo principale è impostato sul nome del gruppo.
host.architecture principal.asset.hardware.cpu_platform Memorizzato nella variabile temporanea hardware.cpu_platform e poi unito a principal.asset.hardware.
host.hostname principal.hostname Il nome host dell'entità è impostato sul nome host dell'host.
host.id principal.asset.asset_id Prefisso "ID host: ".
host.ip principal.asset.ip Tutti i valori vengono aggiunti agli IP degli asset principali.
host.mac principal.mac I trattini vengono sostituiti dai due punti.
host.name principal.hostname, observer.hostname Se presente, sovrascrive il valore di host.hostname.
host.os.kernel principal.platform_patch_level Il livello patch della piattaforma principale è impostato sul kernel del sistema operativo host.
host.os.version principal.platform_version La versione principale della piattaforma è impostata sulla versione del sistema operativo host. Memorizzato nella variabile temporanea host_os_version.
httpRequest.remoteIp target.ip Se presente e non è impostato nessun altro IP di destinazione, viene utilizzato questo valore.
httpRequest.requestMethod network.http.method Il metodo HTTP di rete è impostato sul metodo di richiesta HTTP.
httpRequest.requestSize network.sent_bytes Convertito in uinteger.
httpRequest.requestUrl network.http.referral_url L'URL di referral HTTP della rete è impostato sull'URL della richiesta HTTP.
httpRequest.responseSize network.received_bytes Convertito in uinteger.
httpRequest.serverIp principal.ip Se presente e non è impostato nessun altro IP principale, viene utilizzato questo valore.
httpRequest.status network.http.response_code Convertito in numero intero.
httpRequest.userAgent network.http.user_agent Lo user agent HTTP di rete è impostato sullo user agent della richiesta HTTP.
insertId network.session_id L'ID sessione di rete è impostato sull'ID inserimento.
jsonPayload.@metadata.beat metadata.product_event_type Il tipo di evento prodotto dei metadati è impostato sul beat dei metadati.
jsonPayload.@metadata.version metadata.product_version La versione del prodotto dei metadati è impostata sulla versione dei metadati.
jsonPayload.destination.ip target.ip Se presente e non è impostato nessun altro IP di destinazione, viene utilizzato questo valore.
jsonPayload.destination.port target.port Se presente e non è impostata un'altra porta di destinazione, viene utilizzato questo valore. Convertito in numero intero.
jsonPayload.event1.category security_result.category_details Tutti i valori vengono aggiunti a category_details.
jsonPayload.file.path target.file.full_path Se presente e non è impostato nessun altro percorso di destinazione, viene utilizzato questo valore.
jsonPayload.process.executable principal.process.file.full_path, target.process.file.full_path Utilizzato per impostare il percorso completo del processo principale e di destinazione se non è presente nessun altro valore.
jsonPayload.process.name principal.application Se presente e non è impostata un'altra applicazione principale, viene utilizzato questo valore.
jsonPayload.process.parent.pid principal.process.pid Se presente e non è impostato nessun altro PID del processo principale, viene utilizzato questo valore. Convertito in stringa.
jsonPayload.process.parent.ppid principal.process.parent_process.pid Se presente e non è impostato nessun altro PID del processo principale del soggetto, viene utilizzato questo valore. Convertito in stringa.
jsonPayload.process.parent.process.executable principal.process.file.full_path Se presente e non è impostato alcun altro percorso completo del processo principale, viene utilizzato questo valore.
jsonPayload.process.parent.process.exe principal.process.file.full_path Se presente e non è impostato alcun altro percorso completo del processo principale, viene utilizzato questo valore.
jsonPayload.process.parent.process.title principal.process.command_line Se presente e non è impostata un'altra riga di comando del processo principale, viene utilizzato questo valore.
jsonPayload.process.pid target.process.pid Il PID del processo di destinazione è impostato sul PID del processo del payload JSON.
jsonPayload.process.title target.process.command_line La riga di comando del processo di destinazione è impostata sul titolo del processo del payload JSON.
jsonPayload.user.id target.user.userid Se presente e non è impostato nessun altro ID utente di destinazione, viene utilizzato questo valore. Convertito in stringa.
jsonPayload.user.name target.user.user_display_name Se presente e non è impostato alcun altro nome visualizzato dell'utente target, viene utilizzato questo valore.
msg metadata.description La descrizione dei metadati è impostata sul messaggio.
network.bytes network.sent_bytes Convertito in uinteger.
network.community_id network.community_id L'ID community di rete è impostato sull'ID community di rete.
network.transport network.ip_protocol Convertito in maiuscolo.
package.description security_result.description La descrizione del risultato di sicurezza è impostata sulla descrizione del pacchetto.
package.name security_result.rule_name Il nome della regola del risultato di sicurezza è impostato sul nome del pacchetto.
package.reference security_result.about.url L'URL del risultato di sicurezza è impostato sul riferimento al pacchetto.
package.size security_result.about.file.size Convertito in uinteger.
package.type security_result.about.file.mime_type, security_result.rule_type Il tipo MIME e il tipo di regola del risultato di sicurezza sono impostati sul tipo di pacchetto.
process.created principal.asset.creation_time Se presente, viene utilizzato questo valore. Analizzato come ISO8601.
process.entity_id principal.process.product_specific_process_id Prefisso "Processo:".
process.executable principal.process.file.full_path, target.process.file.full_path Utilizzato per impostare il percorso completo del processo principale e di destinazione se non è presente nessun altro valore.
process.hash.sha1 principal.process.file.sha1 L'SHA-1 del processo principale è impostato sull'hash SHA-1 del processo.
process.name principal.application Se presente e non è impostata un'altra applicazione principale, viene utilizzato questo valore.
process.pid principal.process.pid Se presente e non è impostato nessun altro PID del processo principale, viene utilizzato questo valore. Convertito in stringa.
process.ppid principal.process.parent_process.pid Se presente e non è impostato nessun altro PID del processo principale del soggetto, viene utilizzato questo valore. Convertito in stringa.
process.start principal.asset.creation_time Se process.created non è presente e questo campo è presente, viene utilizzato questo valore. Analizzato come ISO8601.
resource.labels.backend_service_name target.resource.name Il nome della risorsa di destinazione è impostato sul nome del servizio di backend della risorsa.
resource.labels.forwarding_rule_name target.resource.attribute.labels Aggiunta come etichetta con la chiave "Nome regola di inoltro".
resource.labels.project_id target.resource.product_object_id L'ID oggetto prodotto della risorsa di destinazione è impostato sull'ID progetto della risorsa.
resource.labels.target_proxy_name target.resource.attribute.labels Aggiunto come etichetta con la chiave "Target proxy name".
resource.labels.url_map_name target.resource.attribute.labels Aggiunta come etichetta con la chiave "Nome mappa URL".
server.bytes intermediary.labels Aggiunto come etichetta con la chiave "Byte". Convertito in stringa.
server.ip intermediary.ip L'IP intermedio è impostato sull'IP del server.
server.packets intermediary.labels Aggiunto come etichetta con la chiave "Pacchetti". Convertito in stringa.
server.port intermediary.port La porta intermediaria è impostata sulla porta del server. Convertito in numero intero.
service.type target.application L'applicazione di destinazione è impostata sul tipo di servizio.
source.bytes src.labels Aggiunto come etichetta con la chiave "Byte". Convertito in stringa.
source.ip src.ip L'IP di origine è impostato sull'IP di origine.
source.packets src.labels Aggiunto come etichetta con la chiave "Pacchetti". Convertito in stringa.
source.port src.port La porta di origine è impostata sulla porta di origine. Convertito in numero intero.
system.audit.host.boottime about.asset.last_boot_time Analizzato come ISO8601.
system.audit.host.hostname about.hostname Il nome host about è impostato sul nome host di controllo del sistema.
system.audit.host.id principal.user.userid L'ID utente principale è impostato sull'ID host di controllo del sistema.
system.audit.host.mac.0 about.mac L'indirizzo MAC about è impostato sul primo indirizzo MAC host di controllo del sistema.
trace target.process.file.full_path Se presente e non è impostato nessun altro percorso completo del processo di destinazione, viene utilizzato questo valore.
user.effective.id target.user.userid Se presente e non è impostato nessun altro ID utente di destinazione, viene utilizzato questo valore.
user.effective.name target.user.user_display_name Se presente e non è impostato alcun altro nome visualizzato dell'utente target, viene utilizzato questo valore.
user.id target.user.userid Se presente e non è impostato nessun altro ID utente di destinazione, viene utilizzato questo valore. Convertito in stringa.
user.name target.user.user_display_name Se presente e non è impostato alcun altro nome visualizzato dell'utente target, viene utilizzato questo valore.
N/A metadata.event_type Imposta inizialmente il valore "GENERIC_EVENT". Modificato in base alla logica descritta nei commenti del codice del parser.
N/A metadata.log_type Imposta il valore su "ELASTIC_AUDITBEAT".
N/A metadata.product_name Imposta "Auditbeat".
N/A metadata.vendor_name Imposta "Elastico".
N/A extensions.auth.type Imposta "AUTHTYPE_UNSPECIFIED" per gli eventi USER_LOGIN e USER_LOGOUT.
auditd.data.syscall metadata.product_event_type Il tipo di evento prodotto dei metadati è impostato sulla chiamata di sistema auditd.

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.