Microsoft Azure-Ressourcenprotokolle erfassen

Unterstützt in:

In diesem Dokument wird beschrieben, wie Sie Microsoft Azure-Ressourcenlogs erfassen, indem Sie einen Google Security Operations-Feed mit Microsoft Azure Blob Storage V2 einrichten.

Azure-Ressourcenprotokolle geben Aufschluss über Vorgänge, die in Azure-Ressourcen ausgeführt werden. Diese Logs enthalten detaillierte Informationen zu Ressourcenoperationen, zum Status und zu Leistungsmesswerten. Die Inhalte variieren je nach Ressourcentyp und umfassen Daten wie Authentifizierungsereignisse, Konfigurationsänderungen, Zugriffsversuche und Betriebsstatistiken.

Hinweise

Prüfen Sie, ob die folgenden Voraussetzungen erfüllt sind:

  • Eine Google SecOps-Instanz
  • Privilegierter Zugriff auf das Microsoft Azure-Portal mit Berechtigungen für Folgendes:

    • Speicherkonten erstellen
    • Diagnoseeinstellungen für Azure-Ressourcen konfigurieren
    • Zugriffsschlüssel verwalten

Azure Storage-Konto konfigurieren

Speicherkonto erstellen

  1. Suchen Sie im Azure-Portal nach Speicherkonten.
  2. Klicken Sie auf + Erstellen.
  3. Geben Sie die folgenden Konfigurationsdetails an:

    Einstellung Wert
    Abo Azure-Abo auswählen
    Ressourcengruppe Vorhandene auswählen oder neue erstellen
    Name des Speicherkontos Geben Sie einen eindeutigen Namen ein, z. B. azureresourcelogs.
    Region Wählen Sie die Region aus (z. B. East US).
    Leistung Standard (empfohlen)
    Redundanz GRS (georedundanter Speicher) oder LRS (lokal redundanter Speicher)
  4. Klicken Sie auf Überprüfen + Erstellen.

  5. Sehen Sie sich die Übersicht des Kontos an und klicken Sie auf Erstellen.

  6. Warten Sie, bis die Bereitstellung abgeschlossen ist.

Anmeldedaten für das Speicherkonto abrufen

  1. Rufen Sie das soeben erstellte Storage-Konto auf.
  2. Wählen Sie in der linken Navigationsleiste unter Security + networking (Sicherheit + Netzwerk) die Option Access keys (Zugriffsschlüssel) aus.
  3. Klicken Sie auf Schlüssel anzeigen.
  4. Kopieren und speichern Sie die folgenden Informationen zur späteren Verwendung:

    • Name des Speicherkontos: azureresourcelogs
    • Schlüssel 1 oder Schlüssel 2: Der gemeinsame Zugriffsschlüssel (ein 512-Bit-Zufallsstring in Base64-Codierung)

Blob-Dienstendpunkt abrufen

  1. Wählen Sie im selben Speicherkonto in der linken Navigationsleiste Endpunkte aus.
  2. Kopieren und speichern Sie die Endpunkt-URL des Blob-Diensts.
    • Beispiel: https://azureresourcelogs.blob.core.windows.net/

Azure-Ressourcendiagnoseeinstellungen konfigurieren

Azure-Ressourcenprotokolle werden nicht standardmäßig erfasst. Sie müssen für jede Azure-Ressource eine Diagnoseeinstellung erstellen, um Protokolle an das Speicherkonto weiterzuleiten.

  1. Rufen Sie im Azure-Portal die Azure-Ressource auf, die Sie überwachen möchten.
  2. Wählen Sie in der linken Navigationsleiste unter Monitoring die Option Diagnoseeinstellungen aus.
  3. Klicken Sie auf + Diagnoseeinstellung hinzufügen.
  4. Geben Sie die folgenden Konfigurationsdetails an:
    • Name der Diagnoseeinstellung: Geben Sie einen aussagekräftigen Namen ein, z. B. export-to-secops.
    • Wählen Sie im Bereich Logs die Logkategorien aus, die Sie erfassen möchten. Die verfügbaren Kategorien variieren je nach Ressourcentyp. Häufige Kategorien sind:
      • Administrativ (für Aktivitätslogs)
      • Sicherheit (für Aktivitätsprotokolle)
      • AuditEvent (für Key Vault)
      • ApplicationGatewayAccessLog (für Application Gateway)
      • ApplicationGatewayFirewallLog (für Application Gateway)
      • NetworkSecurityGroupEvent (für Network Security Groups)
    • Wählen Sie im Bereich Messwerte (optional) die Option AllMetrics aus, um Plattformmesswerte an das Speicherkonto zu senden.
    • Klicken Sie im Abschnitt Zieldetails das Kästchen In einem Speicherkonto archivieren an.
    • Abo: Wählen Sie das Abo aus, das Ihr Speicherkonto enthält.
    • Speicherkonto: Wählen Sie das von Ihnen erstellte Speicherkonto aus (z. B. azureresourcelogs).
  5. Klicken Sie auf Speichern.

Nach der Konfiguration werden Logs automatisch in Container im Speicherkonto exportiert. Azure erstellt Container mit dem Namensmuster insights-logs-<log-category-name>. Beispiel:

  • Audit-Logs für Key Vault: insights-logs-auditevent
  • Application Gateway-Zugriffslogs: insights-logs-applicationgatewayaccesslog
  • Application Gateway-Firewall-Logs: insights-logs-applicationgatewayfirewalllog
  • Ereignisse zu Netzwerksicherheitsgruppen: insights-logs-networksecuritygroupevent

Feed in Google SecOps konfigurieren, um Azure-Ressourcenprotokolle aufzunehmen

  1. Rufen Sie die SIEM-Einstellungen > Feeds auf.
  2. Klicken Sie auf Neuen Feed hinzufügen.
  3. Klicken Sie auf der nächsten Seite auf Einen einzelnen Feed konfigurieren.
  4. Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B. Azure Resource Logs - Key Vault.
  5. Wählen Sie Microsoft Azure Blob Storage V2 als Quelltyp aus.
  6. Wählen Sie Microsoft Azure-Ressource als Logtyp aus.
  7. Klicken Sie auf Weiter.
  8. Geben Sie Werte für die folgenden Eingabeparameter an:

    • Azure-URI: Geben Sie die Blob Service-Endpunkt-URL mit dem Containerpfad ein:
    https://azureresourcelogs.blob.core.windows.net/insights-logs-auditevent/
    
    • Dabei gilt:
      • azureresourcelogs: Name Ihres Azure-Speicherkontos.
      • insights-logs-auditevent: Der Name des Blob-Containers, in dem Logs gespeichert werden (variiert je nach Ressourcentyp und Logkategorie).
    • Option zum Löschen der Quelle: Wählen Sie die gewünschte Löschoption aus:

      • Nie: Löscht nach Übertragungen niemals Dateien.
      • Übertragene Dateien löschen: Dateien werden nach der erfolgreichen Übertragung gelöscht.
      • Übertragene Dateien und leere Verzeichnisse löschen: Löscht Dateien und leere Verzeichnisse nach der erfolgreichen Übertragung.
    • Maximales Dateialter: Dateien einschließen, die in den letzten Tagen geändert wurden. Der Standardwert ist 180 Tage.

    • Shared Key (Gemeinsamer Schlüssel): Geben Sie den Wert des gemeinsamen Schlüssels (Zugriffsschlüssel) ein, den Sie in Schritt 3 aus dem Speicherkonto kopiert haben.

    • Asset-Namespace: Der Asset-Namespace.

    • Aufnahmelabels: Das Label, das auf die Ereignisse aus diesem Feed angewendet werden soll.

  9. Klicken Sie auf Weiter.

  10. Prüfen Sie die neue Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.

Azure Storage-Firewall konfigurieren (falls aktiviert)

Wenn für Ihr Azure-Speicherkonto eine Firewall verwendet wird, müssen Sie die IP-Bereiche von Google SecOps hinzufügen.

  1. Rufen Sie im Azure-Portal Ihr Storage-Konto auf (z. B. azureresourcelogs).
  2. Wählen Sie unter Sicherheit + Netzwerk die Option Netzwerk aus.
  3. Wählen Sie unter Firewalls und virtuelle Netzwerke die Option Aktiviert für ausgewählte virtuelle Netzwerke und IP-Adressen aus.
  4. Klicken Sie im Bereich Firewall unter Adressbereich auf + IP-Bereich hinzufügen.
  5. Fügen Sie jeden Google SecOps-IP-Bereich in CIDR-Notation hinzu.

  6. Klicken Sie auf Speichern.

UDM-Zuordnungstabelle

Logfeld UDM-Zuordnung Logik
verschiedene zusätzliche Felder für Feld*_Labels additional.fields Zusammengeführt aus verschiedenen zusätzlichen Feldern vom Typ „field*_label“
authenticationMethod extensions.auth.mechanism Auf USERNAME_PASSWORD festlegen, wenn „authenticationMethod“ auf „Password“ gesetzt ist.
category, event_type extensions.auth.type Auf MACHINE für SQLSecurityAuditEvents festgelegt; SSO für bestimmte Kategorien; AUTHTYPE_UNSPECIFIED für andere
properties.partialipaddress intermediary.ip Wert aus „properties.partialipaddress“, falls nicht leer
properties.event_time, stage_time, risk_time, last_update_time, time metadata.collected_timestamp Konvertiert mit ISO8601 aus „properties.event_time“, „stage_time“, „risk_time“, „last_update_time“ oder „time“ mit Fallback-Grok
properties.message, properties.activity, properties.log.stage metadata.description Wert aus „properties.message“, falls nicht leer, andernfalls aus „properties.activity“, andernfalls aus „properties.log.stage“
event_type metadata.event_type Wert aus „event_type“, falls nicht leer, andernfalls „GENERIC_EVENT“
category, record.category metadata.product_event_type Wert direkt aus „category“ oder „record.category“ kopiert
properties.event_id, properties.log.auditID metadata.product_log_id Wert aus „properties.event_id“, falls nicht leer, andernfalls aus „properties.log.auditID“
properties.log.apiVersion metadata.product_version Wert direkt aus properties.log.apiVersion kopiert
Protokoll network.application_protocol Wert direkt aus dem Protokoll kopiert
properties.log.verb network.dhcp.opcode Wert direkt aus properties.log.verb (Großbuchstaben) kopiert
properties.CsMethod, record.properties.CsMethod network.http.method Der Wert wurde direkt aus „properties.CsMethod“ oder „record.properties.CsMethod“ kopiert.
user_agent network.http.parsed_user_agent Aus user_agent konvertiert
properties.Referer, uri network.http.referral_url Wert aus „properties.Referer“, falls nicht leer, andernfalls aus „uri“
properties.ScStatus, record.properties.ScStatus, properties.statusCode, record.properties.statusCode, responseStatus.code network.http.response_code In eine Ganzzahl konvertiert aus „properties.ScStatus“, „record.properties.ScStatus“, „properties.statusCode“, „record.properties.statusCode“ oder „responseStatus.code“
user_agent network.http.user_agent Wert direkt aus user_agent kopiert
properties.ScBytes, record.properties.ScBytes, properties.responseLength network.received_bytes Konvertiert aus properties.ScBytes, record.properties.ScBytes oder properties.responseLength in „uinteger“
properties.CsBytes, record.properties.CsBytes, properties.requestLength network.sent_bytes Konvertiert in „uinteger“ aus „properties.CsBytes“, „record.properties.CsBytes“ oder „properties.requestLength“
properties.session_id network.session_id Wert direkt aus „properties.session_id“ kopiert (in String konvertiert)
properties.tlsVersion network.tls.version Wert direkt aus „properties.tlsVersion“ kopiert
domain_name_value principal.administrative_domain Wert direkt aus „domain_name_value“ kopiert
properties.clientAppUsed, target_application principal.application Wert aus „properties.clientAppUsed“, falls nicht leer, andernfalls aus „target_application“
prop_device_id principal.asset.asset_id Auf „Geräte-ID:“ gefolgt von „prop_device_id“ festlegen, wenn nicht null
Hardware principal.asset.hardware Von Hardware zusammengeführt
properties.host_name, properties.CIp, record.properties.CIp, properties.ComputerName, record.properties.ComputerName, properties.CsHost, record.properties.CsHost, properties.server_instance_name, record.properties.server_instance_name, server_name principal.asset.hostname Wert aus „properties.host_name“, falls nicht leer, andernfalls aus „properties.CIp“ (grok IP), „record.properties.CIp“ (grok IP), „properties.ComputerName“, „record.properties.ComputerName“, „properties.CsHost“, „record.properties.CsHost“, „properties.server_instance_name“, „record.properties.server_instance_name“ oder „server_name“
src_ip, src_ip1, properties.client_ip, record.properties.clientIpAddress, properties.clientIpAddress, callerIpAddress, properties.ipAddress, ip principal.asset.ip Wert aus src_ip, src_ip1, properties.client_ip (grok IP), record.properties.clientIpAddress, properties.clientIpAddress (grok IP), record.properties.clientIpAddress, callerIpAddress (grok IP), properties.ipAddress oder ip
properties.host_name, properties.CsHost, record.properties.CsHost principal.hostname Wert aus properties.host_name, falls nicht leer; andernfalls aus properties.CsHost oder record.properties.CsHost
src_ip, src_ip1, properties.client_ip, record.properties.clientIpAddress, properties.clientIpAddress, callerIpAddress, properties.ipAddress, ip principal.ip Wert aus src_ip, src_ip1, properties.client_ip (grok IP), record.properties.clientIpAddress, properties.clientIpAddress (grok IP), record.properties.clientIpAddress, callerIpAddress (grok IP), properties.ipAddress oder ip
properties.location.city, provisioning_steps_city principal.location.city Wert aus „properties.location.city“, falls nicht leer, andernfalls aus „provisioning_steps_city“
properties.location.countryOrRegion, provisioning_steps_country, location, Region principal.location.country_or_region Wert aus properties.location.countryOrRegion, falls nicht leer; andernfalls aus provisioning_steps_country; andernfalls aus location; andernfalls aus Region
properties.location.geoCoordinates.latitude principal.location.region_latitude Wert direkt aus properties.location.geoCoordinates.latitude kopiert
properties.location.geoCoordinates.longitude principal.location.region_longitude Wert direkt aus „properties.location.geoCoordinates.longitude“ kopiert
properties.location.state principal.location.state Wert direkt aus „properties.location.state“ kopiert
prop_os principal.platform Auf WINDOWS setzen, wenn prop_os mit (?i)Win übereinstimmt; auf LINUX, wenn (?i)Lin; auf MAC, wenn (?i)Mac
properties.deviceDetail.operatingSystem principal.platform_version Wert direkt aus properties.deviceDetail.operatingSystem kopiert
src_port principal.port Von src_port in Ganzzahl konvertiert
is_compliant_label, is_managed_label, serice_type_label, serice_credential_label principal.resource.attribute.labels Zusammengeführt aus „is_compliant_label“, „is_managed_label“, „serice_type_label“ und „serice_credential_label“
properties.sourceSystem.Name principal.resource.name Wert direkt aus properties.sourceSystem.Name kopiert
properties.sourceSystem.Id principal.resource.product_object_id Wert direkt aus properties.sourceSystem.Id kopiert
properties.server_principal_name, source_user_principal_name, user_principal_name, local_account_username_value principal.user.email_addresses Zusammengeführt aus properties.server_principal_name (wenn mit E-Mail-Adresse übereinstimmt), source_user_principal_name (wenn mit E-Mail-Adresse übereinstimmt), user_principal_name (wenn mit E-Mail-Adresse übereinstimmt) oder local_account_username_value (wenn mit E-Mail-Adresse übereinstimmt)
properties.sequence_group_id, grpname, properties.log.user.groups principal.user.group_identifiers Zusammengeführt aus „properties.sequence_group_id“, „grpname“ oder „properties.log.user.groups“
properties.sourceIdentity.details.id, properties.userId, details_id_not_present principal.user.product_object_id Wert aus properties.sourceIdentity.details.id, falls nicht leer; andernfalls aus properties.userId; andernfalls aus details_id_not_present
properties.ServicePrincipalDisplayName, properties.servicePrincipalName, properties.sourceIdentity.details.DisplayName, properties.userDisplayName, record.properties.log.user.username principal.user.user_display_name Wert aus „properties.ServicePrincipalDisplayName“, falls nicht leer; andernfalls aus „properties.servicePrincipalName“; andernfalls aus „properties.sourceIdentity.details.DisplayName“; andernfalls aus „properties.userDisplayName“; andernfalls aus „record.properties.log.user.username“
properties.servicePrincipalId, user_userPrincipalName, source_user_principal_name, details_user_principal_name, user_principal_name, properties.accountName, record.properties.log.user.uid principal.user.userid Wert aus „properties.servicePrincipalId“, falls nicht leer; andernfalls aus „user_userPrincipalName“; andernfalls aus „source_user_principal_name“; andernfalls aus „details_user_principal_name“; andernfalls aus „user_principal_name“; andernfalls aus „properties.accountName“; andernfalls aus „record.properties.log.user.uid“
security_action, succeeded, statusText, resultType security_result.action Auf ALLOW setzen, wenn security_action „allow“ ist; andernfalls ALLOW, wenn „succeeded“ „true“ oder „statusText“ „Success“ oder „resultType“ „success“ ist; andernfalls BLOCK, wenn „succeeded“ „false“ oder „statusText“ „failed“ oder „resultType“ „failed“ ist.
properties.action_name security_result.action_details Wert direkt aus „properties.action_name“ kopiert
status_label security_result.about.resource.attribute.labels Zusammengeführt aus „status_label“
properties_log_label, corr_key_label, resultType_label, resultSignature_label, networkName_label, networkType_label, method_label, authentication_step_requirement_label, authentication_step_result_detail_label, stepdate_label, initiatedby_name_label, initiatedby_id_label, initiatedby_type_label, targetSystem_id_label, targetSystem_name_label, containerID_label, pod_label, authentication_label, api_name_label, scale_unit_label, namespace_name_label, subscription_id_label, activity_id_label_1, task_name_label, environment_label, cookie, additional_field_event_ip, additional_field_event_primary_stamp, additional_field_event_stamp_type, source, correlationId_field, activityDateTime_field, detectedDateTime_field, lastUpdatedDateTime_field, count_label, total_label, minimum_label, maximum_label, average_label, metricName_label, timeGrain_label, ApiName_label, Authentication_label, GeoType_label, old_label, new_label, add_label, keyId_label, sr_result.rule_name, sr_result.rule_id, resultField, sr_result.detection_fields security_result.detection_fields Zusammengeführt aus properties_log_label, corr_key_label, resultType_label, resultSignature_label, networkName_label, networkType_label, method_label, authentication_step_requirement_label, authentication_step_result_detail_label, stepdate_label, initiatedby_name_label, initiatedby_id_label, initiatedby_type_label, targetSystem_id_label, targetSystem_name_label, containerID_label, pod_label, authentication_label, api_name_label, scale_unit_label, namespace_name_label, subscription_id_label, activity_id_label_1, task_name_label, environment_label, cookie, additional_field_event_ip, additional_field_event_primary_stamp, additional_field_event_stamp_type, source, correlationId_field, activityDateTime_field, detectedDateTime_field, lastUpdatedDateTime_field, count_label, total_label, minimum_label, maximum_label, average_label, metricName_label, timeGrain_label, ApiName_label, Authentication_label, GeoType_label, old_label, new_label, add_label, keyId_label, sr_result.rule_name, sr_result.rule_id, resultField, sr_result.detection_fields
resultDescription, sec_result.description, properties.queryexecutionstatus security_result.description Wert aus „resultDescription“ (Zeilenumbrüche ersetzen); andernfalls aus „sec_result.description“; andernfalls aus „properties.queryexecutionstatus“
policy_id_value security_result.rule_id Wert direkt aus policy_id_value kopiert
properties.Result, statusText, properties.queryexecutionstatus security_result.summary Wert aus „properties.Result“, falls nicht leer, andernfalls aus „statusText“, andernfalls aus „properties.queryexecutionstatus“
target_application target.application Wert aus „target_application“
properties.ComputerName, record.properties.ComputerName, properties.server_instance_name, record.properties.server_instance_name target.asset.hostname Wert aus „properties.ComputerName“, „record.properties.ComputerName“, „properties.server_instance_name“ oder „record.properties.server_instance_name“
(hartcodiert) target.cloud.environment Auf „MICROSOFT_AZURE“ festlegen
properties.SPort, record.properties.SPort target.port Konvertiert in eine Ganzzahl aus properties.SPort oder record.properties.SPort
properties.querytext.query target.process.command_line Wert direkt aus properties.querytext.query kopiert
properties.processId target.process.pid Aus „properties.processId“ in String konvertiert
subscription_id_label, resource_group_label, request_resource_type_label, request_resource_id_label, additional_objectKey, additional_clientRequestId, additional_RiskEventType, additional_tokenIssuerType, keyId_label, appid_label target.resource.attribute.labels Zusammengeführt aus subscription_id_label, resource_group_label, request_resource_type_label, request_resource_id_label, additional_objectKey, additional_clientRequestId, additional_RiskEventType, additional_tokenIssuerType, keyId_label, appid_label
properties_databasename, properties.resourceDisplayName, record.properties.databasename, record.properties.databaseName target.resource.name Wert aus „properties_databasename“, falls nicht leer; andernfalls aus „properties.resourceDisplayName“; andernfalls aus „record.properties.databasename“; andernfalls aus „record.properties.databaseName“
resourceId, properties.resourceId target.resource.product_object_id Wert aus „resourceId“, falls nicht leer, andernfalls aus „properties.resourceId“
properties_collectionname, properties.resourceDisplayName, record.properties.collectionname, record.properties.collectionName, properties.log.objectRef.resource target.resource.resource_subtype Wert aus „properties_collectionname“, falls nicht leer; andernfalls aus „properties.resourceDisplayName“; andernfalls aus „record.properties.collectionname“; andernfalls aus „record.properties.collectionName“; andernfalls aus „properties.log.objectRef.resource“
resourceId, message target.resource.resource_type Auf DATABASE festlegen, wenn resourceId dem Muster entspricht; andernfalls CLUSTER, wenn die Nachricht mit MANAGEDCLUSTERS übereinstimmt; andernfalls VIRTUAL_MACHINE, wenn MANAGEDINSTANCES; andernfalls DATABASE, wenn DATABASEACCOUNTS
resourceType target.resource.type Wert direkt aus „resourceType“ kopiert
properties.CsUriStem, properties.log.requestURI, value (aus additionalInfo) target.url Wert aus „properties.CsUriStem“, falls nicht leer, andernfalls aus „properties.log.requestURI“, andernfalls aus „value“ (aus „additionalInfo“)
user_principal_name target.user.email_addresses Zusammengeführt aus „user_principal_name“ (wenn mit E-Mail-Adresse übereinstimmt)
properties.userId target.user.product_object_id Wert direkt aus properties.userId kopiert
properties.userDisplayName target.user.user_display_name Wert direkt aus properties.userDisplayName kopiert
user_principal_name, properties.userPrincipalName target.user.userid Wert aus user_principal_name, falls nicht leer; andernfalls aus properties.userPrincipalName
(hartcodiert) metadata.product_name Auf „Azure Resource Logs“ festgelegt
(hartcodiert) metadata.vendor_name Auf „Microsoft“ festgelegt

Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten