Collecter les journaux Ansible AWX

Compatible avec:

Présentation

Cet analyseur extrait les données de journal au format JSON d'Ansible AWX et les convertit en Unified Data Model (UDM). Il gère différents formats de journaux, extrait les champs pertinents tels que les codes temporels, les adresses IP, les informations sur l'hôte et les détails des événements, et les met en correspondance avec les champs UDM correspondants. Il gère également des cas particuliers spécifiques et enrichit les données avec des libellés et des métadonnées.

Avant de commencer

  • Assurez-vous de disposer d'une instance Google SecOps.
  • Assurez-vous de disposer d'un accès privilégié à Ansible AWX.

Configurer un flux dans Google SecOps pour ingérer les journaux Ansible AWX

  1. Accédez à Paramètres du SIEM > Flux.
  2. Cliquez sur Ajouter.
  3. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux Ansible AWX).
  4. Sélectionnez Webhook comme type de source.
  5. Sélectionnez Ansible AWX comme Type de journal.
  6. Cliquez sur Suivant.
  7. Facultatif: spécifiez des valeurs pour les paramètres d'entrée suivants :
    • Délimiteur de fractionnement: délimiteur utilisé pour séparer les lignes de journal, par exemple \n.
    • Espace de noms des éléments: espace de noms des éléments.
    • Libellés d'ingestion: libellé appliqué aux événements de ce flux.
  8. Cliquez sur Suivant.
  9. Vérifiez la configuration du flux dans l'écran Finaliser, puis cliquez sur Envoyer.
  10. Cliquez sur Générer une clé secrète pour générer une clé secrète permettant d'authentifier ce flux.
  11. Copiez et stockez la clé secrète. Vous ne pourrez plus afficher cette clé secrète. Si nécessaire, vous pouvez générer une nouvelle clé secrète, mais cette action rend l'ancienne clé secrète obsolète.
  12. Dans l'onglet Détails, copiez l'URL du point de terminaison du flux dans le champ Informations sur le point de terminaison. Vous devez spécifier cette URL de point de terminaison dans votre application cliente.
  13. Cliquez sur OK.

Créer une clé API pour le flux webhook

  1. Accédez à la console Google Cloud > Identifiants.

    Accéder à "Identifiants"

  2. Cliquez sur Créer des identifiants, puis sélectionnez Clé API.

  3. Limitez l'accès de la clé API à l'API Google Security Operations.

Spécifier l'URL du point de terminaison

  1. Dans votre application cliente, spécifiez l'URL du point de terminaison HTTPS fournie dans le flux de webhook.
  2. Activez l'authentification en spécifiant la clé API et la clé secrète dans l'en-tête personnalisé au format suivant:

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    Recommandation: Spécifiez la clé API en tant qu'en-tête plutôt que dans l'URL. Si votre client webhook n'est pas compatible avec les en-têtes personnalisés, vous pouvez spécifier la clé API et la clé secrète à l'aide de paramètres de requête au format suivant:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

Remplacez les éléments suivants :

  • ENDPOINT_URL: URL du point de terminaison du flux.
  • API_KEY: clé API permettant de s'authentifier auprès de Google Security Operations.
  • SECRET: clé secrète que vous avez générée pour authentifier le flux.

Configurer un webhook dans Ansible AWX

  1. Connectez-vous à votre instance AWX.
  2. Accédez à la section Notifications sous Administration.
  3. Cliquez sur Ajouter.
  4. Configurez les paramètres du webhook:

    • Nom: indiquez un nom descriptif pour le webhook (par exemple, Webhook Google SecOps).
    • Type: sélectionnez Webhook dans la liste.
    • URL cible: saisissez l'URL du point de terminaison de l'API Google SecOps.
    • Méthode HTTP: sélectionnez POST.

    Facultatif: En-têtes HTTP: ajoutez les en-têtes nécessaires pour l'authentification ou le type de contenu. Par exemple, vous devrez peut-être inclure un en-tête Authorization avec un jeton de support. Pour connaître les exigences spécifiques concernant les en-têtes, consultez la documentation Google SecOps.

  5. Cliquez sur Enregistrer pour créer le webhook.

  6. Accédez à Projects (Projets), sous Resources (Ressources).

  7. Sélectionnez le ou les projets auxquels vous souhaitez associer le webhook.

  8. Dans le projet sélectionné, accédez à l'onglet Notifications.

  9. Sélectionnez les déclencheurs à activer pour la notification Webhook créée précédemment : Début | Succès | Échec.

Les notifications s'appliqueront désormais à tous les modèles associés au projet. Vous pouvez les désactiver manuellement en accédant au champ Notifications de chaque modèle.

Tableau de mappage UDM

