AWS WAF-Logs erfassen
In diesem Dokument wird beschrieben, wie Sie die AWS Web Application Firewall-Logs (WAF) erfassen, indem Sie einen Google Security Operations-Feed einrichten. Der Parser wandelt Logs im JSON-Rohformat in ein strukturiertes Format um, das dem Google SecOps UDM entspricht. Es werden Felder wie IP-Adressen, URLs, User-Agents und Details zu Sicherheitsregeln extrahiert und den entsprechenden UDM-Feldern zugeordnet, um eine einheitliche Darstellung und Analyse zu ermöglichen.
Hinweise
*Prüfen Sie, ob die folgenden Voraussetzungen erfüllt sind:
- Google SecOps-Instanz
- Privilegierter Zugriff auf AWS
Amazon S3-Bucket konfigurieren
- Erstellen Sie einen Amazon S3-Bucket. Folgen Sie dazu dieser Anleitung: Bucket erstellen.
- Speichern Sie den Namen und die Region des Buckets für die spätere Verwendung.
- Erstellen Sie einen Nutzer gemäß dieser Anleitung: IAM-Nutzer erstellen.
- Wählen Sie den erstellten Nutzer aus.
- Wählen Sie den Tab Sicherheitsanmeldedaten aus.
- Klicken Sie im Abschnitt Zugriffsschlüssel auf Zugriffsschlüssel erstellen.
- Wählen Sie als Anwendungsfall Drittanbieterdienst aus.
- Klicken Sie auf Weiter.
- Optional: Fügen Sie ein Beschreibungstag hinzu.
- Klicken Sie auf Zugriffsschlüssel erstellen.
- Klicken Sie auf CSV-Datei herunterladen, um den Access Key (Zugriffsschlüssel) und den Secret Access Key (geheimer Zugriffsschlüssel) für die spätere Verwendung zu speichern.
- Klicken Sie auf Fertig.
- Wählen Sie den Tab Berechtigungen aus.
- Klicken Sie im Bereich Berechtigungsrichtlinien auf Berechtigungen hinzufügen.
- Wählen Sie Berechtigungen hinzufügen aus.
- Wählen Sie Richtlinien direkt anhängen aus.
- Suchen Sie nach der Richtlinie AmazonS3FullAccess und wählen Sie sie aus.
- Klicken Sie auf Weiter.
- Klicken Sie auf Berechtigungen hinzufügen.
WAF-Web-ACL (Access Control List) erstellen
Wenn Sie AWS WAF noch nicht eingerichtet haben, müssen Sie eine WAF-Web-ACL (Access Control List) erstellen. Bei bestehenden Setups können Sie mit der nächsten Anleitung fortfahren.
- Suchen Sie in der AWS-Konsole nach AWS WAF & Shield und wählen Sie diese Option aus.
- Klicken Sie auf Web-ACL erstellen.
- Nehmen Sie die folgenden Einstellungen vor:
- Name: Geben Sie der ACL einen Namen, z. B.
my-waf-web-acl
. - Region: Wählen Sie die Region aus, in der Sie die WAF anwenden möchten.
- CloudWatch-Messwerte: Aktivieren Sie die Messwerterfassung, um die Aktivität und die ausgelösten Regeln zu verfolgen.
- Name: Geben Sie der ACL einen Namen, z. B.
- Wählen Sie nach der Erstellung die Web-ACL aus, für die Sie die Protokollierung aktivieren möchten.
AWS WAF-Protokollierung konfigurieren
- Rufen Sie in der AWS WAF-Konsole den Tab Logging (Protokollierung) Ihrer Web-ACL auf.
- Klicken Sie auf Logging aktivieren.
- Wählen Sie Amazon S3 als Ziel für Ihre Logs aus.
- Wählen Sie den zuvor erstellten S3-Bucket zum Speichern der Logs aus.
- Optional: Konfigurieren Sie ein Logpräfix, um die Logs zu organisieren (z. B.
waf-logs/
). - Klicken Sie auf Speichern.
Berechtigungen für den S3-Bucket prüfen
Achten Sie darauf, dass der S3-Bucket die richtigen Berechtigungen hat, damit AWS WAF Logs schreiben kann.
- Rufen Sie die S3 Console auf.
- Wählen Sie den Bucket aus, in dem die Logs gespeichert werden.
Fügen Sie auf dem Tab Permissions (Berechtigungen) die folgende Bucket-Richtlinie hinzu, damit AWS WAF Protokolle schreiben kann:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "wafv2.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::your-log-bucket-name/*" } ] }
- Klicken Sie auf Speichern.
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 die SIEM-Einstellungen > „Feeds“ einrichten
Informationen zum Konfigurieren mehrerer Feeds für verschiedene Logtypen in dieser Produktfamilie finden Sie unter Mehrere Feeds konfigurieren.
So konfigurieren Sie einen einzelnen 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. AWS WAF Logs (AWS WAF-Protokolle).
- Wählen Sie Amazon S3 als Quelltyp aus.
- Wählen Sie AWS WAF als Logtyp aus.
- Klicken Sie auf Weiter.
Geben Sie Werte für die folgenden Eingabeparameter an:
- Region: Die Region, in der sich der Amazon S3-Bucket befindet.
- S3-URI: Der Bucket-URI.
s3://your-log-bucket-name/waf-logs/
- Dabei gilt:
your-log-bucket-name
: Der tatsächliche Name des Buckets.
- Dabei gilt:
- URI ist ein: Wählen Sie Verzeichnis oder Verzeichnis mit Unterverzeichnissen aus.
- Optionen zum Löschen der Quelle: Wählen Sie die Löschoption entsprechend Ihren Aufnahmeeinstellungen aus.
Access Key ID (Zugriffsschlüssel-ID): Der Zugriffsschlüssel des Nutzers mit Berechtigungen zum Lesen aus dem S3-Bucket.
Geheimer Zugriffsschlüssel: Der geheime Schlüssel des Nutzers mit Berechtigungen zum Lesen aus dem S3-Bucket.
Asset-Namespace: Der Asset-Namespace.
Aufnahmelabels: Das Label, das auf die Ereignisse aus diesem Feed angewendet werden soll.
Klicken Sie auf Weiter.
Prüfen Sie die neue Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.
Feeds über den Content Hub einrichten
Geben Sie Werte für die folgenden Felder an:
- Region: Die Region, in der sich der Amazon S3-Bucket befindet.
- S3-URI: Der Bucket-URI.
s3://your-log-bucket-name/
- Ersetzen Sie
your-log-bucket-name
durch den tatsächlichen Namen Ihres S3-Buckets.
- Ersetzen Sie
- URI ist ein: Wählen Sie je nach Bucket-Struktur entweder Verzeichnis oder Verzeichnis mit Unterverzeichnissen aus.
- Optionen zum Löschen der Quelle: Wählen Sie die Löschoption entsprechend Ihren Aufnahmeeinstellungen aus.
Access Key ID (Zugriffsschlüssel-ID): Der Zugriffsschlüssel des Nutzers mit Berechtigungen zum Lesen aus dem S3-Bucket.
Geheimer Zugriffsschlüssel: Der geheime Schlüssel des Nutzers mit Berechtigungen zum Lesen aus dem S3-Bucket.
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: Namespace, der dem Feed zugeordnet ist.
- Aufnahmelabels: Labels, die auf alle Ereignisse aus diesem Feed angewendet werden.
UDM-Zuordnungstabelle
Logfeld | UDM-Zuordnung | Logik |
---|---|---|
Aktion | security_result.action | Wenn die Aktion ALLOW ist, setzen Sie security_result.action auf ALLOW und security_result.severity auf INFORMATIONAL. Wenn die Aktion BLOCK ist, setzen Sie security_result.action auf BLOCK. Wenn die Aktion CAPTCHA ist und captchaResponse.responseCode 405 ist, setzen Sie security_result.action auf BLOCK und security_result.action_details auf „CAPTCHA {captchaResponse.failureReason}“. |
captchaResponse.failureReason | security_result.action_details | Wird in Verbindung mit „action“ und „captchaResponse.responseCode“ verwendet, um „security_result.action_details“ zu bestimmen. |
captchaResponse.responseCode | security_result.action_details | Wird in Verbindung mit „action“ und „captchaResponse.failureReason“ verwendet, um „security_result.action_details“ zu bestimmen. |
httpRequest.clientIp | principal.ip, principal.asset.ip | Direkt principal.ip und principal.asset.ip zugeordnet. |
httpRequest.headers | target.hostname, target.asset.hostname, network.http.user_agent, network.http.parsed_user_agent, network.http.referral_url, target.location.country_or_region, target.resource.attribute.labels, target.user.userid | Durchläuft jeden Header in httpRequest.headers. Wenn der Headername „host“ oder „Host“ lautet, wird der Wert target.hostname und target.asset.hostname zugeordnet. Wenn der Headername „User-Agent“ oder „user-agent“ lautet, wird der Wert „network.http.user_agent“ zugeordnet und in „network.http.parsed_user_agent“ geparst. Wenn der Headername „Referer“ oder „referer“ lautet, wird der Wert network.http.referral_url zugeordnet. Wenn der Headername „(?i)time-zone“ lautet, wird der Wert „target.location.country_or_region“ zugeordnet. Wenn der Headername „authorization“ lautet, wird der Wert decodiert, der Nutzername extrahiert und target.user.userid zugeordnet. Alle anderen Header werden als Schlüssel/Wert-Paare zu „target.resource.attribute.labels“ hinzugefügt. |
httpRequest.httpMethod | network.http.method | Wird direkt „network.http.method“ zugeordnet. |
httpRequest.requestId | network.session_id | Direkt network.session_id zugeordnet. |
httpRequest.uri | target.url | Direkt target.url zugeordnet. |
httpSourceId | target.resource.name | Wird direkt „target.resource.name“ zugeordnet. |
httpSourceName | metadata.product_event_type | Direkt zugeordnet zu metadata.product_event_type. |
Labels | security_result.rule_labels | Durchläuft jedes Label in „labels“. Wenn der Labelname nicht leer ist, wird er als Schlüssel/Wert-Paar zu „security_result.rule_labels“ hinzugefügt. |
nonTerminatingMatchingRules | security_result.action_details, security_result.rule_labels | Durchläuft jede Regel in „nonTerminatingMatchingRules“. Wenn die Aktion ALLOW und die Regelaktion CAPTCHA ist, setzen Sie security_result.action_details auf „CAPTCHA SUCCESSFUL“ und fügen Sie die Regel-ID mit dem Schlüssel „nonTerminatingCaptchaRuleName“ zu security_result.rule_labels hinzu. Wenn die Aktion BLOCK oder ALLOW und die Regelaktion COUNT ist, legen Sie security_result.action_details auf „COUNT RULE“ fest und fügen Sie die Regel-ID mit dem Schlüssel „nonTerminatingCountRuleName“ zu security_result.rule_labels hinzu. Wenn die Aktion BLOCK oder ALLOW ist und die Regelaktion CHALLENGE, setzen Sie security_result.action_details auf „COUNT RULE“ und fügen Sie die Regel-ID mit dem Schlüssel „nonTerminatingChallengeRuleName“ zu security_result.rule_labels hinzu. |
rateBasedRuleList | security_result.rule_id, security_result.rule_name, security_result.description | Wenn „terminatingRuleType“ „RATE_BASED“ ist, wird jede Regel in „rateBasedRuleList“ durchlaufen. Wenn „terminatingRuleId“ mit dem Regelnamen übereinstimmt, werden die Regel-ID, der Regelname und die Beschreibung den Feldern „security_result.rule_id“, „security_result.rule_name“ bzw. „security_result.description“ zugeordnet. |
responseCodeSent | network.http.response_code | Direkt network.http.response_code zugeordnet und in eine Ganzzahl konvertiert. |
ruleGroupList | intermediary.labels, security_result.rule_id, security_result.rule_name, security_result.description, security_result.detection_fields | Durchläuft jede Regelgruppe in ruleGroupList. Die Regelgruppen-ID wird als Schlüssel/Wert-Paar zu „intermediary.labels“ hinzugefügt. Wenn „terminatingRuleType“ „MANAGED_RULE_GROUP“ ist und „terminatingRuleId“ mit der Regelgruppen-ID übereinstimmt, werden die Regel-ID, der Regelname und die Beschreibung den Feldern „security_result.rule_id“, „security_result.rule_name“ und „security_result.description“ zugeordnet. Wenn „terminatingRuleType“ „GROUP“ ist, wird die ID der beendenden Regel extrahiert und „security_result.rule_name“ und „security_result.description“ zugeordnet. Die ID der beendenden Regelgruppe wird security_result.rule_labels mit dem Schlüssel „terminatingRuleGroupName“ hinzugefügt. Wenn „terminatingRuleType“ „REGULAR“ ist, wird die Aktion der beendenden Regel extrahiert und den security_result.detection-Feldern mit dem Schlüssel „terminatingRuleAction{index}“ hinzugefügt. |
terminatingRuleId | security_result.rule_id, security_result.rule_name, security_result.description | Wenn „terminatingRuleType“ „RATE_BASED“, „MANAGED_RULE_GROUP“ oder „REGULAR“ ist, wird „terminatingRuleId“ „security_result.rule_id“ und „security_result.rule_name“ zugeordnet und zum Erstellen von „security_result.description“ verwendet. |
terminatingRuleMatchDetails | security_result.description, security_result.category_details, security_result.detection_fields | Wird für jede Übereinstimmung in „terminatingRuleMatchDetails“ durchlaufen. Legt security_result.description auf „Terminating Rule“ fest. Wenn der Bedingungstyp nicht leer ist, wird er „security_result.category_details“ hinzugefügt. Wenn der Standort nicht leer ist, wird er mit dem Schlüssel „location“ zu security_result.detection_fields hinzugefügt. Jedes übereinstimmende Datenelement wird mit dem Schlüssel „matchedData“ zu „security_result.detection_fields“ hinzugefügt. |
terminatingRuleType | security_result.rule_type | Wird direkt security_result.rule_type zugeordnet. |
timestamp | metadata.event_timestamp | In einen Zeitstempel konvertiert und metadata.event_timestamp zugeordnet. |
webaclId | intermediary.resource.name | Wird direkt intermediary.resource.name zugeordnet. |
metadata.vendor_name | Legen Sie diesen Wert auf „AMAZON“ fest. | |
metadata.product_name | Auf „AWS Web Application Firewall“ festgelegt. | |
metadata.log_type | Auf „AWS_WAF“ festgelegt. | |
network.application_protocol | Legen Sie diesen Wert auf „HTTP“ fest. | |
metadata.event_type | Wird auf „NETWORK_HTTP“ festgelegt, wenn httpRequest.headers einen „host“- oder „Host“-Header enthält. Andernfalls auf „STATUS_UPDATE“ setzen. |
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten