Raccogli i log di JAMF Security Cloud
Questo documento spiega come importare i log di JAMF Security Cloud in Google Security Operations utilizzando Google Cloud Storage V2.
JAMF Security Cloud è una piattaforma di difesa dalle minacce mobile e di sicurezza degli endpoint per i dispositivi Apple. Genera log degli eventi di rilevamento delle minacce, conformità e sicurezza dei dispositivi che riguardano la protezione a livello DNS, la prevenzione del phishing, il filtro dei contenuti e la valutazione del rischio del dispositivo.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Un'istanza Google SecOps
- Un progetto GCP con l'API Storage Cloud abilitata
- Autorizzazioni per creare e gestire bucket GCS e policy IAM
- Accesso con privilegi al portale JAMF Security Cloud (console Jamf Threat Defense o Jamf Protect)
Crea un bucket Cloud Storage
- Vai alla console Google Cloud.
- Seleziona il tuo progetto o creane uno nuovo.
- Nel menu di navigazione, vai a Cloud Storage > Bucket.
- Fai clic su Crea bucket.
Fornisci i seguenti dettagli di configurazione:
Impostazione Valore Assegna un nome al bucket Inserisci un nome univoco globale (ad esempio jamf-security-cloud-logs).Tipo di località Scegli in base alle tue esigenze (regione singola, a due regioni, multiregionale) Località Seleziona la posizione (ad esempio, us-central1).Classe di archiviazione Standard (consigliato per i log a cui si accede di frequente) Controllo dell'accesso Uniforme (consigliato) Strumenti di protezione (Facoltativo) Attivare il controllo delle versioni degli oggetti o la policy di conservazione Fai clic su Crea.
Esporta i log di JAMF Security Cloud in Google Cloud Storage
JAMF Security Cloud supporta lo streaming dei dati sugli eventi verso le destinazioni di spazio di archiviazione sul cloud. Configura l'esportazione dei dati nel portale JAMF Security Cloud.
- Accedi al portale JAMF Security Cloud.
- Vai a Integrazioni > Stream di dati.
- Fai clic su Aggiungi stream.
- Seleziona un tipo di destinazione supportato. JAMF Data Streams supporta in modo nativo gli endpoint AWS S3 e HTTP generici. Per inviare i log a Google Cloud Storage, puoi utilizzare un endpoint HTTP generico con una funzione Cloud Run che scrive in GCS oppure configurare una destinazione intermedia compatibile con S3.
- Fornisci i seguenti dettagli di configurazione:
- Nome stream: inserisci un nome descrittivo (ad esempio,
Chronicle GCS Export) - Nome bucket GCS: inserisci il nome del bucket (ad esempio,
jamf-security-cloud-logs) - Prefisso percorso: inserisci un prefisso della cartella (ad esempio
jamf-security-cloud/). - Formato di output: seleziona JSON (consigliato per l'importazione in Chronicle)
- Nome stream: inserisci un nome descrittivo (ad esempio,
- Carica o incolla la chiave JSON delle credenziali del account di servizio Google Cloud che ha accesso in scrittura al bucket GCS.
- Seleziona i tipi di evento da esportare:
- Eventi di minaccia (minacce di rete, phishing, malware)
- Eventi di conformità del dispositivo
- Eventi di sicurezza DNS
- Eventi di rischio app
- Fai clic su Salva (o Crea).
- Verifica che i file di log inizino a essere visualizzati nel bucket GCS con il prefisso specificato.
- Assicurati che il account di servizio GCP utilizzato per l'esportazione abbia il ruolo Creatore oggetti Storage nel bucket di destinazione.
- I file di log vengono scritti in formato JSON e ogni file contiene uno o più record di eventi.
Recuperare il account di servizio Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo feed.
- Fai clic su Configura un singolo feed.
- Seleziona Google Cloud Storage V2 come Tipo di origine.
- Seleziona JAMF Security Cloud come Tipo di log.
Fai clic su Ottieni service account. Verrà visualizzata un'email dell'account di servizio univoca, ad esempio:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comCopia l'indirizzo email. Lo utilizzerai nel prossimo passaggio.
- Ogni istanza di Google SecOps ha un account di servizio univoco. Non utilizzare service account di altre documentazioni o esempi.
Concedi le autorizzazioni IAM al account di servizio Google SecOps
- Vai a Cloud Storage > Bucket.
- Fai clic sul nome del bucket.
- Vai alla scheda Autorizzazioni.
- Fai clic su Concedi l'accesso.
- Fornisci i seguenti dettagli di configurazione:
- Aggiungi entità: incolla l'email del account di servizio Google SecOps
- Assegna i ruoli: seleziona Visualizzatore oggetti Storage.
- Fai clic su Salva.
- Se prevedi di utilizzare l'opzione di eliminazione (elimina i file trasferiti), concedi il ruolo Storage Object Admin anziché Storage Object Viewer.
Configura un feed in Google SecOps per importare i log di JAMF Security Cloud
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo feed.
- Fai clic su Configura un singolo feed.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio,
JAMF Security Cloud logs). - Seleziona Google Cloud Storage V2 come Tipo di origine.
- Seleziona JAMF Security Cloud come Tipo di log.
- Fai clic su Avanti.
Specifica i valori per i seguenti parametri di input:
Campo Valore URI bucket di archiviazione gs://jamf-security-cloud-logs/jamf-security-cloud/Opzione di eliminazione dell'origine Seleziona l'opzione di eliminazione in base alle tue preferenze Età massima del file (giorni) Il valore predefinito è 180 giorni Spazio dei nomi dell'asset Lo spazio dei nomi dell'asset Etichette di importazione L'etichetta da applicare agli eventi di questo feed - Sostituisci
jamf-security-cloud-logscon il nome effettivo del bucket GCS. - Includi sempre la barra finale (
/) alla fine dell'URI.
- Sostituisci
Fai clic su Avanti.
Controlla la nuova configurazione del feed nella schermata Finalizza e poi fai clic su Invia.
Tabella di mappatura UDM
| Campo log | Mappatura UDM | Logic |
|---|---|---|
| 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 | Uniti come etichette con chiavi e valori specifici dalle origini |
| event_data.dns.ttl | dns_answers.ttl | Convertito in uinteger |
| event_data.dns.category | dns_questions.name | Valore copiato direttamente |
| event_data.receiptTime | metadata.collected_timestamp | Valore copiato direttamente |
| event_data_event_dataType_description, event_data.cve.description | metadata.description | Valore di event_data_event_dataType_description se non è vuoto, altrimenti event_data.cve.description |
| has_principal, has_user | metadata.event_type | Impostato su STATUS_UPDATE se has_principal è true, USER_UNCATEGORIZED se has_user è true, altrimenti GENERIC_EVENT |
| event_data.md1.product, md1.product | metadata.product_event_type | Valore di event_data.md1.product se non è vuoto, altrimenti md1.product |
| event_data.device.externalId, event_data.externalId | metadata.product_log_id | Valore di event_data.device.externalId se non è vuoto, altrimenti event_data.externalId |
| event_data.md1.schemaVersion, schemaVersion | metadata.product_version | Valore di event_data.md1.schemaVersion se non è vuoto, altrimenti schemaVersion |
| dns_answers | network.dns.answers | Unito da dns_answers |
| dns_questions | network.dns.questions | Unito da dns_questions |
| event_data.dns.responseStatus | network.dns.response | Imposta su true se NOERROR, altrimenti su false |
| event_data.domain | principal.administrative_domain | Valore copiato direttamente |
| event_data.application | principal.application | Valore copiato direttamente |
| event_data.hostName, event_data.device.userDeviceName | principal.asset.hostname | Valore di event_data.hostName se non è vuoto, altrimenti event_data.device.userDeviceName |
| event_data.source.ip | principal.asset.ip | Valore copiato direttamente |
| event_data.hostName, event_data.device.userDeviceName | principal.hostname | Valore di event_data.hostName se non è vuoto, altrimenti event_data.device.userDeviceName |
| event_data.source.ip | principal.ip | Valore copiato direttamente |
| event_data.source.port | principal.port | Convertito in numero intero |
| event_data_event_dataType_id | principal.process.pid | Valore copiato direttamente |
| event_data.event_dataUrl, event_data.cve.consoleUrl | principal.url | Valore di event_data.event_dataUrl se non è vuoto, altrimenti event_data.cve.consoleUrl |
| device.user.email | principal.user.email_addresses | Unito se corrisponde all'espressione regolare dell'email |
| event_data.account.name, event_data.user.userName | principal.user.user_display_name | Valore di event_data.account.name se non è vuoto, altrimenti event_data.user.userName |
| event_data.account.customerId, customer.customerId, event_data.customerId, device.user.email | principal.user.userid | Valore di event_data.account.customerId se non è vuoto, altrimenti customer.customerId se non è vuoto, altrimenti event_data.customerId se non è vuoto, altrimenti device.user.email se non è un indirizzo email |
| event_data.blocked | security_result.action | Imposta su BLOCK se è vero, ALLOW se è falso |
| event_data_event_dataType_name | security_result.description | Valore copiato direttamente |
| app.threats, app.permissions, event_data.cve.id, event_data.cve.baseScore, event_data.cve.exploitAvailable, event_data.cve.attribution | security_result.detection_fields | Uniti come etichette dalle origini |
| event_data.severity | security_result.severity | Impostato su INFORMATIONAL se 2, LOW se 4, MEDIUM se 6, HIGH se 8, CRITICAL se 10 |
| event_data.blockReason | security_result.summary | Valore copiato direttamente |
| event_data.cve.cveDetailUrl | security_result.url_back_to_product | Valore copiato direttamente |
| event_data.device.deviceId | target.asset.asset_id | Concatenato con il prefisso "CS:" |
| event_data.destination.ips, event_data.destinationIp, event_data.destination.ip, device.carrier.ipAddress, device.network.assignedIp, device.network.publicIp | target.asset.ip | Uniti dalle fonti |
| app_id_md5 | target.file.md5 | Valore copiato direttamente |
| app_id_sha1 | target.file.sha1 | Valore copiato direttamente |
| app_id_sha256 | target.file.sha256 | Valore copiato direttamente |
| event_data.destination.name | target.hostname | Valore copiato direttamente |
| event_data.destination.ips, event_data.destinationIp, event_data.destination.ip, device.carrier.ipAddress, device.network.assignedIp, device.network.publicIp | target.ip | Uniti dalle fonti |
| device.location.countryName | target.location.country_or_region | Valore copiato direttamente |
| device.hw.wifiMacAddress, event_data.accessPointBssid, device.network.bssid | target.mac | Uniti dalle fonti |
| event_data.device.osType, event_data_device_os_osType, device.os.osType | target.platform | Impostato su WINDOWS se corrisponde a Win, MAC se IOS o MAC_OS, LINUX se Lin, altrimenti UNKNOWN_PLATFORM, prima da event_data e poi dal dispositivo |
| event_data_device_os_osVersion, device.os.osVersion | target.platform_version | Valore di event_data_device_os_osVersion se non è vuoto, altrimenti device.os.osVersion |
| event_data.destination.port | target.port | Convertito in numero intero |
| event_data.device.deviceName | target.resource.name | Valore copiato direttamente |
| event_data.user.email | target.user.email_addresses | Unito se corrisponde all'espressione regolare dell'email |
| event_data.user.email, event_data.user.name | target.user.userid | Valore di event_data.user.email se non è un indirizzo email, altrimenti event_data.user.name |
| metadata.product_name | Imposta su "JAMF_SECURITY_CLOUD" | |
| metadata.vendor_name | Imposta su "JAMF_SECURITY_CLOUD" |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.