Collecter les journaux Tableau

Compatible avec :

Ce document explique comment ingérer des journaux Tableau dans Google Security Operations à l'aide de Bindplane.

Tableau est une plate-forme d'informatique décisionnelle et de visualisation de données qui génère des journaux d'activité de l'utilisateur, d'authentification et d'audit. Tableau Server stocke les fichiers journaux dans le système de fichiers du serveur, ce qui rend la collecte basée sur les fichiers idéale pour l'ingestion.

Avant de commencer

Assurez-vous de remplir les conditions suivantes :

  • Une instance Google SecOps
  • Windows Server 2016 ou version ultérieure, ou hôte Linux avec systemd
  • Connectivité réseau entre l'agent Bindplane et l'hôte Tableau Server
  • Si vous exécutez l'agent derrière un proxy, assurez-vous que les ports de pare-feu sont ouverts conformément aux exigences de l'agent Bindplane.
  • Accès privilégié à Tableau Server avec des autorisations d'administrateur
  • Accès aux fichiers journaux Tableau Server sur le système de fichiers du serveur

Obtenir le fichier d'authentification d'ingestion Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres SIEM> Agents de collecte.
  3. Téléchargez le fichier d'authentification d'ingestion. Enregistrez le fichier de manière sécurisée sur le système sur lequel Bindplane sera installé.

Obtenir l'ID client Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres du SIEM > Profil.
  3. Copiez et enregistrez le numéro client dans la section Informations sur l'organisation.

Installer l'agent Bindplane

Installez l'agent Bindplane sur votre système d'exploitation Windows ou Linux en suivant les instructions ci-dessous.

Installation de Windows

  1. Ouvrez l'invite de commandes ou PowerShell en tant qu'administrateur.
  2. Exécutez la commande suivante :

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. Attendez la fin de l'installation.

  4. Vérifiez l'installation en exécutant la commande suivante :

    sc query observiq-otel-collector
    

