ANSIBLE_AWX
Ce document explique comment ingérer des journaux Ansible AWX dans Google Security Operations à l'aide de Bindplane. L'analyseur extrait des champs à partir des journaux Ansible AWX au format JSON. Il utilise l'analyse JSON pour extraire les champs de journal, puis mappe ces valeurs au modèle de données unifié (UDM). Il définit également des valeurs de métadonnées par défaut pour la source et le type d'événement.
Avant de commencer
Assurez-vous de remplir les conditions suivantes :
- Une instance Google SecOps.
- Un hôte Windows 2016 ou version ultérieure, ou Linux avec
systemd. - Si vous exécutez l'application derrière un proxy, assurez-vous que les ports de pare-feu sont ouverts conformément aux exigences de l'agent Bindplane.
- Un accès privilégié à la console de gestion ou à l'appliance Ansible AWX avec des autorisations d'administrateur.
Obtenir le fichier d'authentification d'ingestion Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à SIEM Settings > Collection Agents (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 où Bindplane sera installé.
Obtenir l'ID client Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres SIEM > Profil.
- Copiez l'ID client dans la section Organization Details (Informations sur l'organisation) et enregistrez-le.
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 fenêtres
- Ouvrez l'invite de commande 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 des 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 le guide d'installation.
Configurer l'agent Bindplane pour ingérer Syslog et l'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/opt/observiq-otel-collector/sous Linux ou dans le répertoireC:Program FilesobservIQ OpenTelemetry Collectorsous Windows. - Ouvrez le fichier à l'aide d'un éditeur de texte (par exemple,
nano,viou Bloc-notes).
- Recherchez le fichier
Modifiez le fichier
config.yamlcomme suit :receivers: udplog: # Using high port to avoid requiring root privileges listen_address: "0.0.0.0:514" exporters: chronicle/awx: endpoint: malachiteingestion-pa.googleapis.com creds_file_path: '/path/to/ingestion-authentication-file.json' customer_id: YOUR_CUSTOMER_ID log_type: 'ANSIBLE_AWX' raw_log_field: body service: pipelines: logs/awx: receivers: - udplog exporters: - chronicle/awx- Remplacez le port et l'adresse IP selon les besoins de votre infrastructure.
- Remplacez
YOUR_CUSTOMER_IDpar l'ID client réel. - Mettez à jour
/path/to/ingestion-authentication-file.jsonavec le chemin d'accès où le fichier d'authentification a été enregistré à l'étape 1.
Redémarrer 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-collectorPour redémarrer l'agent Bindplane sous Windows, vous pouvez utiliser la console Services ou saisir la commande suivante :
sc stop observiq-otel-collector && sc start observiq-otel-collector
Configurer la journalisation externe sur Ansible AWX
- Connectez-vous à la console de gestion Ansible AWX.
- Dans la barre de navigation, accédez à Settings (Paramètres).
- Sélectionnez Logging settings (Paramètres de journalisation) dans les options System (Système).
- Fournissez les informations de configuration suivantes :
- Logging Aggregator (Agrégateur de journalisation) : saisissez l'adresse IP de l'agent Bindplane.
- Logging Aggregator Port (Port de l'agrégateur de journalisation) : saisissez le numéro de port de l'agent Bindplane (par exemple,
514). - Logging Aggregator Type (Type d'agrégateur de journalisation) : sélectionnez Other (Autre) dans la liste.
- Logging Aggregator Username (Nom d'utilisateur de l'agrégateur de journalisation) : laissez ce champ vide (non requis pour Syslog).
- Logging Aggregator Password/Token (Mot de passe/jeton de l'agrégateur de journalisation) : laissez ce champ vide (non requis pour Syslog).
- Logging Aggregator Protocol (Protocole de l'agrégateur de journalisation) : sélectionnez UDP (recommandé pour Syslog).
- Logging Aggregator Level Threshold (Seuil de niveau de l'agrégateur de journalisation) : sélectionnez Info ou le niveau de journalisation de votre choix.
- Enable External Logging (Activer la journalisation externe) : cliquez sur le bouton ON (Activé).
- Loggers to Send Data to the Log Aggregator (Enregistreurs pour envoyer des données à l'agrégateur de journaux) : sélectionnez les types de journaux pertinents :
awx: journaux de serveur génériquesactivity_stream: enregistrement des modifications apportées aux objets AWXjob_events: données du module de rappel Ansiblesystem_tracking: données de configuration et faits système
- Log System Tracking Facts Individually (Enregistrer les faits de suivi du système individuellement) : désactivez cette option en cliquant sur le bouton OFF (Désactivé) (par défaut).
- Cliquez sur Save (Enregistrer) pour appliquer les paramètres.
- Facultatif : cliquez sur Test (Tester) pour vérifier la connexion à l'agent Bindplane.
Table de mappage UDM
| Champ du journal | Mappage UDM | Logique |
|---|---|---|
agent.ephemeral_id |
observer.labels.value |
Valeur de agent.ephemeral_id à partir du journal brut. |
agent.hostname |
observer.hostname |
Valeur de agent.hostname à partir du journal brut. |
agent.id |
observer.asset_id |
Concaténation de "filebeat:" et de la valeur de agent.id à partir du journal brut. |
agent.name |
observer.user.userid |
Valeur de agent.name à partir du journal brut. |
agent.type |
observer.application |
Valeur de agent.type à partir du journal brut. |
agent.version |
observer.platform_version |
Valeur de agent.version à partir du journal brut. |
cloud.availability_zone |
principal.resource.attribute.labels.value |
Valeur de cloud.availability_zone à partir du journal brut. |
cloud.instance.id |
principal.resource.product_object_id |
Valeur de cloud.instance.id à partir du journal brut. |
cloud.instance.name |
principal.resource.name |
Valeur de cloud.instance.name à partir du journal brut. |
cloud.machine.type |
principal.resource.attribute.labels.value |
Valeur de cloud.machine.type à partir du journal brut. |
cloud.provider |
principal.resource.attribute.labels.value |
Valeur de cloud.provider à partir du journal brut. |
event1 |
metadata.description |
Valeur de event1 à partir du journal brut. Si event1 n'est pas présent, la valeur de message est utilisée. |
event1_data.host |
principal.hostname |
Valeur de event1_data.host à partir du journal brut. |
event1_data.remote_addr |
principal.ip |
Adresse IP extraite de event1_data.remote_addr à l'aide d'un modèle grok. |
event1_data.task |
security_result.detection_fields.value |
Valeur de event1_data.task à partir du journal brut. |
event1_data.task_path |
principal.process.file.full_path |
Valeur de event1_data.task_path à partir du journal brut. |
event1_data.task_uuid |
security_result.detection_fields.value |
Valeur de event1_data.task_uuid à partir du journal brut. |
event1_data.uuid |
metadata.product_log_id |
Valeur de event1_data.uuid à partir du journal brut. |
event1_display |
security_result.description |
Valeur de event1_display à partir du journal brut. |
host |
principal.hostname |
Valeur de host à partir du journal brut, utilisée si event1_data.host et host_name ne sont pas présents. |
host.architecture |
target.asset.hardware.cpu_platform |
Valeur de host.architecture à partir du journal brut. |
host.fqdn |
target.administrative_domain |
Valeur de host.fqdn à partir du journal brut. |
host.hostname |
target.hostname |
Valeur de host.hostname à partir du journal brut. |
host.id |
target.asset.asset_id |
Concaténation de "Host Id: " et de la valeur de host.id à partir du journal brut. |
host.ip |
target.asset.ip |
Valeurs de host.ip à partir du journal brut. |
host.mac |
target.mac |
Valeurs de host.mac à partir du journal brut. |
host.os.codename |
target.asset.attribute.labels.value |
Valeur de host.os.codename à partir du journal brut. |
host.os.kernel |
target.platform_patch_level |
Valeur de host.os.kernel à partir du journal brut. |
host.os.name |
target.asset.attribute.labels.value |
Valeur de host.os.name à partir du journal brut. |
host.os.platform |
target.platform |
Défini sur "LINUX" si host.os.platform est "debian". |
host.os.version |
target.platform_version |
Valeur de host.os.version à partir du journal brut. |
host_name |
principal.hostname |
Valeur de host_name à partir du journal brut, utilisée si event1_data.host n'est pas présent. |
input.type |
network.ip_protocol |
Défini sur "TCP" si input.type est "tcp". |
level |
security_result.severity |
Mappé en fonction de la valeur de level : "DEBUG", "INFO" et "AUDIT" sont mappés sur "INFORMATIONAL" ; "ERROR" est mappé sur "ERROR" ; "WARNING" est mappé sur "MEDIUM". |
level |
security_result.severity_details |
Valeur de level à partir du journal brut. |
log.source.address |
principal.ip |
Adresse IP extraite de log.source.address à l'aide d'un modèle grok. |
log.source.address |
principal.port |
Port extrait de log.source.address à l'aide d'un modèle grok. |
logger_name |
intermediary.application |
Valeur de logger_name à partir du journal brut. |
message |
metadata.description |
Valeur de message à partir du journal brut, utilisée comme solution de repli si event1 n'est pas présent. |
parent_uuid |
security_result.detection_fields.value |
Valeur de parent_uuid à partir du journal brut. |
timestamp |
metadata.event_timestamp |
Valeur de timestamp à partir du journal brut, analysée à l'aide du filtre de date. Déterminé par la logique : "NETWORK_CONNECTION" si log.source.address et host.ip existent dans le JSON ; "STATUS_UPDATE" si principal_hostname ou event1_data.remote_addr existe ; "GENERIC_EVENT" sinon. Codé en dur sur "ANSIBLE_AWX". Codé en dur sur "ANSIBLE_AWX". Codé en dur sur "ANSIBLE_AWX". Codé en dur sur "ephemeral_id". Codé en dur sur "machine_type", "provider" ou "availability_zone" en fonction du champ mappé. Codé en dur sur "VIRTUAL_MACHINE". Codé en dur sur "parent_uuid", "task" ou "task_uuid" en fonction du champ mappé. Codé en dur sur "codename" ou "os_name" en fonction du champ mappé. |
Vous avez encore besoin d'aide ? Obtenez des réponses auprès des membres de la communauté et des professionnels Google SecOps.