Champ de journal Mappage UDM Logique
agent.ephemeral_id observer.labels.value Valeur de agent.ephemeral_id dans le journal brut.
agent.hostname observer.hostname Valeur de agent.hostname dans le 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 dans le journal brut.
agent.type observer.application Valeur de agent.type dans le journal brut.
agent.version observer.platform_version Valeur de agent.version dans le journal brut.
cloud.availability_zone principal.resource.attribute.labels.value Valeur de cloud.availability_zone dans le journal brut.
cloud.instance.id principal.resource.product_object_id Valeur de cloud.instance.id dans le journal brut.
cloud.instance.name principal.resource.name Valeur de cloud.instance.name dans le journal brut.
cloud.machine.type principal.resource.attribute.labels.value Valeur de cloud.machine.type dans le journal brut.
cloud.provider principal.resource.attribute.labels.value Valeur de cloud.provider dans le journal brut.
event1 metadata.description Valeur de event1 dans le 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 dans le journal brut. Utilisé en remplacement si host_name et host ne sont pas présents.
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 dans le journal brut.
event1_data.task_path principal.process.file.full_path Valeur de event1_data.task_path dans le journal brut.
event1_data.task_uuid security_result.detection_fields.value Valeur de event1_data.task_uuid dans le journal brut.
event1_data.uuid metadata.product_log_id Valeur de event1_data.uuid dans le journal brut.
event1_display security_result.description Valeur de event1_display dans le journal brut.
host principal.hostname Valeur de host dans le journal brut. Utilisé en remplacement si host_name n'est pas présent. S'il s'agit d'un nombre, il est converti en chaîne.
host.architecture target.asset.hardware.cpu_platform Valeur de host.architecture dans le journal brut.
host.fqdn target.administrative_domain Valeur de host.fqdn dans le journal brut.
host.hostname target.hostname Valeur de host.hostname dans le journal brut.
host.id target.asset.asset_id "ID hôte: " concaténé avec la valeur de host.id à partir du journal brut.
host.ip target.asset.ip Valeurs du tableau host.ip à partir du journal brut.
host.mac target.mac Valeurs du tableau host.mac à partir du journal brut.
host.os.codename target.asset.attribute.labels.value Valeur de host.os.codename dans le journal brut.
host.os.kernel target.platform_patch_level Valeur de host.os.kernel dans le journal brut.
host.os.name target.asset.attribute.labels.value Valeur de host.os.name dans le journal brut.
host.os.platform target.platform Si la valeur de host.os.platform est "debian", le champ UDM est défini sur "LINUX".
host.os.version target.platform_version Valeur de host.os.version dans le journal brut.
host_name principal.hostname Valeur de host_name dans le journal brut.
input.type network.ip_protocol Si la valeur de input.type est "tcp", le champ UDM est défini sur "TCP".
level security_result.severity 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 dans le 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 dans le journal brut.
message metadata.description Valeur de message dans le journal brut. Utilisé en remplacement si event1 n'est pas présent.
metadata.event_type metadata.event_type Déterminé par la logique de l'analyseur en fonction de la présence de certains champs. "NETWORK_CONNECTION" si log.source.address et host.ip sont présents. "STATUS_UPDATE" si principal_hostname ou event1_data.remote_addr sont présents. "GENERIC_EVENT" dans le cas contraire.
metadata.log_type metadata.log_type Code codé en dur sur "ANSIBLE_AWX".
metadata.product_name metadata.product_name Code codé en dur sur "ANSIBLE_AWX".
metadata.vendor_name metadata.vendor_name Code codé en dur sur "ANSIBLE_AWX".
parent_uuid security_result.detection_fields.value Valeur de parent_uuid dans le journal brut.
principal.resource.resource_type principal.resource.resource_type Codé en dur sur "VIRTUAL_MACHINE" si cloud.instance.name est présent.
observer.labels.key observer.labels.key Code en dur sur "ephemeral_id".
principal.resource.attribute.labels.key principal.resource.attribute.labels.key Code codé en dur sur "machine_type", "provider" ou "availability_zone", selon le champ mappé.
security_result.detection_fields.key security_result.detection_fields.key Coded en dur sur "parent_uuid", "task" ou "task_uuid", en fonction du champ mappé.
target.asset.attribute.labels.key target.asset.attribute.labels.key Code codé en dur sur "codename" ou "os_name", en fonction du champ mappé.
timestamp metadata.event_timestamp Valeur de timestamp à partir du journal brut, analysée et convertie en code temporel.
timestamp timestamp Valeur de timestamp à partir du journal brut, analysée et convertie en code temporel.

Modifications

2022-11-09

  • Analyseur nouvellement créé.