Raccogliere i log IAM di Ergon Informatik Airlock

Supportato in:

Questo documento spiega come importare i log IAM di Ergon Informatik Airlock in Google Security Operations utilizzando l'agente Bindplane.

Airlock IAM è una soluzione di gestione di identità e accessi che fornisce funzionalità di autenticazione, autorizzazione e self-service per gli utenti. Genera log JSON strutturati per eventi di autenticazione, attività di tracciamento degli utenti, log di controllo e azioni amministrative nei moduli Loginapp, Adminapp, Approvazione transazioni, Service Container e API Policy Service.

Prima di iniziare

Assicurati di soddisfare i seguenti prerequisiti:

  • Un'istanza Google SecOps
  • Windows Server 2016 o versioni successive oppure un host Linux con systemd
  • Connettività di rete tra l'agente Bindplane e il server Airlock IAM
  • Se l'esecuzione avviene tramite un proxy, assicurati che le porte firewall siano aperte in base ai requisiti dell'agente Bindplane.
  • Accesso amministrativo all'istanza Airlock IAM
  • Accesso SSH o alla console al server Airlock IAM per modificare i file di configurazione

Recuperare il file di autenticazione importazione di Google SecOps

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Agenti di raccolta.
  3. Scarica il file di autenticazione importazione. Salva il file in modo sicuro sul sistema in cui verrà installato Bindplane.

Recuperare l'ID cliente Google SecOps

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Profilo.
  3. Copia e salva l'ID cliente dalla sezione Dettagli dell'organizzazione.

Installa l'agente Bindplane

Installa l'agente Bindplane sul sistema operativo Windows o Linux seguendo le istruzioni riportate di seguito.

Installazione di Windows

  1. Apri Prompt dei comandi o PowerShell come amministratore.
  2. Esegui questo comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. Attendi il completamento dell'installazione.

  4. Verifica l'installazione eseguendo il comando:

    sc query observiq-otel-collector
    

    Lo stato del servizio deve essere RUNNING.

Installazione di Linux

  1. Apri un terminale con privilegi root o sudo.
  2. Esegui questo comando:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. Attendi il completamento dell'installazione.

  4. Verifica l'installazione eseguendo il comando:

    sudo systemctl status observiq-otel-collector
    

    Lo stato del servizio deve essere attivo (in esecuzione).

Risorse aggiuntive per l'installazione

Per ulteriori opzioni di installazione e risoluzione dei problemi, consulta la Guida all'installazione dell'agente Bindplane.

Configura l'agente Bindplane per importare syslog e inviarli a Google SecOps

Individua il file di configurazione

  • Linux:

    sudo nano /etc/bindplane-agent/config.yaml
    
  • Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

Modifica il file di configurazione

  1. Sostituisci l'intero contenuto di config.yaml con la seguente configurazione:

    receivers:
        udplog:
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/airlock_iam:
            compression: gzip
            creds_file_path: '/etc/bindplane-agent/ingestion-auth.json'
            customer_id: 'YOUR_CUSTOMER_ID'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: ERGON_INFORMATIK_AIRLOCK_IAM
            raw_log_field: body
            ingestion_labels:
                env: production
                source: airlock_iam
    
    service:
        pipelines:
            logs/airlock_to_chronicle:
                receivers:
                    - udplog
                exporters:
                    - chronicle/airlock_iam
    
  2. Sostituisci i seguenti segnaposto:

    • Configurazione del ricevitore:

      • listen_address: impostalo su 0.0.0.0:514 per ascoltare su tutte le interfacce sulla porta 51. Per i sistemi Linux in esecuzione come non root, utilizza la porta 1514 o superiore.
    • Configurazione dell'esportatore:

      • creds_file_path: Percorso completo del file di autenticazione importazione:

        • Linux: /etc/bindplane-agent/ingestion-auth.json
        • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
      • YOUR_CUSTOMER_ID: Sostituisci con l'ID cliente Google SecOps del passaggio precedente

      • endpoint: URL endpoint regionale:

        • Stati Uniti: malachiteingestion-pa.googleapis.com
        • Europa: europe-malachiteingestion-pa.googleapis.com
        • Asia: asia-southeast1-malachiteingestion-pa.googleapis.com
      • ingestion_labels: Etichette facoltative per classificare i log (modifica in base alle esigenze)

Configurazione di esempio per Windows

  • receivers:
        udplog:
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/airlock_iam:
            compression: gzip
            creds_file_path: 'C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json'
            customer_id: 'a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: ERGON_INFORMATIK_AIRLOCK_IAM
            raw_log_field: body
            ingestion_labels:
                env: production
                source: airlock_iam
    
    service:
        pipelines:
            logs/airlock_to_chronicle:
                receivers:
                    - udplog
                exporters:
                    - chronicle/airlock_iam
    

Salvare il file di configurazione

Dopo la modifica, salva il file:

  • Linux: premi Ctrl+O, poi Enter e infine Ctrl+X.
  • Windows: fai clic su File > Salva.

Riavvia l'agente Bindplane per applicare le modifiche

  • Per riavviare l'agente Bindplane in Linux:

    1. Esegui questo comando:

      sudo systemctl restart observiq-otel-collector
      
    2. Verifica che il servizio sia in esecuzione:

      sudo systemctl status observiq-otel-collector
      
    3. Controlla i log per individuare eventuali errori:

      sudo journalctl -u observiq-otel-collector -f
      
  • Per riavviare l'agente Bindplane in Windows:

    1. Scegli una delle seguenti opzioni:

      • Prompt dei comandi o PowerShell come amministratore:

        net stop observiq-otel-collector && net start observiq-otel-collector
        
      • Console Services:

        1. Premi Win+R, digita services.msc e premi Invio.
        2. Individua observIQ OpenTelemetry Collector.
        3. Fai clic con il tasto destro del mouse e seleziona Riavvia.
    2. Verifica che il servizio sia in esecuzione:

      sc query observiq-otel-collector
      
    3. Controlla i log per individuare eventuali errori:

      type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
      

