Azure Storage-Audit-Logs erfassen
In diesem Dokument wird beschrieben, wie Sie Azure Storage-Audit-Logs mit einem Azure Storage-Konto in Google Security Operations exportieren. Der Parser verarbeitet Logs im JSON-Format und wandelt sie in das einheitliche Datenmodell (Unified Data Model, UDM) um. Dabei werden Felder aus dem Rohlog extrahiert, Datentypkonvertierungen durchgeführt, die Daten mit zusätzlichem Kontext angereichert (z. B. durch Parsen des User-Agents und Aufschlüsseln der IP-Adresse) und die extrahierten Felder den entsprechenden UDM-Feldern zugeordnet.
Hinweise
Prüfen Sie, ob die folgenden Voraussetzungen erfüllt sind:
- Google SecOps-Instanz
- Ein aktiver Azure-Mandant
- Privilegierter Zugriff auf Azure
Azure Storage-Konto konfigurieren
- Suchen Sie in der Azure-Konsole nach Storage accounts (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 (Standard wird empfohlen).
- Redundanz: Wählen Sie die Redundanz aus (GRS oder LRS empfohlen).
- Storage-Kontoname: 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 Storage Account Overview (Speicherkonto – Übersicht) unter Security + networking (Sicherheit + Netzwerk) das Untermenü Access keys (Zugriffsschlüssel) aus.
- Klicken Sie neben key1 oder key2 auf Anzeigen.
- Klicken Sie auf In die Zwischenablage kopieren, um den Schlüssel zu kopieren.
- Bewahren Sie den Schlüssel an einem sicheren Ort auf, um ihn später zu verwenden.
- Wählen Sie auf der Seite Storage Account Overview (Speicherkontoübersicht) unter Settings (Einstellungen) das Untermenü Endpoints (Endpunkte) aus.
- Klicken Sie auf In die 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.
Log-Export für Azure Storage-Audit-Logs konfigurieren
- Melden Sie sich mit Ihrem privilegierten Konto im Azure-Portal an.
- Klicken Sie auf Storage Accounts> Diagnostic Settings (Speicherkonten > Diagnoseeinstellungen).
- Klicken Sie auf + Diagnoseeinstellung hinzufügen.
- Wählen Sie die Diagnoseeinstellungen für
blob
,queue
,table
undfile
aus.- Wählen Sie für jede Diagnoseeinstellung in Category groups (Kategoriegruppen) die Option allLogs (Alle Protokolle) aus.
- Geben Sie für jede Diagnoseeinstellung einen aussagekräftigen Namen ein.
- Wählen Sie das Kästchen In einem Speicherkonto archivieren als Ziel aus.
- Geben Sie das Abo und das Speicherkonto an.
- 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 Feeds nach Produkt 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 Feedname einen Namen für den Feed ein, z. B. Azure Storage Audit Logs.
- Wählen Sie Microsoft Azure Blob Storage als Quelltyp aus.
- Wählen Sie Azure Storage Audit als Logtyp 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.<logname>-logs
)
- Dabei gilt:
- URI is a (URI ist ein): Wählen Sie den URI-TYP entsprechend der Logstream-Konfiguration aus (Single file (Einzelne Datei) | Directory (Verzeichnis) | Directory which includes subdirectories (Verzeichnis mit Unterverzeichnissen)).
Optionen zum Löschen der Quelle: Wählen Sie die Löschoption entsprechend Ihren Aufnahmeeinstellungen 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.
Feeds über den Content Hub einrichten
Geben Sie Werte für die folgenden Felder 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.<logname>-logs
)
- Dabei gilt:
- URI is a (URI ist ein): Wählen Sie den URI-TYP entsprechend der Logstream-Konfiguration aus (Single file (Einzelne Datei) | Directory (Verzeichnis) | Directory which includes subdirectories (Verzeichnis mit Unterverzeichnissen)).
- Optionen zum Löschen der Quelle: Wählen Sie die Löschoption entsprechend Ihren Aufnahmeeinstellungen aus.
- Freigegebener Schlüssel: Der Zugriffsschlüssel für Azure Blob Storage.
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 |
---|---|---|
callerIpAddress |
principal.asset.ip |
Die IP-Adresse wird mit einem Grok-Muster aus dem Feld callerIpAddress extrahiert und principal.asset.ip zugewiesen. |
callerIpAddress |
principal.ip |
Die IP-Adresse wird mit einem Grok-Muster aus dem Feld callerIpAddress extrahiert und principal.ip zugewiesen. |
callerIpAddress |
principal.port |
Die Portnummer wird mit einem Grok-Muster aus dem Feld callerIpAddress extrahiert und principal.port zugewiesen. |
category |
security_result.category_details |
Der Wert des Felds category wird security_result.category_details zugewiesen. |
correlationId |
security_result.detection_fields[0].key |
Dem Schlüsselfeld wird der Literalstring correlationId zugewiesen. |
correlationId |
security_result.detection_fields[0].value |
Der Wert des Felds correlationId wird security_result.detection_fields[0].value zugewiesen. Der Wert des Felds time wird als Zeitstempel geparst und event.idm.read_only_udm.metadata.event_timestamp zugewiesen. Wenn category den Wert StorageWrite hat und principal.user.userid vorhanden ist (abgeleitet von properties.accountName ), wird der Wert auf USER_RESOURCE_UPDATE_CONTENT gesetzt. Wenn category den Wert StorageDelete hat und principal.user.userid vorhanden ist, wird der Wert auf USER_RESOURCE_DELETION gesetzt. Andernfalls wird der Wert auf USER_RESOURCE_ACCESS gesetzt. Der Literalstring AZURE_STORAGE_AUDIT wird event.idm.read_only_udm.metadata.log_type zugewiesen. Der Literalstring AZURE_STORAGE_AUDIT wird event.idm.read_only_udm.metadata.product_name zugewiesen. Der Wert des Felds schemaVersion wird event.idm.read_only_udm.metadata.product_version zugewiesen. Der Literalstring AZURE_STORAGE_AUDIT wird event.idm.read_only_udm.metadata.vendor_name zugewiesen. |
location |
target.location.name |
Der Wert des Felds location wird target.location.name zugewiesen. |
operationName |
additional.fields[x].key |
Dem Schlüsselfeld wird der Literalstring operationName zugewiesen. |
operationName |
additional.fields[x].value.string_value |
Der Wert des Felds operationName wird additional.fields[x].value.string_value zugewiesen. |
operationVersion |
additional.fields[x].key |
Dem Schlüsselfeld wird der Literalstring operationVersion zugewiesen. |
operationVersion |
additional.fields[x].value.string_value |
Der Wert des Felds operationVersion wird additional.fields[x].value.string_value zugewiesen. |
properties.accountName |
principal.user.userid |
Der Wert des Felds properties.accountName wird principal.user.userid zugewiesen. |
properties.clientRequestId |
additional.fields[x].key |
Dem Schlüsselfeld wird der Literalstring clientRequestId zugewiesen. |
properties.clientRequestId |
additional.fields[x].value.string_value |
Der Wert des Felds properties.clientRequestId wird additional.fields[x].value.string_value zugewiesen. |
properties.etag |
additional.fields[x].key |
Dem Schlüsselfeld wird der Literalstring etag zugewiesen. |
properties.etag |
additional.fields[x].value.string_value |
Der Wert des Felds properties.etag wird additional.fields[x].value.string_value zugewiesen. |
properties.objectKey |
additional.fields[x].key |
Dem Schlüsselfeld wird der Literalstring objectKey zugewiesen. |
properties.objectKey |
additional.fields[x].value.string_value |
Der Wert des Felds properties.objectKey wird additional.fields[x].value.string_value zugewiesen. |
properties.requestMd5 |
additional.fields[x].key |
Dem Schlüsselfeld wird der Literalstring requestMd5 zugewiesen. |
properties.requestMd5 |
additional.fields[x].value.string_value |
Der Wert des Felds properties.requestMd5 wird additional.fields[x].value.string_value zugewiesen. |
properties.responseMd5 |
additional.fields[x].key |
Dem Schlüsselfeld wird der Literalstring responseMd5 zugewiesen. |
properties.responseMd5 |
additional.fields[x].value.string_value |
Der Wert des Felds properties.responseMd5 wird additional.fields[x].value.string_value zugewiesen. |
properties.serviceType |
additional.fields[x].key |
Dem Schlüsselfeld wird der Literalstring serviceType zugewiesen. |
properties.serviceType |
additional.fields[x].value.string_value |
Der Wert des Felds properties.serviceType wird additional.fields[x].value.string_value zugewiesen. |
properties.tlsVersion |
network.tls.version |
Der Wert des Felds properties.tlsVersion wird network.tls.version zugewiesen. |
properties.userAgentHeader |
network.http.parsed_user_agent |
Der Wert des Felds properties.userAgentHeader wird als User-Agent-String geparst und network.http.parsed_user_agent zugewiesen. |
properties.userAgentHeader |
network.http.user_agent |
Der Wert des Felds properties.userAgentHeader wird network.http.user_agent zugewiesen. |
protocol |
network.application_protocol |
Der Wert des Felds protocol wird network.application_protocol zugewiesen. |
resourceId |
target.resource.id |
Der Wert des Felds resourceId wird target.resource.id zugewiesen. |
resourceId |
target.resource.product_object_id |
Der Wert des Felds resourceId wird target.resource.product_object_id zugewiesen. Der Literalstring DATABASE wird target.resource.resource_type zugewiesen. |
resourceType |
additional.fields[x].key |
Dem Schlüsselfeld wird der Literalstring resourceType zugewiesen. |
resourceType |
additional.fields[x].value.string_value |
Der Wert des Felds resourceType wird additional.fields[x].value.string_value zugewiesen. Wenn statusText den Wert Success hat, wird der Wert auf ALLOW gesetzt. |
statusCode |
network.http.response_code |
Der Wert des Felds statusCode wird in eine Ganzzahl konvertiert und network.http.response_code zugewiesen. Der Literalstring MICROSOFT_AZURE wird target.cloud.environment zugewiesen. |
time |
timestamp |
Der Wert des Felds time wird als Zeitstempel geparst und timestamp zugewiesen. |
uri |
network.http.referral_url |
Der Wert des Felds uri wird network.http.referral_url zugewiesen. |
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten