TIPS & TRICKS

So streamt ihr AWS CloudWatch Logs zu Splunk (Tipp: Es ist leichter, als ihr denkt)

Während der AWS re:Invent 2016 hat Splunk verschiedene AWS Lambda-Blueprints veröffentlicht, die euch helfen sollen Protokolle, Ereignisse und Alarme von mehr als 15 AWS-Services in Splunk zu streamen, um bessere kritische Sicherheits- und Betriebseinblicke in eurer AWS-Infrastruktur und euren AWS-Anwendungen zu erhalten. In diesem Blog-Beitrag zeigen wir euch Schritt für Schritt, wie ihr einen dieser AWS Lambda-Blueprints, den Lambda-Blueprint für die CloudWatch Logs, verwenden könnt, um AWS CloudWatch Logs über AWS Lambda und in Splunk zu streamen, um sie nahezu in Echtzeit zu analysieren und zu visualisieren – wie im Diagramm unten dargestellt. Im folgenden Beispiel setzen wir uns mit dem Streamen von VPC Flow-Protokollen auseinander, die in CloudWatch Logs gespeichert werden. VPC-Flow-Protokolle speichern Informationen über den gesamten IP-Verkehr, der zu und von Netzwerkschnittstellen geht, und sind daher für die Sicherheitsanalyse und Fehlerbehebung von großer Bedeutung. Der folgende Mechanismus gilt für alle in CloudWatch Logs gespeicherten Protokolle.

Inhalt dieses Leitfadens:

  1. Zunächst ein Hinweis zu Pull- vs. Push-Aufnahmemethoden
  2. Schritt-für-Schritt-Anleitung zum Streamen von AWS CloudWatch Logs
  3. Bonus: Traffic und Security-Dashboards!
  4. Troubleshooting
  5. Abschließende Bemerkung

Zunächst ein Hinweis zu Pull- vs. Push-Aufnahmemethoden

Splunk unterstützt zahlreiche Methoden zur Erfassung von Daten; von der Überwachung lokaler Dateien oder vom Streamen von Übertragungsdaten über das Abrufen von Daten von Remote-Drittanbieter-APIs bis hin zum Empfangen von Daten über syslog, tcp/udp oder http.

Ein Beispiel für das Abrufen von Daten aus Remote-Quellen im Pull-Verfahren ist das weithin bekannte Splunk Add-on für AWS, mit dem Daten aus verschiedenen AWS-Diensten zuverlässig erfasst werden.
Ein Beispiel für das Übertragen von Daten im Push-Verfahren ist die AWS Lambda-Funktion, die zum Streamen von Ereignissen über HTTPS an den Splunk HTTP Event Collector (HEC) eingesetzt wird.

Diese Pull- und Push-Modelle werden für unterschiedliche Anwendungsfälle eingesetzt und setzen unterschiedliche Überlegungen voraus. Dieser Blog-Artikel bezieht sich auf das Push-Modell, das insbesondere bei Microservice-Architekturen und ereignisgestützten Berechnungen wie AWS Lambda Anwendung findet. Da es keine bestimmten Poller gibt, die verwaltet und orchestriert werden müssen, bietet das Push-Modell in der Regel folgende Vorteile:

  • Geringere betriebliche Komplexität & Kosten
  • Leichtere Skalierbarkeit
  • Geringe Spannung
  • Geringe Latenz

Schritt-für-Schritt-Anleitung zum Streamen von AWS CloudWatch Logs

  • Schritt 1: Cloud Watch Logs Stream aktivieren
  • Schritt 2: Splunk HEC Input konfigurieren
  • Schritt 3: Lambda-Funktion konfigurieren

1. Cloud Watch Logs Stream aktivieren

In der folgenden Anleitung dienen VPC Flow-Protokolle als Beispiel für den CloudWatch Log-Stream. Wenn ihr bereits einen CloudWatch Log-Stream aus VPC Flow-Protokollen oder aus anderen Quellen habt, könnt ihr direkt zu Schritt 2 springen und die Referenzen auf VPC Flow-Protokolle durch euren eigenen Datentyp ersetzen.

1a. Erstellt eine Flow-Protokoll-Rolle (Flow Log Role), um dem VPC Flow Log Service die Erlaubnis zu erteilen, Protokolle in CloudWatch Logs zu veröffentlichen. Fahrt fort und erstellt eine neue IAM-Rolle (IAM Role), an die ihr die folgende IAM-Policy anhängt:


{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogGroups",
        "logs:DescribeLogStreams"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}

Notiert euch den Rollennamen, z. B. vpcFlowLogsRole, da ihr ihn in einem nächsten Schritt benötigen.
Ferner müsst ihr eine Trust-Beziehung zu dieser Rolle festlegen, damit der Flow Log Service zur Übernahme dieser Rolle berechtigt ist. Klickt auf "Edit Trust Relationship“ (Trust-Beziehung bearbeiten) auf der Registerkarte "Trust Relationships" (Trust-Beziehungen) der neu erstellten Rolle, löscht etwaige vorhandene Policies und fügt Folgendes ein:


{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "vpc-flow-logs.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

1b. Aktiviert Flow-Protokolle auf euren VPCs() auf der AWS VPC-Konsole, wie in in der AWS VPC-Dokumentation beschrieben. Ab jetzt gehen wir in diesem Leitfaden davon aus, dass ihr vpcFlowLogs als Ziel-CloudWatch Logs-Gruppe festgelegt habt, auf die wir in einem der nächsten Schritte Bezug nehmen. Innerhalb weniger Minuten solltet ihr Flow-Protokolldatensätze in der CloudWatch Logs-Konsole unter dieser Protokollgruppe sehen können.

2. Splunk HEC Input konfigurieren

Jetzt, da Flow-Protokolle erfasst werden, beginnen wir mit der Einrichtung der Daten-Pipeline, und zwar vom Ende aus, d. h. ausgehend von Splunk, und arbeiten uns rückwärts vor.

2a. Installiert das Splunk Add-on für AWS. Bitte beachtet, dass wir uns, da wir Splunk HEC verwenden werden, *nicht* auf modulare Eingaben aus dem Add-on verlassen, um Daten aus CloudWatch Logs oder VPC Flow-Protokollen zu erfassen. Allerdings werden wir die Daten-Parsing-Logik (d.h. Sourcetypen) die bereits in dem Add-on vorhanden ist, verwenden, um die VPC Flow-Protokolldatensätze automatisch zu analysieren und die Felder zu extrahieren.

2b. Erstellt ein HEC-Token aus Splunk Enterprise. Detaillierte Anweisungen findet ihr in der Splunk HEC-Dokumentation.
Wenn ihr die Eingabeeinstellungen konfiguriert, gebt als Sourcetype unbedingt "aws:cloudwatchlogs:vpcflow" an. Dies ist wichtig, damit ihr die automatischen Feldextraktionen aktivieren könnt. Notiert euch unbedingt euren neuen HEC-Token-Wert.
Hinweis: Für Splunk Cloud-Bereitstellungen muss HEC vom Splunk-Support aktiviert worden sein.

Und so sehen die Data Input Settings aus:

1. Konfigurieren von Splunk HEC

3. Lambda-Funktion konfigurieren

Die Pipeline-Phase vor Splunk HEC ist AWS Lambda. Diese wird von CloudWatch Logs immer dann ausgeführt, wenn in einer Gruppe Protokolle vorhanden sind. Diese Datensätze werden an Splunk gestreamt. Zum Glück hat Splunk bereits genau zu diesem Zweck einen Lambda-Blueprint veröffentlicht.

3a. Erstellt die Lambda-Funktion mithilfe des "CloudWatch Logs to Splunk"-Lambda-Blueprints auf der AWS-Konsole, indem ihr hier klickt. Alternativ könnt ihr zur AWS Lambda-Konsole navigieren, auf "Create a Lambda function" (Lambda-Funktion erstellen) klicken und dann unter "Select blueprint“ (Blueprint auswählen) nach "Splunk" suchen. An diesem Punkt könnt ihr den Lambda-Blueprint splunk-cloudwatch-logs-processor auswählen.

3b. Konfiguriert den Lambda-Funktionsauslöser (Function Trigger). Wählt, sofern noch nicht erfolgt, "CloudWatch Logs" als Auslöser aus. Gebt dann als Protokollgruppe vpcFlowLogs ein. Gebt einen Namen unter "Filter Name" (Filtername) ein, wie z. B. vpcFlowLogsFilter. Ihr könnt wahlweise einen Wert unter "Filter pattern“ (Filtermuster) eingeben, wenn ihr einschränken möchtet, was an Lambda geliefert wird. Bevor ihr auf "Next" (Weiter) klickt, vergewissert euch, dass "Enable trigger" (Auslöser aktivieren) aktiviert ist. Hier seht ihr ein Beispiel dafür, wie dieses Formular aussieht:

Add trigger for Lambda function

Dies wird auch als CloudWatch Logs-Abonnementfilter bezeichnet, der aus der ausgewählten Protokollgruppe auf effektive Art und Weise einen Echtzeit-Feed mit Protokollereignissen erstellt, in diesem Fall vpcFlowLogs.

Bitte beachtet, dass Lambda beim Hinzufügen dieses Lambda-Auslösers auf der AWS-Konsole die erforderlichen Berechtigungen für den CloudWatch Logs-Service hinzufügt, um diese spezielle Lambda-Funktion aufzurufen.

3c. Lambda-Funktion konfigurieren. Die Funktion implementiert bereits die erforderliche Logik, um die CloudWatch Logs-Daten zu verarbeiten, also zu decodieren und zu dekomprimieren und die Ereignisse vor dem Versenden an Splunk HEC zu unterbrechen. Folgende Parameter müssen festgelegt werden:

  • Oben: Gebt euren Lambda-Funktionsnamen an, wie etwa vpcFlowLogsProcessor.
  • Unter dem Funktionscode: Gebt die Splunk-Einstellungen unter Umgebungsvariablen ein, wie im nachfolgenden Screenshot dargestellt, wobei:
    • SPLUNK_HEC_URL die Splunk URL für den HEC-Endpunkt ist, z.B, https://:8088/services/collector, wobei der Host euer Splunk-Domänenname mit umfassender Berechtigung oder eure IP-Adresse ist. Bitte beachtet, dass der Standard-Anschluss für HEC "8088" lautet.
    • SPLUNK_HEC_TOKEN ist der Token-Wert der zuvor erstellten HEC-Eingabe.
  • Unter "function handler and role": Wählt unter Role (Rolle) "Choose an existing role" (Vorhandene Rolle auswählen) aus und dann unter Existing Role (Vorhandene Rolle), "lambda_basic_execution", wodurch die Lambda-Funktion die mindestens erforderlichen Berechtigungen erhält, um ihre eigenen Protokolle in CloudWatch Logs schreiben zu können.

Configure Lambda env vars and role

Bitte beachtet, dass AWS Lambda die Umgebungsvariablen im Archiv standardmäßig mit einem Lambda-Serviceschlüssel verschlüsselt. Die Umgebungsvariablen werden automatisch von AWS Lambda entschlüsselt, wenn die Funktion aufgerufen wird. Obwohl es für diese Einrichtung nicht erforderlich ist, könnt ihr die Umgebungsvariablen verschlüsseln, bevor ihr die Lambda-Funktion einsetzt. Weitere Informationen findet ihr hier.

An dieser Stelle könnt ihr auf "Next" (Weiter) klicken, nachdem ihr eure Lambda-Konfiguration überprüft habt, die wie folgt aussehen sollte:

Review Lambda function settings

Nach einigen Minuten solltet ihr die ersten Ereignisse in Splunk Enterprise sehen.
Ihr könnte nach sourcetype suchen.


sourcetype="aws:cloudwatchlogs:vpcflow"

Oder ihr sucht nach der Source, die von der Lambda-Funktion auf den Standardwert "lambda:" gesetzt wird: source="lambda:vpcFlowLogsProcessor"

Splunk Search flow logs

 

Bonus: Traffic und Security-Dashboards!

Mit einer Lambda-basierten Datenaufnahme könnt ihr nicht nur von der oben beschriebenen einfachen Einrichtung profitieren, sondern auch die erweiterten Dashboards und den anspruchsvollen Datenverkehr und die Sicherheitsanalyse der VPC Flow-Protokolle nutzen, die in Splunks App für AWS vordefiniert sind. Wenn ihr den richtigen Sourcetype einrichtet, wie z.B. "aws:cloudwatchlogs:vpcflow" bei den oben beschriebenen VPC Flow-Protokollen, werden in die relevanten Dashboards automatisch Daten eingegeben. Geht nach der Installation zur Splunk App für AWS und zeigt das Dashboard "VPC Flow Logs: Traffic Analysis" im Dropdown-Menü "Traffic & Access" (Datenverkehr und Zugriff) und das Dashboard "VPC Flow Logs: Security Analysis" im Dropdown-Menü "Security" (Sicherheit) an:

VPC Traffic Analysis

VPC Security Analysis

 

Troubleshooting

Wenn ihr keine Ereignisse in Splunk seht, könnt ihr die Fehlersuche für eine Phase der Pipeline nach der anderen in Richtung des Datenflusses durchführen:

Vergewissert euch, dass die VPC Flow-Protokolle in der angegebenen CloudWatch Log-Gruppe erfasst werden. Wenn ihr keine Protokolle seht, sind dies die möglichen Ursachen:

  1. Es kann mehrere Minuten dauern, die Protokolle zu erfassen und in CloudWatch Logs zu veröffentlichen, nachdem ihr ein Flow-Protokoll erstellt habt.
    • Die Protokollgruppe in CloudWatch Logs wird nur erstellt, wenn Datenverkehr erfasst wird. Vergewissert euch, dass in den Netzwerkschnittstellen der ausgewählten VPCs Datenverkehr vorhanden ist.
    • Der VPC Flow-Protokollservice hat keine angemessenen Berechtigungen. Überprüft die unter Schritt1 im Detail beschriebene IAM-Rolle und Policy.
    • Stellt sicher, dass die Lambda-Funktion mit CloudWatch Logs-Ereignissen ausgelöst wird. Vergewissert euch zunächst, dass der Trigger aktiviert ist, indem ihr zur "AWS Lambda"-Konsole -> "Functions" (Funktionen) -> (euer Funktionsname) geht und die Registerkarte "Triggers" (Auslöser) auswählt. Nach der Aktivierung sollte auf dem CloudWatch Logs-Auslöser die Schaltfläche "Disable" (Deaktivieren) angezeigt werden. An dieser Stelle lassen sich Fehler in der Lambda-Funktion am besten über eure in CloudWatch Logs erfassten Protokolle beheben. Wählt die Registerkarte "Monitoring" (Überwachung) aus und klickt auf "View logs in CloudWatch" (Logs in CloudWatch anzeigen). Der Lambda-Blueprint protokolliert den decodierten Daten-Batch aus CloudWatch Logs und anschließend die Reaktion von Splunk sowie die Anzahl der verarbeiteten Protokollereignisse. Hier einige häufige Ursachen, falls Fehler in der Anforderung auftreten:
  2. Der Splunk HEC-Port liegt hinter der Firewall.
    • Das Splunk HEC-Token, dessen Aufgabe es ist, nicht autorisierten Statuscode zurückzugeben, ist ungültig.
    •  

Abschließende Bemerkung

Wir haben gezeigt, wie ihr eine hoch-skalierbare Daten-Pipeline mit geringem Overhead zum Streamen eurer wichtigen CloudWatch Logs in euer bestehendes Splunk Enterprise konfigurieren könnt, indem ihr AWS Lambda und Splunk HEC gemeinsam nutzt. Mit dieser Daten-Pipeline lassen sich Daten mit Splunk Enterprise nahezu in Echtzeit verarbeiten und analysieren.

Als Beispiel für CloudWatch Logs haben wir VPC Flow-Protokolle verwendet, die in CloudWatch gespeichert sind. Diese Daten sind von entscheidender Bedeutung, wenn es darum geht, den Datenverkehr in einer VPC sowie jegliche Sicherheitsaspekte zu verstehen. Bitte beachtet jedoch, dass VPC Flow-Protokolle selber alle paar Minuten erfasst werden, sodass die Analyse der VPC Flow-Protokolle nur in Batches erfolgen kann.

Klickt hier, um die ersten Schritte mit Lambda-Blueprints für Splunk direkt über eure AWS-Konsole durchzuführen. Wir freuen uns darauf zu sehen, wie ihr die Leistungsstärke von AWS Lambda und Splunk HEC nutzt, um eure eigenen serverlosen Architekturen und Daten-Pipelines zu erstellen. Hinterlasst uns unten eine Nachricht mit eurem Feedback oder euren Kommentaren, oder stellt uns eure Fragen auf Splunk Answers.

----------------------------------------------------
Vielen Dank!
Roy Arsan

*Dieser Artikel wurde aus dem Englischen übersetzt und editiert. Den Originalblogpost findet ihr hier: How to stream AWS CloudWatch Logs to Splunk (Hint: it’s easier than you think).

Splunk
Posted by

Splunk

TAGS
Show All Tags
Show Less Tags