Raccogliere i log di Elastic Auditbeat
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
- Assicurati che Elastic Auditbeat sia installato e configurato sui tuoi server.
- Installa Logstash su un server dedicato o insieme ad Auditbeat.
- 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
- Crea un bucket Amazon S3 seguendo questa guida utente: Creazione di un bucket
- Salva il nome e la regione del bucket per riferimento futuro (ad esempio,
elastic-auditbeat-logs
). - Crea un utente seguendo questa guida utente: Creazione di un utente IAM.
- Seleziona l'utente creato.
- Seleziona la scheda Credenziali di sicurezza.
- Fai clic su Crea chiave di accesso nella sezione Chiavi di accesso.
- Seleziona Servizio di terze parti come Caso d'uso.
- Fai clic su Avanti.
- (Facoltativo) Aggiungi il tag della descrizione.
- Fai clic su Crea chiave di accesso.
- Fai clic su Scarica file .CSV per salvare la chiave di accesso e la chiave di accesso segreta per riferimento futuro.
- Fai clic su Fine.
- Seleziona la scheda Autorizzazioni.
- Fai clic su Aggiungi autorizzazioni nella sezione Criteri per le autorizzazioni.
- Seleziona Aggiungi autorizzazioni.
- Seleziona Allega direttamente i criteri.
- Cerca i criteri AmazonS3FullAccess.
- Seleziona la policy.
- Fai clic su Avanti.
- Fai clic su Aggiungi autorizzazioni.
Configura Auditbeat per l'invio a Logstash
- Modifica il file di configurazione di Auditbeat
/etc/auditbeat/auditbeat.yml
. - Commenta qualsiasi configurazione di output esistente (Elasticsearch e così via).
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"]
Riavvia Auditbeat per applicare le modifiche:
sudo systemctl restart auditbeat
Configura la pipeline Logstash
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
eYOUR_AWS_SECRET_ACCESS_KEY
con le tue credenziali AWS effettive. - Aggiorna i valori
region
ebucket
in modo che corrispondano alla configurazione di S3. - Avvia o riavvia Logstash:
sudo systemctl restart logstash
- Sostituisci
(Facoltativo) Crea chiavi e utenti IAM di sola lettura per Google SecOps
- Vai alla console AWS > IAM > Utenti.
- Fai clic su Add users (Aggiungi utenti).
- Fornisci i seguenti dettagli di configurazione:
- Utente: inserisci
secops-reader
. - Tipo di accesso: seleziona Chiave di accesso - Accesso programmatico.
- Utente: inserisci
- Fai clic su Crea utente.
- Collega la criterio per la lettura minima (personalizzata): Utenti > secops-reader > Autorizzazioni > Aggiungi autorizzazioni > Collega le norme direttamente > Crea norma.
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" } ] }
Name =
secops-reader-policy
.Fai clic su Crea criterio > cerca/seleziona > Avanti > Aggiungi autorizzazioni.
Crea la chiave di accesso per
secops-reader
: Credenziali di sicurezza > Chiavi di accesso.Fai clic su Crea chiave di accesso.
Scarica il
.CSV
. Incollerai questi valori nel feed.
Configura un feed in Google SecOps per importare i log di Elastic Auditbeat
- Vai a Impostazioni SIEM > Feed.
- Fai clic su + Aggiungi nuovo feed.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio,
Elastic Auditbeat Logs
). - Seleziona Amazon S3 V2 come Tipo di origine.
- Seleziona Elastic Audit Beats come Tipo di log.
- Fai clic su Avanti.
- 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.
- URI S3:
- Fai clic su Avanti.
- 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.