Le service doit être indiqué comme RUNNING (EN COURS D'EXÉCUTION).

Installation de Linux

  1. Ouvrez un terminal avec des privilèges root ou sudo.
  2. Exécutez la commande suivante :

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. Attendez la fin de l'installation.

  4. Vérifiez l'installation en exécutant la commande suivante :

    sudo systemctl status observiq-otel-collector
    

Le service doit être indiqué comme actif (en cours d'exécution).

Autres ressources d'installation

Pour obtenir d'autres options d'installation et de dépannage, consultez le guide d'installation de l'agent Bindplane.

Configurer l'agent Bindplane pour ingérer les journaux Syslog et les envoyer à Google SecOps

Localiser le fichier de configuration

  • Linux :

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

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

Modifiez le fichier de configuration

  • Remplacez l'intégralité du contenu de config.yaml par la configuration suivante :

    receivers:
        filelog:
            include:
                - /var/opt/tableau/tableau_server/data/tabsvc/logs/httpd/access.*.log
                - /var/opt/tableau/tableau_server/data/tabsvc/logs/vizqlserver/*.log
                - /var/opt/tableau/tableau_server/data/tabsvc/logs/backgrounder/*.log
            start_at: beginning
    
    exporters:
        chronicle/tableau:
            compression: gzip
            creds_file_path: '/etc/bindplane-agent/ingestion-auth.json'
            customer_id: '<customer_id>'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: TABLEAU
            raw_log_field: body
            ingestion_labels:
                env: production
    
    service:
        pipelines:
            logs/tableau_to_chronicle:
                receivers:
                    - filelog
                exporters:
                    - chronicle/tableau
    

Paramètres de configuration

Remplacez les espaces réservés suivants :

  • Configuration du récepteur :

    • filelog : type de récepteur pour la collecte des fichiers journaux à partir du disque
    • include : liste des chemins d'accès aux fichiers ou des modèles glob à surveiller :
      • Linux : /var/opt/tableau/tableau_server/data/tabsvc/logs/
      • Windows : C:\ProgramData\Tableau\Tableau Server\data\tabsvc\logs\
      • Les principaux fichiers journaux incluent httpd/access.*.log (journaux d'accès Apache), vizqlserver/*.log (journaux du serveur VizQL) et backgrounder/*.log (journaux des tâches en arrière-plan).
      • Ajustez les chemins d'accès pour qu'ils correspondent à votre installation Tableau Server.
    • start_at : définissez la valeur sur beginning pour lire les fichiers journaux existants depuis le début ou sur end pour ne lire que les nouvelles entrées.
  • Configuration de l'exportateur :

    • tableau : nom descriptif de l'exportateur.
    • creds_file_path : chemin d'accès complet au fichier d'authentification de l'ingestion :
      • Linux : /etc/bindplane-agent/ingestion-auth.json
      • Windows : C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • <customer_id> : ID client de l'étape précédente
    • endpoint : URL du point de terminaison régional :
      • États-Unis : malachiteingestion-pa.googleapis.com
      • Europe : europe-malachiteingestion-pa.googleapis.com
      • Asie : asia-southeast1-malachiteingestion-pa.googleapis.com
      • Pour obtenir la liste complète, consultez Points de terminaison régionaux.
    • TABLEAU : type de journal tel qu'il apparaît dans Chronicle
    • ingestion_labels : étiquettes facultatives au format YAML (par exemple, env: production)

Configuration du pipeline : * tableau_to_chronicle : nom descriptif du pipeline

Enregistrez le fichier de configuration.

  • Après avoir modifié le fichier, enregistrez-le :
    • Linux : appuyez sur Ctrl+O, puis sur Enter, puis sur Ctrl+X.
    • Windows : cliquez sur Fichier > Enregistrer.

Redémarrez l'agent Bindplane pour appliquer les modifications.

Pour redémarrer l'agent Bindplane sous Linux :

  1. Exécutez la commande suivante :

    sudo systemctl restart observiq-otel-collector
    
  2. Vérifiez que le service est en cours d'exécution :

    sudo systemctl status observiq-otel-collector
    
  3. Recherchez les erreurs dans les journaux :

    sudo journalctl -u observiq-otel-collector -f
    

Pour redémarrer l'agent Bindplane sous Windows :

  1. Choisissez l'une des options suivantes :

    • Invite de commande ou PowerShell en tant qu'administrateur :
    net stop observiq-otel-collector && net start observiq-otel-collector
    
    • Console Services :
      1. Appuyez sur Win+R, saisissez services.msc, puis appuyez sur Entrée.
      2. Localisez observIQ OpenTelemetry Collector.
      3. Effectuez un clic droit, puis sélectionnez Redémarrer.
  2. Vérifiez que le service est en cours d'exécution :

    sc query observiq-otel-collector
    
  3. Recherchez les erreurs dans les journaux :

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

Vérifier l'emplacement des fichiers journaux Tableau Server

  1. Connectez-vous à l'hôte Tableau Server avec des droits d'administrateur.
  2. Vérifiez les répertoires des fichiers journaux :
    • Linux : /var/opt/tableau/tableau_server/data/tabsvc/logs/
    • Windows : C:\ProgramData\Tableau\Tableau Server\data\tabsvc\logs\
  3. Sous-répertoires et fichiers journaux clés :
    • httpd/access.*.log : journaux d'accès Apache avec les détails des requêtes HTTP
    • vizqlserver/*.log : journaux du serveur VizQL avec l'activité des requêtes de visualisation
    • backgrounder/*.log : journaux des tâches en arrière-plan avec l'activité des jobs planifiés
  4. (Facultatif) Générez une archive de journaux à l'aide de l'outil de ligne de commande TSM pour la validation :

    tsm maintenance ziplogs -a -t -o -f tableau-logs.zip
    
  5. Mettez à jour les chemins d'accès include dans le config.yaml de l'agent Bindplane si le répertoire de journaux diffère de celui par défaut.

Table de mappage UDM

Champ de journal Mappage UDM Logique
dataserver_permissions, local_dataserver, saved_credentials_viewerid, locale, server_oauth, :id, server_viewerid, dataserver_version, tablename, ElapsedTime, LastStatus, Timeszone additional.fields Paires clé-valeur fusionnées à partir des champs spécifiés
Contenu metadata.description Valeur copiée directement après la suppression de "_"
ID, RemoteHost metadata.event_type Définissez sur USER_UNCATEGORIZED si l'ID n'est pas vide, sur STATUS_UPDATE si RemoteHost est présent, ou sur GENERIC_EVENT dans le cas contraire.
protocol network.application_protocol Valeur copiée directement
http_version network.application_protocol_version Valeur copiée directement
method network.http.method Valeur copiée directement après la suppression de ""
SizeBytes network.received_bytes Converti en uinteger
session_id network.session_id Valeur copiée directement
Workername principal.asset.hostname Valeur copiée directement
RemoteHost principal.asset.ip Valeur copiée directement
Workername principal.hostname Valeur copiée directement
RemoteHost principal.ip Valeur copiée directement
Port principal.nat_port Converti en entier
ID principal.user.product_object_id Valeur copiée directement
RemoteUser principal.user.userid Valeur copiée directement si elle n'est pas vide ou si elle est définie sur "_"
logging_ctx security_result.detection_fields Paire clé-valeur fusionnée à partir de logging_ctx
chemin d'accès target.file.full_path Valeur copiée directement
dbname target.resource.name Valeur copiée directement
metadata.product_name Définir sur "Tableau"
metadata.vendor_name Défini sur "TABLEAU"
temp_user event.idm.read_only_udm.principal.user.userid Mappé à partir du journal des modifications
user_name event.idm.read_only_udm.principal.user.userid Mappé à partir du journal des modifications
temp_domain event.idm.read_only_udm.principal.administrative_domain Mappé à partir du journal des modifications
temp_role event.idm.read_only_udm.principal.user.attribute.roles Mappé à partir du journal des modifications
source_info event.idm.read_only_udm.additional.fields Mappé à partir du journal des modifications
user_application event.idm.read_only_udm.principal.application Mappé à partir du journal des modifications
temp_http_uri event.idm.read_only_udm.target.url Mappé à partir du journal des modifications
temp_api_call event.idm.read_only_udm.target.url Mappé à partir du journal des modifications
temp_site_id event.idm.read_only_udm.target.resource.name Mappé à partir du journal des modifications
java_method event.idm.read_only_udm.target.resource.name Mappé à partir du journal des modifications
java_class event.idm.read_only_udm.target.resource.type Mappé à partir du journal des modifications
temp_http_method event.idm.read_only_udm.network.http.method Mappé à partir du journal des modifications
temp_http_status event.idm.read_only_udm.network.http.response_code Mappé à partir du journal des modifications
"Computer" event.idm.read_only_udm.principal.hostname Mappé à partir du journal des modifications
"TimeGenerated" event.idm.read_only_udm.security_result.first_discovered_time Mappé à partir du journal des modifications
"_TimeReceived" event.idm.read_only_udm.security_result.last_discovered_time Mappé à partir du journal des modifications
"_IsBillable" event.idm.read_only_udm.additional.fields Mappé à partir du journal des modifications
"_BilledSize" event.idm.read_only_udm.additional.fields Mappé à partir du journal des modifications
"_Internal_WorkspaceResourceId" event.idm.read_only_udm.additional.fields Mappé à partir du journal des modifications
"_ItemId" event.idm.read_only_udm.additional.fields Mappé à partir du journal des modifications
"TenantId" event.idm.read_only_udm.additional.fields Mappé à partir du journal des modifications
"_SubscriptionId" event.idm.read_only_udm.additional.fields Mappé à partir du journal des modifications
"_ResourceId" event.idm.read_only_udm.principal.resource.id Mappé à partir du journal des modifications
"FilePath" event.idm.read_only_udm.additional.fields Mappé à partir du journal des modifications
"Type" event.idm.read_only_udm.additional.fields Mappé à partir du journal des modifications
"temp_message" event.idm.read_only_udm.metadata.description Mappé à partir du journal des modifications
"temp_logger_name" event.idm.read_only_udm.principal.application Mappé à partir du journal des modifications
"temp_pid" event.idm.read_only_udm.principal.process.pid Mappé à partir du journal des modifications
"temp_thread_name" event.idm.read_only_udm.principal.process.file.full_path Mappé à partir du journal des modifications
"temp_log_level" event.idm.read_only_udm.security_result.severity Mappé à partir du journal des modifications
appname event.idm.read_only_udm.metadata.product_event_type Mappé à partir du journal des modifications
id2 event.idm.read_only_udm.metadata.product_log_id Mappé à partir du journal des modifications
pid event.idm.read_only_udm.observer.process.pid Mappé à partir du journal des modifications
timestamp event.idm.read_only_udm.metadata.event_timestamp Mappé à partir du journal des modifications
user event.idm.read_only_udm.principal.user.userid Mappé à partir du journal des modifications
id1 event.idm.read_only_udm.network.session_id Mappé à partir du journal des modifications
logger event.idm.read_only_udm.observer.process.command_line Mappé à partir du journal des modifications
loglevel event.idm.read_only_udm.security_result.severity Mappé à partir du journal des modifications
user_id event.idm.read_only_udm.target.user.userid Mappé à partir du journal des modifications
site_id event.idm.read_only_udm.target.resource.id Mappé à partir du journal des modifications
message event.idm.read_only_udm.metadata.description Mappé à partir du journal des modifications
script_type event.idm.read_only_udm.target.resource.name Mappé à partir du journal des modifications
id3 event.idm.read_only_udm.additional.fields Mappé à partir du journal des modifications
thread event.idm.read_only_udm.additional.fields Mappé à partir du journal des modifications
function_name event.idm.read_only_udm.security_result.summary Mappé à partir du journal des modifications

Journal des modifications

Afficher le journal des modifications pour ce parseur

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.