Configura l'inoltro di syslog di Airlock IAM

  1. Connettiti al server Airlock IAM utilizzando SSH o l'accesso alla console.
  2. Vai alla directory dell'istanza:

    cd /opt/airlock/iam/instances/<instance_name>/
    
  3. Modifica il file di configurazione Log4j per tutti i moduli:

    nano log4j/all-modules.xml
    
  4. Aggiungi la configurazione dell'appender Syslog nella sezione <Appenders>:

    <Syslog name="SYSLOG" 
            facility="LOCAL1" 
            host="BINDPLANE_AGENT_IP" 
            port="514" 
            protocol="UDP" 
            format="RFC5424" 
            includeMDC="true" 
            mdcId="mdc" 
            newLine="true">
        <ExceptionPattern>%ex{full}</ExceptionPattern>
        <ThresholdFilter level="INFO"/>
    </Syslog>
    
  5. Configura i parametri dell'appender Syslog:

    • host: sostituisci BINDPLANE_AGENT_IP con l'indirizzo IP dell'host dell'agente Bindplane (ad esempio, 192.168.1.100)
    • port: imposta su 514 (o 1514 se l'agente Bindplane è configurato per una porta non privilegiata)
    • protocol: imposta su UDP (o TCP se hai configurato il ricevitore tcplog in Bindplane)
    • format: impostato su RFC5424 per il formato syslog strutturato
    • facility: impostato su LOCAL1 (o un altro codice struttura in base alle esigenze: da LOCAL0 a LOCAL7)
    • Livello ThresholdFilter: impostalo su INFO per inviare log di gravità INFO e superiore oppure su DEBUG per tutti i log
  6. Aggiungi il riferimento dell'appender all'interno della sezione del logger <Root>:

    <Loggers>
      <Root level="${sys:iam.log.level}">
        <AppenderRef ref="SYSLOG"/>
      </Root>
    </Loggers>
    
  7. Configurazione di esempio completa:

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration name="Custom Log4j 2 Configuration for All IAM Modules">
      <Appenders>
        <Syslog name="SYSLOG" 
                facility="LOCAL1" 
                host="192.168.1.100" 
                port="514" 
                protocol="UDP" 
                format="RFC5424" 
                includeMDC="true" 
                mdcId="mdc" 
                newLine="true">
          <ExceptionPattern>%ex{full}</ExceptionPattern>
          <ThresholdFilter level="INFO"/>
        </Syslog>
      </Appenders>
      <Loggers>
        <Root level="${sys:iam.log.level}">
          <AppenderRef ref="SYSLOG"/>
        </Root>
      </Loggers>
    </Configuration>
    
  8. Salva il file di configurazione:

    Premi Ctrl+O, poi Enter e infine Ctrl+X.

  9. La configurazione di Log4j viene monitorata per rilevare modifiche ogni 60 secondi per impostazione predefinita. Il nuovo inoltro di syslog si attiverà automaticamente senza richiedere un riavvio.

  10. Verifica che i log vengano inviati all'agente Bindplane:

    sudo journalctl -u observiq-otel-collector -f
    
  11. Verifica che i log arrivino in Google SecOps:

    1. Accedi alla console Google SecOps.
    2. Vai a SIEM > Search (SIEM > Ricerca).
    3. Esegui una query di ricerca:

      metadata.log_type = "ERGON_INFORMATIK_AIRLOCK_IAM"
      
    4. Verifica che i log di Airlock IAM vengano visualizzati nei risultati di ricerca.

Opzioni di configurazione aggiuntive

Configura syslog TCP anziché UDP

Se preferisci la distribuzione TCP anziché UDP:

  1. Nel file config.yaml dell'agente Bindplane, modifica il ricevitore in tcplog:

    receivers:
      tcplog:
        listen_address: "0.0.0.0:514"
    
  2. Nel file log4j/all-modules.xml di Airlock IAM, modifica il protocollo in TCP:

    <Syslog name="SYSLOG" 
            facility="LOCAL1" 
            host="192.168.1.100" 
            port="514" 
            protocol="TCP" 
            format="RFC5424" 
            includeMDC="true" 
            mdcId="mdc" 
            newLine="true">
      <ExceptionPattern>%ex{full}</ExceptionPattern>
      <ThresholdFilter level="INFO"/>
    </Syslog>
    
  3. Riavvia l'agente Bindplane per applicare la modifica del ricevitore.

Configurare diversi livelli di log

  • Per inviare solo i log di livello AVVISO e superiore:

    <ThresholdFilter level="WARN"/>
    
  • Per inviare tutti i log, incluso DEBUG:

    <ThresholdFilter level="DEBUG"/>
    

Livelli di log disponibili, dalla gravità più bassa a quella più alta:

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • FATAL

Configura più istanze Airlock IAM

  • Se hai più istanze di Airlock IAM che inviano dati allo stesso agente Bindplane, utilizza le etichette di importazione per distinguerle:

    exporters:
        chronicle/airlock_iam_prod:
            compression: gzip
            creds_file_path: '/etc/bindplane-agent/ingestion-auth.json'
            customer_id: 'YOUR_CUSTOMER_ID'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: ERGON_INFORMATIK_AIRLOCK_IAM
            raw_log_field: body
            ingestion_labels:
                env: production
                instance: prod-iam-01
    
        chronicle/airlock_iam_dev:
            compression: gzip
            creds_file_path: '/etc/bindplane-agent/ingestion-auth.json'
            customer_id: 'YOUR_CUSTOMER_ID'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: ERGON_INFORMATIK_AIRLOCK_IAM
            raw_log_field: body
            ingestion_labels:
                env: development
                instance: dev-iam-01
    
    service:
        pipelines:
            logs/airlock_prod:
                receivers:
                    - udplog
                exporters:
                    - chronicle/airlock_iam_prod
    
            logs/airlock_dev:
                receivers:
                    - udplog
                exporters:
                    - chronicle/airlock_iam_dev
    

Risoluzione dei problemi

I log non vengono visualizzati in Google SecOps

  1. Verifica che l'agente Bindplane riceva i log:

    sudo journalctl -u observiq-otel-collector -f
    
  2. Verifica la connettività di rete da Airlock IAM all'agente Bindplane:

    telnet BINDPLANE_AGENT_IP 514
    
  3. Verifica che la configurazione di Log4j sia valida:

    cat /opt/airlock/iam/instances/<instance_name>/log4j/all-modules.xml
    
  4. Controlla la presenza di errori nei log di Airlock IAM:

    tail -f /opt/airlock/iam/instances/<instance_name>/logs/loginapp.log
    

Errori dell'agente Bindplane

  1. Controlla la presenza di errori nei log dell'agente Bindplane:

    sudo journalctl -u observiq-otel-collector -n 100
    
  2. Verifica che la sintassi di config.yaml sia corretta. YAML è sensibile al rientro.

  3. Verifica che il percorso del file di autenticazione dell'importazione sia corretto e che il file esista.

  4. Testa la connettività di rete all'endpoint Google SecOps:

    curl -v https://malachiteingestion-pa.googleapis.com
    

Configurazione del firewall

Assicurati che siano configurate le seguenti regole firewall:

Inbound all'agente Bindplane:

  • Protocollo: UDP (o TCP se utilizzi tcplog)
  • Porta: 514 (o la porta configurata)
  • Origine: indirizzo IP del server Airlock IAM

In uscita dall'agente Bindplane:

  • Protocollo: HTTPS (TCP 443)
  • Destinazione: endpoint regionale Google SecOps
  • Scopo: consegna dei log a Google SecOps

Tabella di mappatura UDM

Campo log Mappatura UDM Logic
expire_time additional.fields Unito come etichetta con la chiave "expire_time" se non è vuoto
cellulare additional.fields Unito come etichetta con la chiave "mobile" se non è vuoto
sn additional.fields Unito come etichetta con la chiave "sn" se non è vuoto
CONFIG_CONTEXT additional.fields Unito come etichetta con la chiave "CONFIG_CONTEXT" se non è vuoto
reparto additional.fields Unito come etichetta con la chiave "department" se non è vuoto
ctxData additional.fields Unito come etichetta con la chiave "ctxData" se non è vuoto
displayLanguage additional.fields Unito come etichetta con la chiave "displayLanguage" se non è vuoto
nrPwdTrialsForUserDeletion additional.fields Unito come etichetta con la chiave "nrPwdTrialsForUserDeletion" se non è vuoto
authInstant additional.fields Unito come etichetta con la chiave "authInstant" se non è vuoto
auditToken additional.fields Unito come etichetta con la chiave "auditToken" se non è vuoto
authPlugin additional.fields Unito come etichetta con la chiave "authPlugin" se non è vuoto
latestIdPropagation additional.fields Unito come etichetta con la chiave "latestIdPropagation" se non è vuoto
servizio additional.fields Unito come etichetta con la chiave "service" se non è vuoto
ldap_type additional.fields Unito come etichetta con la chiave "ldap_type" se non è vuota
report_message additional.fields Unito come etichetta con la chiave "report_message" se non è vuota
authenteeProvidedId additional.fields Unito come etichetta con la chiave "authenteeProvidedId" se non è vuota
representerId additional.fields Unito come etichetta con la chiave "representerId" se non è vuoto
motore additional.fields Unito come etichetta con la chiave "engine" se non è vuoto
canale additional.fields Unito come etichetta con la chiave "channel" se non è vuoto
authnFactor additional.fields Unito come etichetta con la chiave "authnFactor" se non è vuoto
authnFactorDetail additional.fields Unito come etichetta con la chiave "authnFactorDetail" se non è vuoto
required_roles additional.fields Unito come etichetta con la chiave "required_roles" se non è vuoto
target_pattern additional.fields Unito come etichetta con la chiave "target_pattern" se non è vuoto
nameid additional.fields Unito come etichetta con chiave "nameid" se non è vuoto
plugin_name additional.fields Unito come etichetta con la chiave "plugin_name" se non è vuoto
meccanismo additional.fields Unito come etichetta con la chiave "mechanism" se non è vuoto
new_session_id additional.fields Unito come etichetta con la chiave "new_session_id" se non è vuota
former_session_id additional.fields Unito come etichetta con la chiave "former_session_id" se non è vuoto
req_id additional.fields Unito come etichetta con la chiave "req_id" se non è vuoto
auth_method additional.fields Unito come etichetta con la chiave "auth_method" se non è vuoto
otp additional.fields Unito come etichetta con la chiave "otp" se non è vuoto
mob_num additional.fields Unito come etichetta con la chiave "mob_num" se non è vuoto
jsessionid additional.fields Unito come etichetta con la chiave "jsessionid" se non è vuoto
creationDate additional.fields Unito come etichetta con la chiave "creationDate" se non è vuoto
lastLogin additional.fields Unito come etichetta con la chiave "lastLogin" se non è vuoto
accountStatus additional.fields Unito come etichetta con la chiave "accountStatus" se non è vuota
companyAdministrator additional.fields Unito come etichetta con la chiave "companyAdministrator" se non è vuoto
companyCustomer additional.fields Unito come etichetta con la chiave "companyCustomer" se non è vuoto
privateCustomer additional.fields Unito come etichetta con la chiave "privateCustomer" se non è vuoto
otpNotifyChannel additional.fields Unito come etichetta con la chiave "otpNotifyChannel" se non è vuota
nas_identifier additional.fields Unito come etichetta con la chiave "nas_identifier" se non è vuoto
session_id additional.fields Unito come etichetta con la chiave "session_id" se non è vuoto
authPluginClassName extensions.auth.auth_details Valore copiato direttamente, se presente
authenticator_type extensions.auth.auth_details Valore copiato direttamente se presente e authPluginClassName è vuoto
logon_type extensions.auth.mechanism Valore copiato direttamente
N/D intermediario Unito dall'oggetto intermedio
FORWARD_LOCATION intermediary.url Valore copiato direttamente
metadata_description metadata.description Valore copiato direttamente
N/D metadata.event_type Impostato in base al contesto dell'evento; determinato dalla logica del parser
REQUEST_ID metadata.product_log_id Valore copiato direttamente
airlock_version metadata.product_version Valore copiato direttamente
metodo network.http.method Valore copiato direttamente
user_agent network.http.user_agent Valore copiato direttamente
packet_size network.received_packets Valore convertito in numero intero
GSID network.session_id Valore copiato direttamente
host principal.hostname Valore copiato direttamente
CLIENT_IP principal.ip Valore copiato direttamente
UID principal.user.userid Valore copiato direttamente
role_name role.name Valore copiato direttamente
authenteeType role.type Valore copiato direttamente
N/D security_result Unito dall'oggetto security_result
azione security_result.action_details Valore copiato direttamente, se presente
authMethodShortDesc security_result.action_details Valore unito se presente
action_detail security_result.action_details Valore unito se presente
category_value security_result.category Valore copiato direttamente
actionGroup security_result.category_details Valore copiato direttamente
result_description security_result.description Valore copiato direttamente
eccezione security_result.summary Valore copiato direttamente, se presente
STATLOG security_result.summary Valore copiato direttamente se presente e l'eccezione è vuota
mob_num src.asset.type Valore copiato direttamente
posta src.email Valore copiato direttamente, se presente
email src.email Valore copiato direttamente se presente e la posta è vuota
src_ip src.ip Valore copiato direttamente
src_port src.port Valore convertito in numero intero
ruolo src.user.attribute.roles Valore copiato direttamente
azienda src.user.company_name Valore copiato direttamente
firstName src.user.first_name Valore copiato direttamente
lastName src.user.last_name Valore copiato direttamente
stato src.user.user_authentication_status Valore copiato direttamente
displayName src.user.user_display_name Valore copiato direttamente, se presente
nome utente src.user.user_display_name Il valore viene copiato direttamente se presente e displayName è vuoto
src_user src.user.user_display_name Valore copiato direttamente se presente e displayName/username sono vuoti
authenteeId src.user.userid Valore copiato direttamente, se presente
src_userid src.user.userid Valore copiato direttamente se presente e authenteeId è vuoto
UID src.user.userid Valore copiato direttamente se presente e authenteeId/src_userid sono vuoti
file_path target.file.full_path Valore copiato direttamente
target_hostname target.hostname Valore copiato direttamente
target_port target.port Valore convertito in numero intero
task_name target.resource.name Valore copiato direttamente
target_url target.url Valore copiato direttamente
N/D metadata.product_name Imposta su "Ergon Informatik Airlock IAM"
N/D metadata.vendor_name Impostato su "Ergon Informatik"

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