Collecter les journaux Tableau
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
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres SIEM> Agents de collecte.
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
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres du SIEM > Profil.
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
- Ouvrez l'invite de commandes ou PowerShell en tant qu'administrateur.
Exécutez la commande suivante :
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietAttendez la fin de l'installation.
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
- Ouvrez un terminal avec des privilèges root ou sudo.
Exécutez la commande suivante :
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shAttendez la fin de l'installation.
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.yamlWindows :
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Modifiez le fichier de configuration
Remplacez l'intégralité du contenu de
config.yamlpar 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 disqueinclude: 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) etbackgrounder/*.log(journaux des tâches en arrière-plan). - Ajustez les chemins d'accès pour qu'ils correspondent à votre installation Tableau Server.
- Linux :
start_at: définissez la valeur surbeginningpour lire les fichiers journaux existants depuis le début ou surendpour 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
- Linux :
<customer_id>: ID client de l'étape précédenteendpoint: 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.
- États-Unis :
TABLEAU: type de journal tel qu'il apparaît dans Chronicleingestion_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 surEnter, puis surCtrl+X. - Windows : cliquez sur Fichier > Enregistrer.
- Linux : appuyez sur
Redémarrez l'agent Bindplane pour appliquer les modifications.
Pour redémarrer l'agent Bindplane sous Linux :
Exécutez la commande suivante :
sudo systemctl restart observiq-otel-collectorVérifiez que le service est en cours d'exécution :
sudo systemctl status observiq-otel-collectorRecherchez les erreurs dans les journaux :
sudo journalctl -u observiq-otel-collector -f
Pour redémarrer l'agent Bindplane sous Windows :
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 :
- Appuyez sur
Win+R, saisissezservices.msc, puis appuyez sur Entrée. - Localisez observIQ OpenTelemetry Collector.
- Effectuez un clic droit, puis sélectionnez Redémarrer.
- Appuyez sur
Vérifiez que le service est en cours d'exécution :
sc query observiq-otel-collectorRecherchez les erreurs dans les journaux :
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
Vérifier l'emplacement des fichiers journaux Tableau Server
- Connectez-vous à l'hôte Tableau Server avec des droits d'administrateur.
- 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\
- Linux :
- Sous-répertoires et fichiers journaux clés :
httpd/access.*.log: journaux d'accès Apache avec les détails des requêtes HTTPvizqlserver/*.log: journaux du serveur VizQL avec l'activité des requêtes de visualisationbackgrounder/*.log: journaux des tâches en arrière-plan avec l'activité des jobs planifiés
(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.zipMettez à jour les chemins d'accès
includedans leconfig.yamlde 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.