Ansible AWX-Logs erfassen
Übersicht
Mit diesem Parser werden JSON-formatierte Logdaten aus Ansible AWX extrahiert und in das einheitliche Datenmodell (Unified Data Model, UDM) konvertiert. Es verarbeitet verschiedene Logformate, extrahiert relevante Felder wie Zeitstempel, IP-Adressen, Hostinformationen und Ereignisdetails und ordnet sie den entsprechenden UDM-Feldern zu. Außerdem werden bestimmte Grenzfälle behandelt und die Daten mit Labels und Metadaten angereichert.
Hinweise
Prüfen Sie, ob die folgenden Voraussetzungen erfüllt sind:
- Google SecOps-Instanz.
- Privilegierter Zugriff auf Ansible AWX.
Feeds einrichten
Es gibt zwei verschiedene Einstiegspunkte zum Einrichten von Feeds in der Google SecOps-Plattform:
- SIEM-Einstellungen > Feeds
- Content Hub> Content-Pakete
Feeds über „SIEM-Einstellungen“ > „Feeds“ einrichten
So konfigurieren Sie einen Feed:
- Rufen Sie die SIEM-Einstellungen > Feeds auf.
- Klicken Sie auf Neuen Feed hinzufügen.
- Klicken Sie auf der nächsten Seite auf Einen einzelnen Feed konfigurieren.
- Geben Sie im Feld Feed name (Feedname) einen Namen für den Feed ein, z. B. Ansible AWX Logs (Ansible AWX-Protokolle).
- Wählen Sie Webhook als Quelltyp aus.
- Wählen Sie Ansible AWX als Log type (Protokolltyp) aus.
- Klicken Sie auf Weiter.
- Optional: Geben Sie Werte für die folgenden Eingabeparameter an:
- Trennzeichen für Aufteilung: Das Trennzeichen, das zum Trennen von Logzeilen verwendet wird, z. B.
\n
.
- Trennzeichen für Aufteilung: Das Trennzeichen, das zum Trennen von Logzeilen verwendet wird, z. B.
- Klicken Sie auf Weiter.
- Prüfen Sie die Feedkonfiguration auf dem Bildschirm Finalize (Abschließen) und klicken Sie dann auf Submit (Senden).
- Klicken Sie auf Geheimen Schlüssel generieren, um einen geheimen Schlüssel zur Authentifizierung dieses Feeds zu generieren.
- Kopieren Sie den geheimen Schlüssel und speichern Sie ihn. Sie können diesen geheimen Schlüssel nicht noch einmal aufrufen. Bei Bedarf können Sie einen neuen geheimen Schlüssel generieren. Dadurch wird der vorherige geheime Schlüssel jedoch ungültig.
- Kopieren Sie auf dem Tab Details die Feed-Endpunkt-URL aus dem Feld Endpunktinformationen. Sie müssen diese Endpunkt-URL in Ihrer Clientanwendung angeben.
- Klicken Sie auf Fertig.
Feeds über den Content Hub einrichten
Geben Sie Werte für die folgenden Felder an:
- Trennzeichen für Aufteilung: Das Trennzeichen, das zum Trennen von Logzeilen verwendet wird, z. B.
\n
.
Erweiterte Optionen
- Feedname: Ein vorausgefüllter Wert, der den Feed identifiziert.
- Quelltyp: Methode, die zum Erfassen von Logs in Google SecOps verwendet wird.
- Asset-Namespace: Der Namespace, der dem Feed zugeordnet ist.
Aufnahmelabels: Labels, die auf alle Ereignisse aus diesem Feed angewendet werden.
Klicken Sie auf Geheimen Schlüssel generieren, um einen geheimen Schlüssel zur Authentifizierung dieses Feeds zu generieren.
Kopieren Sie den geheimen Schlüssel und speichern Sie ihn. Sie können diesen geheimen Schlüssel nicht noch einmal aufrufen. Bei Bedarf können Sie einen neuen geheimen Schlüssel generieren. Dadurch wird der vorherige geheime Schlüssel jedoch ungültig.
Kopieren Sie auf dem Tab Details die Feed-Endpunkt-URL aus dem Feld Endpunktinformationen. Sie müssen diese Endpunkt-URL in Ihrer Clientanwendung angeben.
API-Schlüssel für den Webhook-Feed erstellen
Rufen Sie die Google Cloud Console > Anmeldedaten auf.
Klicken Sie auf Anmeldedaten erstellen und wählen Sie anschließend API-Schlüssel aus.
Schränken Sie den API-Schlüsselzugriff auf die Google Security Operations API ein.
Endpunkt-URL angeben
- Geben Sie in Ihrer Clientanwendung die HTTPS-Endpunkt-URL an, die im Webhook-Feed bereitgestellt wird.
Aktivieren Sie die Authentifizierung, indem Sie den API-Schlüssel und den geheimen Schlüssel als Teil des benutzerdefinierten Headers im folgenden Format angeben:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
Empfehlung: Geben Sie den API-Schlüssel als Header an, anstatt ihn in der URL anzugeben. Wenn Ihr Webhook-Client keine benutzerdefinierten Headern unterstützt, können Sie den API-Schlüssel und den geheimen Schlüssel mit Suchparametern im folgenden Format angeben:
ENDPOINT_URL?key=API_KEY&secret=SECRET
Ersetzen Sie Folgendes:
ENDPOINT_URL
: Die URL des Feed-Endpunkts.API_KEY
: Der API-Schlüssel für die Authentifizierung bei Google Security Operations.SECRET
: Der geheime Schlüssel, den Sie zur Authentifizierung des Feeds generiert haben.
Webhook in Ansible AWX konfigurieren
- Melden Sie sich in Ihrer AWX-Instanz an.
- Rufen Sie den Bereich Benachrichtigungen unter Verwaltung auf.
- Klicken Sie auf Hinzufügen.
Webhook-Einstellungen konfigurieren:
- Name: Geben Sie einen aussagekräftigen Namen für den Webhook an, z. B. Google SecOps Webhook.
- Typ: Wählen Sie in der Liste Webhook aus.
- Ziel-URL: Geben Sie die Google SecOps API-Endpunkt-URL ein.
- HTTP-Methode: Wählen Sie POST aus.
Optional: HTTP-Header: Fügen Sie alle erforderlichen Header für die Authentifizierung oder den Inhaltstyp hinzu. Möglicherweise müssen Sie beispielsweise einen
Authorization
-Header mit einem Inhabertoken einfügen. Spezifische Header-Anforderungen finden Sie in der Google SecOps-Dokumentation.Klicken Sie auf Speichern, um den Webhook zu erstellen.
Gehen Sie unter Ressourcen zu Projekte.
Wählen Sie die Projekte aus, mit denen Sie den Webhook verknüpfen möchten.
Rufen Sie im ausgewählten Projekt den Tab Benachrichtigungen auf.
Wählen Sie aus, welche Trigger für die zuvor erstellte Webhook-Benachrichtigung AKTIVIERT werden sollen: Start | Erfolg | Fehler.
Die Benachrichtigungen gelten jetzt für alle mit dem Projekt verknüpften Vorlagen. Sie können sie manuell deaktivieren, indem Sie in jeder Vorlage zum Feld Benachrichtigungen wechseln.
UDM-Zuordnungstabelle
Logfeld | UDM-Zuordnung | Logik |
---|---|---|
agent.ephemeral_id |
observer.labels.value |
Der Wert von agent.ephemeral_id aus dem Rohlog. |
agent.hostname |
observer.hostname |
Der Wert von agent.hostname aus dem Rohlog. |
agent.id |
observer.asset_id |
Verkettung von „filebeat:“ und dem Wert von agent.id aus dem Rohlog. |
agent.name |
observer.user.userid |
Der Wert von agent.name aus dem Rohlog. |
agent.type |
observer.application |
Der Wert von agent.type aus dem Rohlog. |
agent.version |
observer.platform_version |
Der Wert von agent.version aus dem Rohlog. |
cloud.availability_zone |
principal.resource.attribute.labels.value |
Der Wert von cloud.availability_zone aus dem Rohlog. |
cloud.instance.id |
principal.resource.product_object_id |
Der Wert von cloud.instance.id aus dem Rohlog. |
cloud.instance.name |
principal.resource.name |
Der Wert von cloud.instance.name aus dem Rohlog. |
cloud.machine.type |
principal.resource.attribute.labels.value |
Der Wert von cloud.machine.type aus dem Rohlog. |
cloud.provider |
principal.resource.attribute.labels.value |
Der Wert von cloud.provider aus dem Rohlog. |
event1 |
metadata.description |
Der Wert von event1 aus dem Rohlog. Wenn event1 nicht vorhanden ist, wird der Wert von message verwendet. |
event1_data.host |
principal.hostname |
Der Wert von event1_data.host aus dem Rohlog. Wird als Fallback verwendet, wenn host_name und host nicht vorhanden sind. |
event1_data.remote_addr |
principal.ip |
Die IP-Adresse, die aus event1_data.remote_addr mit einem Grok-Muster extrahiert wurde. |
event1_data.task |
security_result.detection_fields.value |
Der Wert von event1_data.task aus dem Rohlog. |
event1_data.task_path |
principal.process.file.full_path |
Der Wert von event1_data.task_path aus dem Rohlog. |
event1_data.task_uuid |
security_result.detection_fields.value |
Der Wert von event1_data.task_uuid aus dem Rohlog. |
event1_data.uuid |
metadata.product_log_id |
Der Wert von event1_data.uuid aus dem Rohlog. |
event1_display |
security_result.description |
Der Wert von event1_display aus dem Rohlog. |
host |
principal.hostname |
Der Wert von host aus dem Rohlog. Wird als Fallback verwendet, wenn host_name nicht vorhanden ist. Wenn es sich um eine Zahl handelt, wird sie in einen String konvertiert. |
host.architecture |
target.asset.hardware.cpu_platform |
Der Wert von host.architecture aus dem Rohlog. |
host.fqdn |
target.administrative_domain |
Der Wert von host.fqdn aus dem Rohlog. |
host.hostname |
target.hostname |
Der Wert von host.hostname aus dem Rohlog. |
host.id |
target.asset.asset_id |
„Host-ID: “ gefolgt vom Wert von host.id aus dem Rohlog. |
host.ip |
target.asset.ip |
Die Werte des host.ip -Arrays aus dem Rohlog. |
host.mac |
target.mac |
Die Werte des host.mac -Arrays aus dem Rohlog. |
host.os.codename |
target.asset.attribute.labels.value |
Der Wert von host.os.codename aus dem Rohlog. |
host.os.kernel |
target.platform_patch_level |
Der Wert von host.os.kernel aus dem Rohlog. |
host.os.name |
target.asset.attribute.labels.value |
Der Wert von host.os.name aus dem Rohlog. |
host.os.platform |
target.platform |
Wenn der Wert von host.os.platform „debian“ ist, wird das UDM-Feld auf „LINUX“ gesetzt. |
host.os.version |
target.platform_version |
Der Wert von host.os.version aus dem Rohlog. |
host_name |
principal.hostname |
Der Wert von host_name aus dem Rohlog. |
input.type |
network.ip_protocol |
Wenn der Wert von input.type „tcp“ ist, wird das UDM-Feld auf „TCP“ gesetzt. |
level |
security_result.severity |
Basierend auf dem Wert von level : „DEBUG“, „INFO“ und „AUDIT“ werden „INFORMATIONAL“ zugeordnet, „ERROR“ wird „ERROR“ zugeordnet und „WARNING“ wird „MEDIUM“ zugeordnet. |
level |
security_result.severity_details |
Der Wert von level aus dem Rohlog. |
log.source.address |
principal.ip |
Die IP-Adresse, die aus log.source.address mit einem Grok-Muster extrahiert wurde. |
log.source.address |
principal.port |
Der Port, der mit einem Grok-Muster aus log.source.address extrahiert wurde. |
logger_name |
intermediary.application |
Der Wert von logger_name aus dem Rohlog. |
message |
metadata.description |
Der Wert von message aus dem Rohlog. Wird als Fallback verwendet, wenn event1 nicht vorhanden ist. |
metadata.event_type |
metadata.event_type |
Wird von der Parserlogik anhand des Vorhandenseins bestimmter Felder bestimmt. „NETWORK_CONNECTION“, wenn log.source.address und host.ip vorhanden sind. „STATUS_UPDATE“, wenn principal_hostname oder event1_data.remote_addr vorhanden sind. andernfalls „GENERIC_EVENT“. |
metadata.log_type |
metadata.log_type |
Fest codiert auf „ANSIBLE_AWX“. |
metadata.product_name |
metadata.product_name |
Fest codiert auf „ANSIBLE_AWX“. |
metadata.vendor_name |
metadata.vendor_name |
Fest codiert auf „ANSIBLE_AWX“. |
parent_uuid |
security_result.detection_fields.value |
Der Wert von parent_uuid aus dem Rohlog. |
principal.resource.resource_type |
principal.resource.resource_type |
Wenn cloud.instance.name vorhanden ist, ist der Wert fest auf „VIRTUAL_MACHINE“ codiert. |
observer.labels.key |
observer.labels.key |
Fest codiert auf „ephemeral_id“. |
principal.resource.attribute.labels.key |
principal.resource.attribute.labels.key |
Je nach Feld, das zugeordnet wird, fest codiert auf „machine_type“, „provider“ oder „availability_zone“. |
security_result.detection_fields.key |
security_result.detection_fields.key |
Je nach zugeordnetem Feld fest codiert auf „parent_uuid“, „task“ oder „task_uuid“. |
target.asset.attribute.labels.key |
target.asset.attribute.labels.key |
Je nach Feldzuordnung fest auf „codename“ oder „os_name“ festgelegt. |
timestamp |
metadata.event_timestamp |
Der Wert von timestamp aus dem Rohlog, der geparst und in einen Zeitstempel konvertiert wurde. |
timestamp |
timestamp |
Der Wert von timestamp aus dem Rohlog, der geparst und in einen Zeitstempel konvertiert wurde. |
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten