Collecter les journaux du gestionnaire VMware Networking and Security Virtualization (NSX)
Ce document explique comment collecter les journaux du gestionnaire VMware NSX (Networking and Security Virtualization). L'analyseur extrait les champs à l'aide de différents modèles Grok en fonction du format du message. Il effectue ensuite une analyse clé-valeur, une analyse JSON et une logique conditionnelle pour mapper les champs extraits à l'UDM, en gérant différents formats de journaux et en enrichissant les données avec un contexte supplémentaire.
Avant de commencer
- Assurez-vous de disposer d'une instance Google Security Operations.
- Assurez-vous d'utiliser Windows 2016 ou une version ultérieure, ou un hôte Linux avec
systemd
. - Si vous exécutez le programme derrière un proxy, assurez-vous que les ports du pare-feu sont ouverts.
- Assurez-vous de disposer d'un accès administrateur à VMWare NSX.
Obtenir le fichier d'authentification d'ingestion Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres du 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 l'agent Bindplane sera installé.
Obtenir l'ID client Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres SIEM> Profil.
- Copiez et enregistrez le numéro client de la section Informations sur l'organisation.
Installer l'agent BindPlane
Installation de fenêtres
- 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" /quiet
Installation de Linux
- Ouvrez un terminal avec les droits 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.sh
Ressources d'installation supplémentaires
- Pour plus d'options d'installation, consultez ce guide d'installation.
Configurer l'agent Bindplane pour ingérer les journaux Syslog et les envoyer à Google SecOps
Accédez au fichier de configuration :
- Recherchez le fichier
config.yaml
. En règle générale, il se trouve dans le répertoire/etc/bindplane-agent/
sous Linux ou dans le répertoire d'installation sous Windows. - Ouvrez le fichier à l'aide d'un éditeur de texte (par exemple,
nano
,vi
ou le Bloc-notes).
- Recherchez le fichier
Modifiez le fichier
config.yaml
comme suit :receivers: udplog: # Replace the below port <54525> and IP <0.0.0.0> with your specific values listen_address: "0.0.0.0:54525" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the creds location below according the placement of the credentials file you downloaded creds: '{ json file for creds }' # Replace <customer_id> below with your actual ID that you copied customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # You can apply ingestion labels below as preferred ingestion_labels: log_type: SYSLOG namespace: vmware_nsx raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
Remplacez le port et l'adresse IP selon les besoins de votre infrastructure.
Remplacez
<customer_id>
par le numéro client réel.Mettez à jour
/path/to/ingestion-authentication-file.json
en indiquant le chemin d'accès où le fichier d'authentification a été enregistré dans la section Obtenir le fichier d'authentification pour l'ingestion Google SecOps.
Redémarrer l'agent Bindplane pour appliquer les modifications
Sous Linux, pour redémarrer l'agent Bindplane, exécutez la commande suivante :
sudo systemctl restart bindplane-agent
Sous Windows, pour redémarrer l'agent Bindplane, vous pouvez utiliser la console Services ou saisir la commande suivante :
net stop BindPlaneAgent && net start BindPlaneAgent
Configuration de Syslog pour NSX Edge
- Connectez-vous au client Web vSphere.
- Accédez à Mise en réseau et sécurité > NSX Edges.
- Sélectionnez l'instance NSX Edge spécifique que vous souhaitez configurer.
- Accédez à Paramètres Syslog :
- Pour NSX 6.4.4 et versions ultérieures :
- Accédez à Gérer > Paramètres > Paramètres de l'appareil.
- Cliquez sur Paramètres > Modifier la configuration Syslog.
- Pour NSX 6.4.3 et versions antérieures :
- Accédez à Gérer > Paramètres > Configuration.
- Dans la boîte de dialogue Détails, cliquez sur Modifier.
- Pour NSX 6.4.4 et versions ultérieures :
- Configurez les détails du serveur Syslog :
- Serveur : saisissez l'adresse IP ou le nom d'hôte du serveur Syslog (Bindplane).
- Protocole : sélectionnez UDP ou TCP (selon votre configuration Bindplane).
- Port : saisissez le numéro de port (selon votre configuration Bindplane).
- Cliquez sur OK pour enregistrer les paramètres.
Configuration de Syslog pour NSX Manager
- Connectez-vous à l'interface Web NSX Manager avec des identifiants d'administrateur comme suit :
https://<NSX-Manager-IP>
ouhttps://<NSX-Manager-Hostname>
.
- Accédez à Gérer les paramètres de l'appliance> Général.
- Cliquez sur Modifier pour configurer les paramètres du serveur Syslog.
- Saisissez les informations du serveur Syslog :
- Serveur : saisissez l'adresse IP ou le nom d'hôte du serveur Syslog (Bindplane).
- Protocole : sélectionnez UDP ou TCP (selon votre configuration Bindplane).
- Port : saisissez le numéro de port (selon votre configuration Bindplane).
- Cliquez sur OK pour enregistrer les paramètres.
Configuration de Syslog pour le contrôleur NSX
- Connectez-vous au client Web vSphere.
- Accédez à Mise en réseau et sécurité > Installation et mise à niveau > Gestion > Nœuds de contrôleur NSX.
- Sélectionnez le NSX Manager qui gère les nœuds de contrôleur.
- Cliquez sur Modifier les attributs de contrôleur courants.
- Dans la boîte de dialogue Syslog Servers (Serveurs Syslog), cliquez sur Add (Ajouter) :
- Saisissez le nom ou l'adresse IP du serveur Syslog.
- Sélectionnez le protocole UDP (en fonction de votre configuration Bindplane).
- Définissez le niveau de journalisation (par exemple,
INFO
).
- Cliquez sur OK pour enregistrer les paramètres.
Table de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
DST |
event.idm.read_only_udm.target.ip |
L'adresse IP de destination est extraite du champ DST du journal brut. |
ID |
event.idm.read_only_udm.metadata.product_log_id |
L'ID de journal du produit est extrait du champ ID du journal brut. |
MAC |
event.idm.read_only_udm.principal.mac |
L'adresse MAC est extraite du champ MAC du journal brut. |
ModuleName |
event.idm.read_only_udm.metadata.product_event_type |
Le type d'événement produit est extrait du champ ModuleName du journal brut. |
Operation |
event.idm.read_only_udm.principal.resource.attribute.labels.value |
L'opération est extraite du champ Operation du journal brut et ajoutée en tant que libellé avec la clé "Operation". |
PROTO |
event.idm.read_only_udm.network.ip_protocol |
Le protocole IP est extrait du champ PROTO du journal brut. |
RES |
event.idm.read_only_udm.target.resource.name |
Le nom de la ressource cible est extrait du champ RES du journal brut. |
SRC |
event.idm.read_only_udm.principal.ip |
L'adresse IP source est extraite du champ SRC du journal brut. |
SPT |
event.idm.read_only_udm.principal.port |
Le port source est extrait du champ SPT du journal brut. |
UserName |
event.idm.read_only_udm.principal.user.userid |
L'ID utilisateur est extrait du champ UserName du journal brut. |
app_type |
event.idm.read_only_udm.principal.application |
L'application principale est extraite du champ app_type dans le journal brut. |
application |
event.idm.read_only_udm.target.application |
L'application cible est extraite du champ application du journal brut. |
audit |
event.idm.read_only_udm.principal.resource.attribute.labels.value |
La valeur d'audit est extraite du champ audit du journal brut et ajoutée en tant que libellé avec la clé "audit". |
cancelTimeUTC |
event.idm.read_only_udm.principal.resource.attribute.last_update_time |
L'heure de la dernière mise à jour est extraite du champ cancelTimeUTC du journal brut. |
client |
event.idm.read_only_udm.principal.ip ou event.idm.read_only_udm.principal.administrative_domain |
Si le champ client est une adresse IP, il est mappé à l'adresse IP principale. Sinon, il est mappé au domaine administratif principal. |
comp |
event.idm.read_only_udm.principal.resource.attribute.labels.value |
La valeur du composant est extraite du champ comp du journal brut et ajoutée en tant que libellé avec la clé "Comp". |
datetime |
event.idm.read_only_udm.metadata.event_timestamp |
L'horodatage de l'événement est extrait du champ datetime du journal brut. |
description |
event.idm.read_only_udm.metadata.description |
La description est extraite du champ description du journal brut. |
details |
event.idm.read_only_udm.principal.resource.attribute.labels |
Les détails sont extraits du champ details du journal brut et ajoutés en tant que libellés. |
direction |
event.idm.read_only_udm.network.direction |
Si le champ direction est défini sur "OUT", il est mappé sur "OUTBOUND". |
dst_ip |
event.idm.read_only_udm.target.ip |
L'adresse IP de destination est extraite du champ dst_ip du journal brut. |
DPT |
event.idm.read_only_udm.target.port |
Le port de destination est extrait du champ DPT du journal brut. |
errorCode |
event.idm.read_only_udm.security_result.detection_fields |
Le code d'erreur est extrait du champ errorCode du journal brut et ajouté en tant que champ de détection. |
eventType |
event.idm.read_only_udm.metadata.product_event_type |
Le type d'événement produit est extrait du champ eventType du journal brut. |
filepath |
event.idm.read_only_udm.principal.process.file.full_path |
Le chemin d'accès au fichier est extrait du champ filepath du journal brut. |
hostname |
event.idm.read_only_udm.principal.ip |
Le nom d'hôte est extrait du champ hostname du journal brut et, s'il s'agit d'une adresse IP, il est mappé à l'adresse IP principale. |
kv_data |
Différents champs UDM | Les paires clé/valeur de kv_data sont mappées à différents champs UDM en fonction de leurs clés. |
kv_data1 |
Différents champs UDM | Les paires clé/valeur de kv_data1 sont mappées à différents champs UDM en fonction de leurs clés. |
kv_data2 |
Différents champs UDM | Les paires clé/valeur de kv_data2 sont mappées à différents champs UDM en fonction de leurs clés. |
kv_data3 |
Différents champs UDM | Les paires clé/valeur de kv_data3 sont mappées à différents champs UDM en fonction de leurs clés. |
kv_data4 |
Différents champs UDM | Les paires clé/valeur de kv_data4 sont mappées à différents champs UDM en fonction de leurs clés. |
level |
event.idm.read_only_udm.security_result.severity |
Si le champ level est défini sur "INFO", il est mappé sur "INFORMATIONAL". Si la valeur est "ERROR", elle est mappée sur "ERROR". |
managedExternally |
event.idm.read_only_udm.principal.resource.attribute.labels.value |
La valeur managedExternally est extraite du champ managedExternally du journal brut et ajoutée en tant que libellé avec la clé "managedExternally". |
message |
Différents champs UDM | Le champ "Message" est analysé pour extraire différents champs UDM. |
message_data |
event.idm.read_only_udm.principal.resource.attribute.labels.value |
Les données du message sont extraites du champ message_data du journal brut et ajoutées en tant que libellé avec la clé "message". |
network_status |
event.idm.read_only_udm.additional.fields |
L'état du réseau est extrait du champ network_status du journal brut et ajouté en tant que champ supplémentaire avec la clé "Network_Connection_Status". |
new_value |
Différents champs event.idm.read_only_udm.target |
La nouvelle valeur est extraite du champ new_value du journal brut et utilisée pour remplir différents champs cibles. |
node |
event.idm.read_only_udm.principal.resource.attribute.labels.value |
La valeur du nœud est extraite du champ node du journal brut et ajoutée en tant que libellé avec la clé "node". |
old_value |
Différents champs UDM | L'ancienne valeur est extraite du champ old_value du journal brut et utilisée pour remplir différents champs UDM. |
payload |
Différents champs UDM | La charge utile est extraite du champ payload du journal brut et utilisée pour remplir différents champs UDM. |
pid |
event.idm.read_only_udm.target.process.pid |
L'ID du processus est extrait du champ pid du journal brut. |
reqId |
event.idm.read_only_udm.metadata.product_log_id |
L'ID de journal du produit est extrait du champ reqId du journal brut. |
resourceId |
event.idm.read_only_udm.principal.resource.product_object_id |
L'ID de l'objet produit est extrait du champ resourceId du journal brut. |
s2comp |
event.idm.read_only_udm.principal.resource.attribute.labels.value |
La valeur s2comp est extraite du champ s2comp du journal brut et ajoutée en tant que libellé avec la clé "s2comp". |
ses |
event.idm.read_only_udm.network.session_id |
L'ID de session est extrait du champ ses du journal brut. |
src_host |
event.idm.read_only_udm.principal.hostname |
Le nom d'hôte principal est extrait du champ src_host du journal brut. |
src_ip |
event.idm.read_only_udm.principal.ip |
L'adresse IP source est extraite du champ src_ip du journal brut. |
src_ip1 |
event.idm.read_only_udm.principal.ip |
L'adresse IP source est extraite du champ src_ip1 du journal brut. |
src_port |
event.idm.read_only_udm.principal.port |
Le port source est extrait du champ src_port du journal brut. |
startTimeUTC |
event.idm.read_only_udm.principal.resource.attribute.creation_time |
L'heure de création est dérivée du champ startTimeUTC du journal brut. |
subcomp |
event.idm.read_only_udm.network.application_protocol ou event.idm.read_only_udm.principal.resource.attribute.labels.value |
Si le champ subcomp est défini sur "http", il est mappé sur "HTTP". Dans le cas contraire, il est ajouté en tant que libellé avec la clé "Sub Comp". |
tname |
event.idm.read_only_udm.principal.resource.attribute.labels.value |
La valeur tname est extraite du champ tname du journal brut et ajoutée en tant que libellé avec la clé "tname". |
type |
event.idm.read_only_udm.metadata.product_event_type |
Le type d'événement produit est extrait du champ type du journal brut. |
uid |
event.idm.read_only_udm.principal.user.userid |
L'ID utilisateur est extrait du champ uid du journal brut. |
update |
event.idm.read_only_udm.principal.resource.attribute.labels.value |
La valeur de mise à jour est extraite du champ update du journal brut et ajoutée en tant que libellé avec la clé "update". |
user |
event.idm.read_only_udm.principal.user.user_display_name |
Le nom à afficher de l'utilisateur est extrait du champ user du journal brut. |
vmw_cluster |
event.idm.read_only_udm.target.resource.name |
Le nom de la ressource cible est extrait du champ vmw_cluster du journal brut. |
vmw_datacenter |
event.idm.read_only_udm.target.resource.attribute.labels.value |
La valeur vmw_datacenter est extraite du champ vmw_datacenter du journal brut et ajoutée en tant que libellé avec la clé "vmw_datacenter". |
vmw_host |
event.idm.read_only_udm.target.hostname ou event.idm.read_only_udm.target.ip |
Si le champ vmw_host est un nom d'hôte, il est mappé au nom d'hôte cible. Sinon, s'il s'agit d'une adresse IP, elle est mappée à l'adresse IP cible. |
vmw_object_id |
event.idm.read_only_udm.target.resource.product_object_id |
L'ID de l'objet produit est extrait du champ vmw_object_id du journal brut. |
vmw_product |
event.idm.read_only_udm.target.application |
L'application cible est extraite du champ vmw_product du journal brut. |
vmw_vcenter |
event.idm.read_only_udm.target.cloud.availability_zone |
La zone de disponibilité est extraite du champ vmw_vcenter du journal brut. |
vmw_vcenter_id |
event.idm.read_only_udm.target.resource.attribute.labels.value |
La valeur vmw_vcenter_id est extraite du champ vmw_vcenter_id du journal brut et ajoutée en tant que libellé avec la clé "vmw_vcenter_id". |
vmw_vr_ops_appname |
event.idm.read_only_udm.intermediary.application |
L'application intermédiaire est extraite du champ vmw_vr_ops_appname du journal brut. |
vmw_vr_ops_clustername |
event.idm.read_only_udm.intermediary.resource.name |
Le nom de la ressource intermédiaire est extrait du champ vmw_vr_ops_clustername du journal brut. |
vmw_vr_ops_clusterrole |
event.idm.read_only_udm.intermediary.resource.attribute.roles.name |
Le nom du rôle de ressource intermédiaire est extrait du champ vmw_vr_ops_clusterrole du journal brut. |
vmw_vr_ops_hostname |
event.idm.read_only_udm.intermediary.hostname |
Le nom d'hôte intermédiaire est extrait du champ vmw_vr_ops_hostname du journal brut. |
vmw_vr_ops_id |
event.idm.read_only_udm.intermediary.resource.product_object_id |
L'ID de l'objet produit intermédiaire est extrait du champ vmw_vr_ops_id du journal brut. |
vmw_vr_ops_logtype |
event.idm.read_only_udm.intermediary.resource.attribute.labels.value |
La valeur vmw_vr_ops_logtype est extraite du champ vmw_vr_ops_logtype du journal brut et ajoutée en tant que libellé avec la clé "vmw_vr_ops_logtype". |
vmw_vr_ops_nodename |
event.idm.read_only_udm.intermediary.resource.attribute.labels.value |
La valeur vmw_vr_ops_nodename est extraite du champ vmw_vr_ops_nodename du journal brut et ajoutée en tant qu'étiquette avec la clé "vmw_vr_ops_nodename". Déterminée par une série d'instructions conditionnelles basées sur les valeurs d'autres champs. Les valeurs possibles sont USER_LOGIN, NETWORK_CONNECTION, STATUS_UPDATE et GENERIC_EVENT. Codé en dur sur "VMWARE_NSX". Codé en dur sur "VMWARE_NSX". Codé en dur sur "VMWARE_NSX". Définissez la valeur sur "AUTHTYPE_UNSPECIFIED" si Operation est défini sur "LOGIN" et que target_details n'est pas vide, ou si message contient "authentication failure" (échec de l'authentification) et que application n'est pas vide. Définissez-le sur "SSH" si PROTO est "ssh2", ou sur "HTTP" si subcomp est "http". Déterminée par une série d'instructions conditionnelles basées sur les valeurs d'autres champs. Les valeurs possibles sont ALLOW et BLOCK. Définissez sur "VIRTUAL_MACHINE" si vmw_cluster n'est pas vide. |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.