Ansible AWX-Protokolle erfassen
Übersicht
Dieser Parser extrahiert JSON-formatierte Protokolldaten aus Ansible AWX und konvertiert sie in das Unified Data Model (UDM). Er unterstützt verschiedene Protokollformate, extrahiert relevante Felder wie Zeitstempel, IP-Adressen, Hostinformationen und Ereignisdetails und ordnet sie den entsprechenden UDM-Feldern zu. Außerdem werden bestimmte Grenzfälle berücksichtigt und die Daten mit Labels und Metadaten angereichert.
Hinweise
- Sie benötigen eine Google SecOps-Instanz.
- Sie benötigen erhöhte Zugriffsrechte für Ansible AWX.
Feed in Google SecOps für die Aufnahme von Ansible AWX-Logs konfigurieren
- Gehen Sie zu SIEM-Einstellungen > Feeds.
- Klicken Sie auf Neu hinzufügen.
- Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B. Ansible AWX-Protokolle.
- Wählen Sie als Quelltyp Webhook aus.
- Wählen Sie Ansible AWX als Protokolltyp aus.
- Klicken Sie auf Weiter.
- Optional: Geben Sie Werte für die folgenden Eingabeparameter an:
- Trennzeichen für die Aufteilung: Das Trennzeichen, mit dem Logzeilen getrennt werden, z. B.
\n
. - Asset-Namespace: der Asset-Namespace.
- Aufnahmelabels: Das Label, das auf die Ereignisse aus diesem Feed angewendet wird.
- Trennzeichen für die Aufteilung: Das Trennzeichen, mit dem Logzeilen getrennt werden, z. B.
- Klicken Sie auf Weiter.
- Überprüfen Sie die Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.
- Klicken Sie auf Secret-Schlüssel generieren, um einen Secret-Schlüssel zur Authentifizierung dieses Feeds zu generieren.
- Kopieren und speichern Sie den geheimen Schlüssel. Sie können sich diesen geheimen Schlüssel nicht noch einmal ansehen. Bei Bedarf können Sie einen neuen Secret-Schlüssel generieren. Dadurch wird der vorherige Secret-Schlüssel jedoch ungültig.
- Kopieren Sie auf dem Tab Details die Feedendpunkt-URL aus dem Feld Endpunktinformationen. Sie müssen diese Endpunkt-URL in Ihrer Clientanwendung angeben.
- Klicken Sie auf Fertig.
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.
Beschränken Sie den API-Schlüsselzugriff auf die Google Security Operations API.
Endpunkt-URL angeben
- Geben Sie in Ihrer Clientanwendung die HTTPS-Endpunkt-URL an, die im Webhook-Feed angegeben ist.
Aktiviere die Authentifizierung, indem du den API-Schlüssel und den geheimen Schlüssel als Teil der benutzerdefinierten Kopfzeile im folgenden Format angibst:
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 Header unterstützt, können Sie den API-Schlüssel und den geheimen Schlüssel mithilfe von Suchparametern im folgenden Format angeben:
ENDPOINT_URL?key=API_KEY&secret=SECRET
Ersetzen Sie Folgendes:
ENDPOINT_URL
: die URL des Feedendpunkts.API_KEY
: Der API-Schlüssel, mit dem Sie sich bei Google Security Operations authentifizieren.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.
- Gehen Sie zum Abschnitt Benachrichtigungen unter Verwaltung.
- Klicken Sie auf Hinzufügen.
Webhook-Einstellungen konfigurieren:
- Name: Geben Sie einen aussagekräftigen Namen für den Webhook ein, z. B. Google SecOps-Webhook.
- Typ: Wählen Sie in der Liste Webhook aus.
- Ziel-URL: Geben Sie die Endpunkt-URL der Google SecOps API 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 angeben. Spezifische Anforderungen an Header finden Sie in der Google SecOps-Dokumentation.Klicken Sie auf Speichern, um den Webhook zu erstellen.
Klicken Sie unter Ressourcen auf 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 das Feld Benachrichtigungen aufrufen.
UDM-Zuordnungstabelle
Logfeld | UDM-Zuordnung | Logik |
---|---|---|
agent.ephemeral_id |
observer.labels.value |
Der Wert von agent.ephemeral_id aus dem Rohprotokoll. |
agent.hostname |
observer.hostname |
Der Wert von agent.hostname aus dem Rohprotokoll. |
agent.id |
observer.asset_id |
Verkettung von „filebeat:“ und dem Wert von agent.id aus dem Rohprotokoll. |
agent.name |
observer.user.userid |
Der Wert von agent.name aus dem Rohprotokoll. |
agent.type |
observer.application |
Der Wert von agent.type aus dem Rohprotokoll. |
agent.version |
observer.platform_version |
Der Wert von agent.version aus dem Rohprotokoll. |
cloud.availability_zone |
principal.resource.attribute.labels.value |
Der Wert von cloud.availability_zone aus dem Rohprotokoll. |
cloud.instance.id |
principal.resource.product_object_id |
Der Wert von cloud.instance.id aus dem Rohprotokoll. |
cloud.instance.name |
principal.resource.name |
Der Wert von cloud.instance.name aus dem Rohprotokoll. |
cloud.machine.type |
principal.resource.attribute.labels.value |
Der Wert von cloud.machine.type aus dem Rohprotokoll. |
cloud.provider |
principal.resource.attribute.labels.value |
Der Wert von cloud.provider aus dem Rohprotokoll. |
event1 |
metadata.description |
Der Wert von event1 aus dem Rohprotokoll. Wenn event1 nicht vorhanden ist, wird der Wert von message verwendet. |
event1_data.host |
principal.hostname |
Der Wert von event1_data.host aus dem Rohprotokoll. Wird als Fallback verwendet, wenn host_name und host nicht vorhanden sind. |
event1_data.remote_addr |
principal.ip |
Die IP-Adresse, die mit einem Grok-Muster aus event1_data.remote_addr extrahiert wurde. |
event1_data.task |
security_result.detection_fields.value |
Der Wert von event1_data.task aus dem Rohprotokoll. |
event1_data.task_path |
principal.process.file.full_path |
Der Wert von event1_data.task_path aus dem Rohprotokoll. |
event1_data.task_uuid |
security_result.detection_fields.value |
Der Wert von event1_data.task_uuid aus dem Rohprotokoll. |
event1_data.uuid |
metadata.product_log_id |
Der Wert von event1_data.uuid aus dem Rohprotokoll. |
event1_display |
security_result.description |
Der Wert von event1_display aus dem Rohprotokoll. |
host |
principal.hostname |
Der Wert von host aus dem Rohprotokoll. Wird als Fallback verwendet, wenn host_name nicht vorhanden ist. Wenn es sich um eine Zahl handelt, wird sie in einen String umgewandelt. |
host.architecture |
target.asset.hardware.cpu_platform |
Der Wert von host.architecture aus dem Rohprotokoll. |
host.fqdn |
target.administrative_domain |
Der Wert von host.fqdn aus dem Rohprotokoll. |
host.hostname |
target.hostname |
Der Wert von host.hostname aus dem Rohprotokoll. |
host.id |
target.asset.asset_id |
„Host-ID:“, zusammen mit dem Wert von host.id aus dem Rohprotokoll. |
host.ip |
target.asset.ip |
Die Werte des host.ip -Arrays aus dem Rohprotokoll. |
host.mac |
target.mac |
Die Werte des host.mac -Arrays aus dem Rohprotokoll. |
host.os.codename |
target.asset.attribute.labels.value |
Der Wert von host.os.codename aus dem Rohprotokoll. |
host.os.kernel |
target.platform_patch_level |
Der Wert von host.os.kernel aus dem Rohprotokoll. |
host.os.name |
target.asset.attribute.labels.value |
Der Wert von host.os.name aus dem Rohprotokoll. |
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 Rohprotokoll. |
host_name |
principal.hostname |
Der Wert von host_name aus dem Rohprotokoll. |
input.type |
network.ip_protocol |
Wenn der Wert von input.type „tcp“ ist, wird das UDM-Feld auf „TCP“ gesetzt. |
level |
security_result.severity |
Je nach Wert von level : „DEBUG“, „INFO“ und „AUDIT“ werden zu „INFORMATIONSWEISEND“ zugeordnet; „ERROR“ wird zu „ERROR“ und „WARNING“ zu „MEDIUM“ zugeordnet. |
level |
security_result.severity_details |
Der Wert von level aus dem Rohprotokoll. |
log.source.address |
principal.ip |
Die IP-Adresse, die mit einem Grok-Muster aus log.source.address 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 Rohprotokoll. |
message |
metadata.description |
Der Wert von message aus dem Rohprotokoll. Wird als Fallback verwendet, wenn event1 nicht vorhanden ist. |
metadata.event_type |
metadata.event_type |
Wird durch die 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 ist. Andernfalls „GENERIC_EVENT“. |
metadata.log_type |
metadata.log_type |
Hartcodiert auf „ANSIBLE_AWX“. |
metadata.product_name |
metadata.product_name |
Hartcodiert auf „ANSIBLE_AWX“. |
metadata.vendor_name |
metadata.vendor_name |
Hartcodiert auf „ANSIBLE_AWX“. |
parent_uuid |
security_result.detection_fields.value |
Der Wert von parent_uuid aus dem Rohprotokoll. |
principal.resource.resource_type |
principal.resource.resource_type |
Ist cloud.instance.name vorhanden, ist „VIRTUAL_MACHINE“ hartcodiert. |
observer.labels.key |
observer.labels.key |
Hartcodiert auf „ephemeral_id“. |
principal.resource.attribute.labels.key |
principal.resource.attribute.labels.key |
Je nach dem zugeordneten Feld hartcodiert auf „machine_type“, „provider“ oder „availability_zone“. |
security_result.detection_fields.key |
security_result.detection_fields.key |
Je nach Feld, das zugeordnet wird, hartcodiert auf „parent_uuid“, „task“ oder „task_uuid“. |
target.asset.attribute.labels.key |
target.asset.attribute.labels.key |
Je nach zugeordnetem Feld hartcodiert auf „codename“ oder „os_name“. |
timestamp |
metadata.event_timestamp |
Der Wert von timestamp aus dem Rohprotokoll, der geparst und in einen Zeitstempel umgewandelt wurde. |
timestamp |
timestamp |
Der Wert von timestamp aus dem Rohprotokoll, der geparst und in einen Zeitstempel umgewandelt wurde. |
Änderungen
2022-11-09
- Neu erstellter Parser.