Azure Application Gateway-Protokolle erfassen
In diesem Dokument wird beschrieben, wie Sie Azure Application Gateway-Logs erfassen, indem Sie einen Google Security Operations-Feed einrichten. Dieser Parser verarbeitet sowohl JSON-Strukturen mit einem als auch mit mehreren Einträgen, extrahiert Felder aus dem „records“-Array, führt Datentypkonvertierungen durch, ordnet Felder dem UDM zu und ergänzt die Daten um Metadaten und abgeleitete Felder wie den Netzwerkverbindungstyp. Außerdem wird eine spezielle Logik für verschiedene operationName
-Werte verwendet, um relevante IP-Adressen, Subnetze und andere Konfigurationsdetails zu extrahieren.
Hinweise
Folgende Voraussetzungen müssen erfüllt sein:
- Eine Google SecOps-Instanz.
- Berechtigter Zugriff auf ein Azure-Abo.
- Eine Azure API Gateway-Umgebung (Mandant) in Azure.
Azure Storage-Konto konfigurieren
- Suchen Sie in der Azure-Konsole nach Speicherkonten.
- Klicken Sie auf Erstellen.
- Geben Sie Werte für die folgenden Eingabeparameter an:
- Abo: Wählen Sie das Abo aus.
- Ressourcengruppe: Wählen Sie die Ressourcengruppe aus.
- Region: Wählen Sie die Region aus.
- Leistung: Wählen Sie die Leistung aus. Wir empfehlen „Standard“.
- Redundanz: Wählen Sie die Redundanz aus (GRS oder LRS empfohlen).
- Speicherkontoname: Geben Sie einen Namen für das neue Speicherkonto ein.
- Klicken Sie auf Überprüfen + Erstellen.
- Sehen Sie sich die Übersicht des Kontos an und klicken Sie auf Erstellen.
- Wählen Sie auf der Seite Speicherkontoübersicht unter Sicherheit & Netzwerk das Untermenü Zugriffsschlüssel aus.
- Klicken Sie neben Schlüssel 1 oder Schlüssel 2 auf Anzeigen.
- Klicke auf In die Zwischenablage kopieren, um den Schlüssel zu kopieren.
- Speichern Sie den Schlüssel an einem sicheren Ort, um ihn später zu verwenden.
- Wählen Sie auf der Seite Speicherkontoübersicht unter Einstellungen das Untermenü Endpunkte aus.
- Klicken Sie auf In Zwischenablage kopieren, um die Endpunkt-URL des Blob-Dienstes zu kopieren. (z. B.
https://<storageaccountname>.blob.core.windows.net
) - Speichern Sie die Endpunkt-URL an einem sicheren Ort für die spätere Verwendung.
Azure Application Gateway konfigurieren
- Melden Sie sich im Azure-Portal an.
- Rufen Sie die gewünschte Ressourcengruppe auf.
- Wählen Sie Application Gateway aus. Das Fenster Application Gateway wird angezeigt.
- Wählen Sie im Bereich Monitoring die Option Diagnoseeinstellungen > Diagnose aktivieren aus.
- Wählen Sie Diagnoseeinstellung hinzufügen aus. Im Fenster Diagnoseeinstellungen werden die Einstellungen für die Diagnoseprotokolle angezeigt.
- Führen Sie im Bereich Protokoll folgende Schritte aus:
- Klicken Sie das Kästchen ApplicationGatewayAccessLog an.
- Klicken Sie das Kästchen ApplicationGatewayFirewallLog an.
- So speichern Sie Protokolle im Speicherkonto:
- Klicken Sie das Kästchen In einem Speicherkonto archivieren an.
- Wählen Sie in der Liste Abo ein vorhandenes Abo aus.
- Wählen Sie in der Liste Speicherkonto ein vorhandenes Speicherkonto aus.
Feed in Google SecOps für die Aufnahme der Azure Application Gateway-Protokolle 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. Azure Application Gateway-Protokolle.
- Wählen Sie Microsoft Azure Blob Storage als Quelltyp aus.
- Wählen Sie als Logtyp „Azure Application Gateway“ aus.
- Klicken Sie auf Weiter.
Geben Sie Werte für die folgenden Eingabeparameter an:
- Azure-URI: die Blob-Endpunkt-URL.
ENDPOINT_URL/BLOB_NAME
- Dabei gilt:
ENDPOINT_URL
: die Blob-Endpunkt-URL. (https://<storageaccountname>.blob.core.windows.net
)BLOB_NAME
: der Name des Blobs. (z. B.insights-logs-<logname>
)
- Dabei gilt:
- URI ist: Wählen Sie den URI-TYP gemäß der Logstream-Konfiguration aus (Einzelne Datei | Verzeichnis | Verzeichnis mit Unterverzeichnissen).
- Optionen zum Löschen der Quelle: Wählen Sie die gewünschte Löschoption aus.
- Freigegebener Schlüssel: Der Zugriffsschlüssel für Azure Blob Storage.
- Asset-Namespace: der Asset-Namespace.
- Aufnahmelabels: Das Label, das auf die Ereignisse aus diesem Feed angewendet werden soll.
- Azure-URI: die Blob-Endpunkt-URL.
Klicken Sie auf Weiter.
Prüfen Sie die neue Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.
UDM-Zuordnungstabelle
Logfeld | UDM-Zuordnung | Logik |
---|---|---|
Category |
metadata.product_event_type |
Direkt aus dem Feld Category zugeordnet. |
ClientOperationId |
additional.fields[].key:"ClientOperationId", value.string_value |
Direkt aus dem Feld ClientOperationId zugeordnet. |
CorrelationRequestId |
additional.fields[].key:"CorrelationRequestId", value.string_value |
Direkt aus dem Feld CorrelationRequestId zugeordnet. |
GatewayManagerVersion |
additional.fields[].key:"GatewayManagerVersion", value.string_value |
Direkt aus dem Feld GatewayManagerVersion zugeordnet. |
category |
metadata.product_event_type |
Direkt aus dem Feld category zugeordnet. |
level |
security_result.severity |
Wird direkt aus dem Feld level zugeordnet und in Großbuchstaben konvertiert. Wenn der Wert „WARNUNG“ lautet, wird die Schwere auf „HOCH“ und security_result.severity_details auf den ursprünglichen Wert gesetzt. |
properties.clientIP |
principal.ip , principal.asset.ip |
Direkt aus dem Feld properties.clientIP zugeordnet. |
properties.clientPort |
principal.port |
Wird direkt aus dem Feld properties.clientPort zugeordnet und in eine Ganzzahl umgewandelt. |
properties.clientResponseTime |
additional.fields[].key:"clientResponseTime", value.string_value |
Direkt aus dem Feld properties.clientResponseTime zugeordnet. |
properties.configuration.BgpConfiguration.GatewayConfig.Asn |
security_result.detection_fields[].key:"ASN", value |
Wird direkt aus dem Feld properties.configuration.BgpConfiguration.GatewayConfig.Asn zugeordnet, wenn operationName „SetGatewayConfiguration“ ist. |
properties.configuration.BgpConfiguration.GatewayConfig.PeerAddress |
target.ip , target.asset.ip |
Wird direkt aus dem Feld properties.configuration.BgpConfiguration.GatewayConfig.PeerAddress zugeordnet, wenn operationName „SetGatewayConfiguration“ ist. |
properties.configuration.BgpConfiguration.GatewayConfig.PeerType |
security_result.detection_fields[].key:"PeerType", value |
Wird direkt aus dem Feld properties.configuration.BgpConfiguration.GatewayConfig.PeerType zugeordnet, wenn operationName „SetGatewayConfiguration“ ist. |
properties.configuration.IkeVersion |
principal.resource.attribute.labels[].key:"ike_version", value |
Wird direkt aus dem Feld properties.configuration.IkeVersion zugeordnet, wenn operationName „SetConnectionConfiguration“ ist. |
properties.configuration.LocalSubnets |
principal.resource.attribute.labels[].key:"local subnets", value |
Konkatenierter String von IP-Adressen aus dem Array properties.configuration.LocalSubnets , wenn operationName „SetConnectionConfiguration“ ist. |
properties.configuration.LocalTunnelEndpoint |
principal.ip , principal.asset.ip |
Wird direkt aus dem Feld properties.configuration.LocalTunnelEndpoint zugeordnet, wenn operationName „SetConnectionConfiguration“ ist. |
properties.configuration.Name |
principal.hostname , principal.asset.hostname |
Direkt aus dem Feld properties.configuration.Name zugeordnet. Wenn das Feld leer ist, wird der Wert aus properties.instance übernommen. |
properties.configuration.RemoteSite |
target.hostname , target.asset.hostname |
Direkt aus dem Feld properties.configuration.RemoteSite zugeordnet. |
properties.configuration.RemoteSubnets |
principal.resource.attribute.labels[].key:"remote subnets", value |
Konkatenierter String von IP-Adressen aus dem Array properties.configuration.RemoteSubnets , wenn operationName „SetConnectionConfiguration“ ist. |
properties.configuration.RemoteTunnelEndpoint |
target.ip , target.asset.ip |
Wird direkt aus dem Feld properties.configuration.RemoteTunnelEndpoint zugeordnet, wenn operationName „SetConnectionConfiguration“ ist. |
properties.configuration.VIPAddress |
principal.ip , principal.asset.ip |
Wird direkt aus dem Feld properties.configuration.VIPAddress zugeordnet, wenn operationName „SetGatewayConfiguration“ ist. |
properties.configuration.VirtualNetworkRanges |
principal.resource.attribute.labels[].key:"virutal network ranges", value |
Konkatenierter String von IP-Adressen aus dem Array properties.configuration.VirtualNetworkRanges , wenn operationName „SetGatewayConfiguration“ ist. |
properties.configuration.VirtualNetworkSubnets |
principal.resource.attribute.labels[].key:"virtual network subnets", value |
Konkatenierter String von IP-Adressen aus dem Array properties.configuration.VirtualNetworkSubnets , wenn operationName „SetGatewayConfiguration“ ist. |
properties.error_info |
additional.fields[].key:"error_info", value.string_value |
Direkt aus dem Feld properties.error_info zugeordnet. |
properties.host |
principal.hostname , principal.asset.hostname |
Wird direkt aus dem Feld properties.host zugeordnet, wenn properties.originalHost leer ist. |
properties.httpMethod |
network.http.method |
Direkt aus dem Feld properties.httpMethod zugeordnet. |
properties.httpStatus |
network.http.response_code |
Wird direkt aus dem Feld properties.httpStatus zugeordnet und in eine Ganzzahl umgewandelt. |
properties.httpVersion |
network.application_protocol |
Legen Sie „HTTP“ fest, wenn das Feld properties.httpVersion „HTTP“ enthält. |
properties.instance |
principal.hostname , principal.asset.hostname |
Wird als Wert für principal.hostname verwendet, wenn properties.configuration.Name leer ist. |
properties.message |
metadata.description |
Direkt aus dem Feld properties.message zugeordnet. |
properties.operationName |
additional.fields[].key:"operationName", value.string_value |
Direkt aus dem Feld properties.operationName zugeordnet. |
properties.operationStatus |
security_result.category_details |
Direkt aus dem Feld properties.operationStatus zugeordnet. Wenn der Wert „Success“ oder „InProgress“ ist, wird security_result.action auf „ALLOW“ gesetzt. |
properties.originalHost |
principal.hostname , principal.asset.hostname |
Direkt aus dem Feld properties.originalHost zugeordnet. |
properties.originalRequestUriWithArgs |
additional.fields[].key:"originalRequestUriWithArgs", value.string_value |
Direkt aus dem Feld properties.originalRequestUriWithArgs zugeordnet. |
properties.receivedBytes |
network.received_bytes |
Wird direkt aus dem Feld properties.receivedBytes abgeleitet und in eine positive Ganzzahl umgewandelt. |
properties.requestQuery |
additional.fields[].key:"requestQuery", value.string_value |
Direkt aus dem Feld properties.requestQuery zugeordnet. |
properties.requestUri |
target.url |
Direkt aus dem Feld properties.requestUri zugeordnet. |
properties.sentBytes |
network.sent_bytes |
Wird direkt aus dem Feld properties.sentBytes abgeleitet und in eine positive Ganzzahl umgewandelt. |
properties.serverResponseLatency |
additional.fields[].key:"Server Response Latency", value.string_value |
Direkt aus dem Feld properties.serverResponseLatency zugeordnet. |
properties.serverRouted |
target.ip , target.asset.ip , target.port |
IP und Port werden mit einem regulären Ausdruck aus dem Feld properties.serverRouted extrahiert. |
properties.sslCipher |
network.tls.cipher |
Direkt aus dem Feld properties.sslCipher zugeordnet. |
properties.sslClientCertificateIssuerName |
network.tls.server.certificate.issuer |
Direkt aus dem Feld properties.sslClientCertificateIssuerName zugeordnet. |
properties.sslProtocol |
network.tls.version |
Direkt aus dem Feld properties.sslProtocol zugeordnet. |
properties.timeTaken |
additional.fields[].key:"timeTaken", value.string_value |
Direkt aus dem Feld properties.timeTaken zugeordnet. |
properties.transactionId |
network.session_id |
Direkt aus dem Feld properties.transactionId zugeordnet. |
properties.userAgent |
network.http.user_agent , network.http.parsed_user_agent |
Direkt aus dem Feld properties.userAgent zugeordnet. Außerdem wird das Feld in einen geparsten User-Agent umgewandelt und network.http.parsed_user_agent zugeordnet. |
properties.WAFEvaluationTime |
additional.fields[].key:"WAFEvaluationTime", value.string_value |
Direkt aus dem Feld properties.WAFEvaluationTime zugeordnet. |
properties.WAFMode |
additional.fields[].key:"WAFMode", value.string_value |
Direkt aus dem Feld properties.WAFMode zugeordnet. |
resourceId |
target.resource.id |
Direkt aus dem Feld resourceId zugeordnet. |
resourceid |
target.resource.product_object_id |
Direkt aus dem Feld resourceid zugeordnet. |
ruleName |
security_result.rule_name |
Direkt aus dem Feld ruleName zugeordnet. |
time /timeStamp |
metadata.event_timestamp , timestamp |
Wird als Zeitstempel im Format RFC 3339 oder ISO 8601 geparst. timeStamp wird bevorzugt, aber time wird verwendet, wenn timeStamp nicht vorhanden ist. |
(Parser Logic) | metadata.event_type |
Legen Sie „NETWORK_CONNECTION“ fest, wenn sowohl Hauptkonto als auch Ziel vorhanden sind, „STATUS_UPDATE“, wenn nur das Hauptkonto vorhanden ist, und andernfalls „GENERIC_EVENT“. |
(Parser Logic) | metadata.product_name |
Legen Sie diesen Wert auf „Azure Gateway“ fest. |
(Parser Logic) | metadata.vendor_name |
Legen Sie diesen Wert auf „Microsoft“ fest. |
(Parser Logic) | has_principal |
Ein boolescher Wert, der auf „wahr“ gesetzt wird, wenn Hauptinformationen (Hostname, IP oder Port) extrahiert werden, andernfalls auf „falsch“. |
(Parser Logic) | has_target |
Ein boolescher Wert, der auf „wahr“ gesetzt wird, wenn Zielinformationen (Hostname, IP, Port, Ressourcen-ID oder URL) extrahiert werden, andernfalls auf „falsch“. |
(Parser Logic) | disambiguation_key |
Wird hinzugefügt, wenn mehrere Ereignisse aus einem einzelnen Logeintrag extrahiert werden. |
Änderungen
2024-04-19
- Unterstützung für mehrere JSON-Ereignisprotokolle hinzugefügt.
2023-12-22
- „resourceid“ wurde „target.resource.id“ zugeordnet.
- „properties.operationStatus“ wurde in „security_result.category_details“ umgewandelt.
- „properties.configuration.Name“ wurde „principal.hostname“ zugeordnet.
- „properties.message“ wurde in „metadata.description“ umgewandelt.
- „properties.configuration.RemoteStie“ wurde „target.hostname“ zugeordnet.
- „level“ wurde „security_result.severity_details“ zugeordnet.
- „properties.configuration.Ikeversion“ wurde in „principal.resource.attribute.labels“ geändert.
- „properties.configuration.LocalTunnelEndpoint“ wurde auf „principal.ip“ zugeordnet.
- „properties.configuration.RemoteTunnelEndpoint“ wurde auf „target.ip“ zugeordnet.
- „properties.configuration.LocalSubnets“, „properties.configuration.RemoteSubnets“, „properties.configuration.VirtualNetworkRanges“ und „properties.configuration.VirtualNetworkSubnets“ wurden in „principal.resource.attribute.labels“ zugeordnet.
- „properties.configuration.VIPAddress“ wurde auf „principal.ip“ zugeordnet.
- „properties.configuration.BgpConfiguration.GatewayConfig.PeerAddress“ wurde in „targrt.ip“ umgewandelt.
- „properties.configuration.BgpConfiguration.GatewayConfig.PeerType“ und „properties.configuration.BgpConfiguration.GatewayConfig.Asn“ wurden in „security_result.detection_fields“ zugeordnet.
2023-11-16
- Neu erstellter Parser.