JAMF Security Cloud-Logs erfassen
In diesem Dokument wird beschrieben, wie Sie JAMF Security Cloud-Logs mit Google Cloud Storage V2 in Google Security Operations aufnehmen.
JAMF Security Cloud ist eine Plattform für die Abwehr von Bedrohungen für Mobilgeräte und für die Endpunktsicherheit für Apple-Geräte. Es werden Ereignisprotokolle zur Erkennung von Bedrohungen, zur Compliance und zur Gerätesicherheit generiert, die den Schutz auf DNS-Ebene, die Phishing-Prävention, die Inhaltsfilterung und die Risikobewertung von Geräten abdecken.
Hinweis
Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:
- Eine Google SecOps-Instanz
- Ein GCP-Projekt mit aktivierter Cloud Storage API
- Berechtigungen zum Erstellen und Verwalten von GCS-Buckets und IAM-Richtlinien
- Privilegierter Zugriff auf das JAMF Security Cloud-Portal (Jamf Threat Defense- oder Jamf Protect-Konsole)
Google Cloud Storage-Bucket erstellen
- Gehen Sie zur Google Cloud Console.
- Wählen Sie Ihr Projekt aus oder erstellen Sie ein neues.
- Rufen Sie im Navigationsmenü Cloud Storage > Buckets auf.
- Klicken Sie auf Bucket erstellen.
Geben Sie die folgenden Konfigurationsdetails an:
Einstellung Wert Bucket benennen Geben Sie einen global eindeutigen Namen ein, z. B. jamf-security-cloud-logs.Standorttyp Wählen Sie die Option aus, die am besten zu Ihren Anforderungen passt (Region, Dual-Region, Multi-Region). Standort Wählen Sie den Speicherort aus, z. B. us-central1.Speicherklasse Standard (empfohlen für Logs, auf die häufig zugegriffen wird) Zugriffskontrolle Einheitlich (empfohlen) Schutzmaßnahmen Optional: Objektversionsverwaltung oder Aufbewahrungsrichtlinie aktivieren Klicken Sie auf Erstellen.
JAMF Security Cloud-Logs nach Google Cloud Storage exportieren
JAMF Security Cloud unterstützt das Streamen von Ereignisdaten an Cloud Storage-Ziele. Konfigurieren Sie den Datenexport im JAMF Security Cloud-Portal.
- Melden Sie sich im JAMF Security Cloud-Portal an.
- Rufen Sie Integrationen > Datenstreams auf.
- Klicken Sie auf Stream hinzufügen.
- Wählen Sie einen unterstützten Zieltyp aus. JAMF Data Streams unterstützt AWS S3 und generische HTTP-Endpunkte nativ. Wenn Sie Logs an Google Cloud Storage senden möchten, können Sie einen generischen HTTP-Endpunkt mit einer Cloud Run-Funktion verwenden, die in GCS schreibt, oder ein S3-kompatibles Zwischenziel konfigurieren.
- Geben Sie die folgenden Konfigurationsdetails an:
- Streamname: Geben Sie einen aussagekräftigen Namen ein, z. B.
Chronicle GCS Export. - Name des GCS-Buckets: Geben Sie den Bucket-Namen ein (z. B.
jamf-security-cloud-logs). - Pfadpräfix: Geben Sie ein Ordnerpräfix ein, z. B.
jamf-security-cloud/. - Ausgabeformat: Wählen Sie JSON aus (empfohlen für die Chronicle-Aufnahme).
- Streamname: Geben Sie einen aussagekräftigen Namen ein, z. B.
- Laden Sie den JSON-Schlüssel für die Anmeldedaten des GCP-Dienstkontos hoch oder fügen Sie ihn ein, der Schreibzugriff auf den GCS-Bucket hat.
- Wählen Sie die zu exportierenden Ereignistypen aus:
- Bedrohungsereignisse (Netzwerkbedrohungen, Phishing, Malware)
- Geräte-Compliance-Ereignisse
- DNS-Sicherheitsereignisse
- App-Risikoereignisse
- Klicken Sie auf Speichern (oder Erstellen).
- Prüfen Sie, ob Logdateien im GCS-Bucket unter dem angegebenen Präfix angezeigt werden.
- Das für den Export verwendete GCP-Dienstkonto muss die Rolle Storage-Objekt-Ersteller für den Ziel-Bucket haben.
- Logdateien werden im JSON-Format geschrieben. Jede Datei enthält einen oder mehrere Ereignisdatensätze.
Google SecOps-Dienstkonto abrufen
- Melden Sie sich in der Google SecOps-Konsole an.
- Rufen Sie die SIEM-Einstellungen > Feeds auf.
- Klicken Sie auf Neuen Feed hinzufügen.
- Klicken Sie auf Einzelnen Feed konfigurieren.
- Wählen Sie Google Cloud Storage V2 als Quelltyp aus.
- Wählen Sie JAMF Security Cloud als Logtyp aus.
Klicken Sie auf Dienstkonto abrufen. Es wird eine eindeutige E-Mail-Adresse für das Dienstkonto angezeigt, z. B.:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comKopieren Sie diese E-Mail-Adresse. Sie verwenden es in der nächsten Aufgabe.
- Jede Google SecOps-Instanz hat ein eindeutiges Dienstkonto. Verwenden Sie keine Dienstkonten aus anderer Dokumentation oder anderen Beispielen.
Dem Google SecOps-Dienstkonto IAM-Berechtigungen gewähren
- Rufen Sie Cloud Storage > Buckets auf.
- Klicken Sie auf den Namen Ihres Buckets.
- Wechseln Sie zum Tab Berechtigungen.
- Klicken Sie auf Zugriff erlauben.
- Geben Sie die folgenden Konfigurationsdetails an:
- Hauptkonten hinzufügen: Fügen Sie die E‑Mail-Adresse des Google SecOps-Dienstkontos ein.
- Rollen zuweisen: Wählen Sie Storage-Objekt-Betrachter aus.
- Klicken Sie auf Speichern.
- Wenn Sie die Löschoption (übertragene Dateien löschen) verwenden möchten, weisen Sie die Rolle Storage Object Admin anstelle von „Storage-Objekt-Betrachter“ zu.
Feed in Google SecOps konfigurieren, um JAMF Security Cloud-Logs aufzunehmen
- Rufen Sie die SIEM-Einstellungen > Feeds auf.
- Klicken Sie auf Neuen Feed hinzufügen.
- Klicken Sie auf Einzelnen Feed konfigurieren.
- Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B.
JAMF Security Cloud logs. - Wählen Sie Google Cloud Storage V2 als Quelltyp aus.
- Wählen Sie JAMF Security Cloud als Logtyp aus.
- Klicken Sie auf Weiter.
Geben Sie Werte für die folgenden Eingabeparameter an:
Feld Wert Storage-Bucket-URI gs://jamf-security-cloud-logs/jamf-security-cloud/Option zum Löschen der Quelle Wählen Sie die gewünschte Löschoption aus. Maximales Dateialter (Tage) Standardwert: 180 Tage Asset-Namespace Der Asset-Namespace Labels für Datenaufnahme Das Label, das auf die Ereignisse aus diesem Feed angewendet werden soll - Ersetzen Sie
jamf-security-cloud-logsdurch den Namen Ihres tatsächlichen GCS-Buckets. - Fügen Sie immer einen Schrägstrich (
/) am Ende des URI ein.
- Ersetzen Sie
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 |
|---|---|---|
| event_data.account.parentId, event_data.action, event_data.device.os, event_data.dns.recordType, event_data.riskDetails.appRiskIndexThreshold, event_data.riskDetails.deviceRiskIndex, event_data.routeName, event_data.signatureId.id, event_data.signatureId.name, event_data.threat.result, event_data.tld, customer.parentId, customer.resellerId, device.deviceId, device.deviceName, device.carrier.carrierName, device.carrier.isoCountryCode, device.carrier.mcc, device.carrier.mnc, device.hw.deviceModel, device.hw.hwPlatform, device.hw.imei, device.hw.platform, device.lastNetworkTrafficUtcMs, device.lastUpdatedUtcMs, device.location.isoCountryCode, device.mdm.lastMdmCheckInUtcMs, device.mdm.mdmId, device.network.ssid, device.os.osVersion, device.state.activated, device.state.deploymentState, device.state.vpnActive, device.state.wifiActive, device.user.id, device.user.name, device.wanderaApp.version, trigger.triggerTimeUtcMs, trigger.triggerType, app.appId.packageName, app.appId.appName, app.appId.appVersion, app.category.label, app.category.system, app.installation.installationTimeUtcMs, app.installation.installedBy, app.developer, app.threats, app.permissions, event_data.accessPoint, event_data.alertId, event_data.event_dataType, event_data.software.softwareId, event_data.software.softwareVersion, event_data.software.softwareName, event_data.cve.id, event_data.cve.baseScore, event_data.cve.exploitAvailable, event_data.cve.attribution, event_data.threat.types, event_data.app.id, event_data.app.name, event_data.app.version | additional.fields | Zusammengeführt als Labels mit bestimmten Schlüsseln und Werten aus Quellen |
| event_data.dns.ttl | dns_answers.ttl | In „unsigned integer“ konvertiert |
| event_data.dns.category | dns_questions.name | Wert direkt kopiert |
| event_data.receiptTime | metadata.collected_timestamp | Wert direkt kopiert |
| event_data_event_dataType_description, event_data.cve.description | metadata.description | Wert aus event_data_event_dataType_description, falls nicht leer, andernfalls event_data.cve.description |
| has_principal, has_user | metadata.event_type | Auf STATUS_UPDATE setzen, wenn has_principal „true“ ist, auf USER_UNCATEGORIZED, wenn has_user „true“ ist, andernfalls auf GENERIC_EVENT |
| event_data.md1.product, md1.product | metadata.product_event_type | Wert aus „event_data.md1.product“, falls nicht leer, andernfalls „md1.product“ |
| event_data.device.externalId, event_data.externalId | metadata.product_log_id | Wert aus event_data.device.externalId, falls nicht leer, andernfalls event_data.externalId |
| event_data.md1.schemaVersion, schemaVersion | metadata.product_version | Wert aus „event_data.md1.schemaVersion“, falls nicht leer, andernfalls „schemaVersion“ |
| dns_answers | network.dns.answers | Zusammengeführt aus dns_answers |
| dns_questions | network.dns.questions | Zusammengeführt aus dns_questions |
| event_data.dns.responseStatus | network.dns.response | Auf „true“ setzen, wenn NOERROR, andernfalls „false“ |
| event_data.domain | principal.administrative_domain | Wert direkt kopiert |
| event_data.application | principal.application | Wert direkt kopiert |
| event_data.hostName, event_data.device.userDeviceName | principal.asset.hostname | Wert aus event_data.hostName, falls nicht leer, andernfalls event_data.device.userDeviceName |
| event_data.source.ip | principal.asset.ip | Wert direkt kopiert |
| event_data.hostName, event_data.device.userDeviceName | principal.hostname | Wert aus event_data.hostName, falls nicht leer, andernfalls event_data.device.userDeviceName |
| event_data.source.ip | principal.ip | Wert direkt kopiert |
| event_data.source.port | principal.port | In Ganzzahl konvertiert |
| event_data_event_dataType_id | principal.process.pid | Wert direkt kopiert |
| event_data.event_dataUrl, event_data.cve.consoleUrl | principal.url | Wert aus event_data.event_dataUrl, falls nicht leer, andernfalls event_data.cve.consoleUrl |
| device.user.email | principal.user.email_addresses | Zusammengeführt, wenn mit dem regulären Ausdruck für E‑Mail-Adressen übereinstimmt |
| event_data.account.name, event_data.user.userName | principal.user.user_display_name | Wert aus event_data.account.name, falls nicht leer, andernfalls event_data.user.userName |
| event_data.account.customerId, customer.customerId, event_data.customerId, device.user.email | principal.user.userid | Wert aus event_data.account.customerId, falls nicht leer, andernfalls customer.customerId, falls nicht leer, andernfalls event_data.customerId, falls nicht leer, andernfalls device.user.email, falls nicht email |
| event_data.blocked | security_result.action | Auf BLOCK gesetzt, wenn „true“, auf ALLOW, wenn „false“ |
| event_data_event_dataType_name | security_result.description | Wert direkt kopiert |
| app.threats, app.permissions, event_data.cve.id, event_data.cve.baseScore, event_data.cve.exploitAvailable, event_data.cve.attribution | security_result.detection_fields | Als Labels aus Quellen zusammengeführt |
| event_data.severity | security_result.severity | Auf INFORMATIONAL gesetzt, wenn 2, LOW, wenn 4, MEDIUM, wenn 6, HIGH, wenn 8, CRITICAL, wenn 10 |
| event_data.blockReason | security_result.summary | Wert direkt kopiert |
| event_data.cve.cveDetailUrl | security_result.url_back_to_product | Wert direkt kopiert |
| event_data.device.deviceId | target.asset.asset_id | Verkettet mit dem Präfix „CS:“ |
| event_data.destination.ips, event_data.destinationIp, event_data.destination.ip, device.carrier.ipAddress, device.network.assignedIp, device.network.publicIp | target.asset.ip | Aus Quellen zusammengeführt |
| app_id_md5 | target.file.md5 | Wert direkt kopiert |
| app_id_sha1 | target.file.sha1 | Wert direkt kopiert |
| app_id_sha256 | target.file.sha256 | Wert direkt kopiert |
| event_data.destination.name | target.hostname | Wert direkt kopiert |
| event_data.destination.ips, event_data.destinationIp, event_data.destination.ip, device.carrier.ipAddress, device.network.assignedIp, device.network.publicIp | target.ip | Aus Quellen zusammengeführt |
| device.location.countryName | target.location.country_or_region | Wert direkt kopiert |
| device.hw.wifiMacAddress, event_data.accessPointBssid, device.network.bssid | target.mac | Aus Quellen zusammengeführt |
| event_data.device.osType, event_data_device_os_osType, device.os.osType | target.platform | Auf WINDOWS setzen, wenn Win übereinstimmt, auf MAC, wenn IOS oder MAC_OS, auf LINUX, wenn Lin, andernfalls auf UNKNOWN_PLATFORM. Zuerst event_data und dann device verwenden. |
| event_data_device_os_osVersion, device.os.osVersion | target.platform_version | Wert aus „event_data_device_os_osVersion“, falls nicht leer, andernfalls „device.os.osVersion“ |
| event_data.destination.port | target.port | In Ganzzahl konvertiert |
| event_data.device.deviceName | target.resource.name | Wert direkt kopiert |
| event_data.user.email | target.user.email_addresses | Zusammengeführt, wenn mit dem regulären Ausdruck für E‑Mail-Adressen übereinstimmt |
| event_data.user.email, event_data.user.name | target.user.userid | Wert aus event_data.user.email, wenn nicht „email“, andernfalls event_data.user.name |
| metadata.product_name | Auf „JAMF_SECURITY_CLOUD“ festgelegt | |
| metadata.vendor_name | Auf „JAMF_SECURITY_CLOUD“ festgelegt |
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten