ANSIBLE_AWX
Ce document explique comment ingérer les journaux Ansible AWX dans Google Security Operations à l'aide de Bindplane. L'analyseur extrait les champs des journaux Ansible AWX au format JSON. Il utilise l'analyse JSON pour extraire les champs de journaux, puis mappe ces valeurs au modèle de données unifié (UDM). Il définit également les 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 un hôte Linux avec
systemd
. - 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é à 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 à 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 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
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 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 le guide d'installation.
Configurer l'agent Bindplane pour ingérer Syslog et l'envoyer à Google SecOps
- Accédez au fichier de configuration :
- Trouvez le fichier
config.yaml
. Il se trouve généralement dans le répertoire/opt/observiq-otel-collector/
sous Linux ouC:Program FilesobservIQ OpenTelemetry Collector
sous Windows. - Ouvrez le fichier à l'aide d'un éditeur de texte (par exemple,
nano
,vi
ou le Bloc-notes).
- Trouvez le fichier
Modifiez le fichier
config.yaml
comme 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_ID
par le numéro client réel. - Mettez à jour
/path/to/ingestion-authentication-file.json
avec le chemin d'accès où le fichier d'authentification a été enregistré à l'étape 1.
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-collector
Pour 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 d'administration Ansible AWX.
- Accédez à Paramètres dans la barre de navigation.
- Sélectionnez Paramètres de journalisation dans les options Système.
- Fournissez les informations de configuration suivantes :
- Agrégateur de journaux : saisissez l'adresse IP de l'agent Bindplane.
- Port de l'agrégateur de journaux : saisissez le numéro de port de l'agent Bindplane (par exemple,
514
). - Type d'agrégateur de journaux : sélectionnez Autre dans la liste.
- Nom d'utilisateur de l'agrégateur de journaux : laissez ce champ vide (inutile pour syslog).
- Mot de passe/jeton de l'agrégateur de journaux : laissez ce champ vide (non requis pour syslog).
- Protocole de l'agrégateur de journaux : sélectionnez UDP (recommandé pour Syslog).
- Seuil du niveau de l'agrégateur de journalisation : sélectionnez Info ou le niveau de journalisation de votre choix.
- Activer la journalisation externe : cliquez sur le bouton bascule pour activer.
- Enregistreurs pour envoyer des données à l'agrégateur de journaux : sélectionnez les types de journaux concernés :
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 informations système
- Enregistrer les faits de suivi du système individuellement : DÉSACTIVÉ (par défaut).
- Cliquez sur Enregistrer pour appliquer les paramètres.
- Facultatif : Cliquez sur 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 issue 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 issues du journal brut. |
host.mac |
target.mac |
Valeurs de host.mac issues 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éfinissez 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 issue du journal brut, utilisée si event1_data.host n'est pas présent. |
input.type |
network.ip_protocol |
Définie sur "TCP" si input.type est "tcp". |
level |
security_result.severity |
Mappé en fonction de la valeur de level : "DEBUG", "INFO" et "AUDIT" correspondent à "INFORMATIONAL", "ERROR" correspond à "ERROR" et "WARNING" correspond à "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 issue 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 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 existent ; "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" selon le champ mappé. Codé en dur sur "VIRTUAL_MACHINE". Codé en dur sur "parent_uuid", "task" ou "task_uuid" selon le champ mappé. Codé en dur sur "codename" ou "os_name" selon le champ mappé. |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.