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 o Amazon S3. 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 filtraggio dei contenuti e la valutazione del rischio del dispositivo. Jamf Security Cloud esporta i log utilizzando Data Streams. Ogni configurazione dello stream di dati invia esattamente un tipo di dati a una destinazione.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Un'istanza Google SecOps
- Accesso con privilegi al portale Jamf Security Cloud
- Per il metodo 1: accesso con privilegi a Google Cloud (Google Cloud Storage, Cloud Run)
- Per il metodo 2: accesso privilegiato ad AWS (S3, IAM)
Seleziona i tipi di stream di dati da esportare
Il parser Jamf Security Cloud supporta tutti e sei i tipi di stream di dati. Crea una configurazione dello stream di dati separata per ogni tipo di dati che vuoi importare:
- Eventi di minaccia: eventi di minaccia rilevati, tra cui comunicazioni di rete dannose, malware e app rischiose
- Traffico di rete: log del traffico di rete elaborati dall'infrastruttura di rete di Jamf
- Eventi di accesso: richieste consentite e rifiutate dalle norme di Jamf Connect Zero Trust Network Access (ZTNA)
- Dati sul dispositivo: informazioni sui dispositivi
- Approfondimenti sulle app: informazioni sulle applicazioni installate sui dispositivi
- Dati sulle vulnerabilità: dettagli su ogni vulnerabilità rilevata e sul dispositivo in cui è stata trovata
Metodo 1: Google Cloud Archiviazione
Jamf Security Cloud non dispone di una destinazione di archiviazione Google Cloud integrata e Jamf osserva che l'invio di dati direttamente a Google SecOps tramite l'integrazione HTTP non è supportato. Questo metodo utilizza la destinazione dello stream di dati HTTP generico per inviare eventi a una funzione Cloud Run di tua proprietà, che li scrive in un bucket Storage Google Cloud . Google SecOps inserisce il bucket utilizzando un feed Google Cloud Storage V2.
Crea un bucket di Google Cloud archiviazione
- Vai alla consoleGoogle 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) Attiva il controllo delle versioni degli oggetti o la policy di conservazione Fai clic su Crea.
Crea un account di servizio per la funzione Cloud Run
- Nella console Google Cloud, vai a IAM e amministrazione > Service account.
- Fai clic su Crea account di servizio.
- Fornisci i seguenti dettagli di configurazione:
- Nome del service account: inserisci
jamf-sc-receiver-sa - Descrizione service account: inserisci
Service account for the Cloud Run function that receives Jamf Security Cloud events
- Nome del service account: inserisci
- Fai clic su Crea e continua.
- Fai clic su Fine.
Concedi al account di servizio l'accesso al bucket
- 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à: inserisci l'email del account di servizio (ad esempio,
jamf-sc-receiver-sa@PROJECT_ID.iam.gserviceaccount.com). - Assegna i ruoli: seleziona Storage Object Admin.
- Aggiungi entità: inserisci l'email del account di servizio (ad esempio,
- Fai clic su Salva.
Crea la funzione Cloud Run per ricevere eventi
- Genera un token di autenticazione sicuro e salvalo per riferimento futuro (ad esempio, esegui
openssl rand -hex 32). Jamf Security Cloud invia questo token in un'intestazione della richiesta e la funzione rifiuta le richieste senza. - Nella console GCP, vai a Cloud Run.
- Fai clic su Crea servizio.
- Seleziona Funzione (usa un editor in linea per creare una funzione).
Nella sezione Configura, fornisci i seguenti dettagli di configurazione:
Impostazione Valore Nome servizio jamf-sc-receiverRegione Seleziona la regione corrispondente al bucket Cloud Storage (ad esempio, us-central1).Tempo di esecuzione Seleziona Python 3.12 o versioni successive Nella sezione Autenticazione, seleziona Consenti chiamate non autenticate.
Espandi Container, networking, sicurezza.
Vai alla scheda Sicurezza:
- Service account (Service account): seleziona
jamf-sc-receiver-sa
- Service account (Service account): seleziona
Vai alla scheda Container:
- Fai clic su Variabili e secret.
- Fai clic su + Aggiungi variabile per ogni variabile di ambiente:
Nome variabile Valore di esempio Descrizione GCS_BUCKETjamf-security-cloud-logsNome del bucket Cloud Storage GCS_PREFIXjamf-security-cloud/Prefisso per i file di log AUTH_TOKEN<your-generated-token>Token inviato da Jamf Security Cloud nell'intestazione X-Auth-TokenFai clic su Crea.
Attendi la creazione del servizio. Dopo aver creato il servizio, si apre automaticamente l'editor di codice incorporato.
Inserisci main nel campo Entry point (Punto di ingresso).
Nell'editor di codice incorporato, crea due file:
Primo file: main.py
import hashlib import os from datetime import datetime, timezone import functions_framework from google.cloud import storage BUCKET = os.environ["GCS_BUCKET"] PREFIX = os.environ.get("GCS_PREFIX", "jamf-security-cloud/") AUTH_TOKEN = os.environ["AUTH_TOKEN"] storage_client = storage.Client() @functions_framework.http def main(request): if request.headers.get("X-Auth-Token") != AUTH_TOKEN: return ("Unauthorized", 401) body = request.get_data() if not body: return ("OK", 200) now = datetime.now(timezone.utc) digest = hashlib.sha256(body).hexdigest()[:12] object_name = f"{PREFIX}{now:%Y/%m/%d}/{now:%Y%m%dT%H%M%S%f}_{digest}.json" storage_client.bucket(BUCKET).blob(object_name).upload_from_string( body, content_type="application/json" ) return ("OK", 200)Secondo file: requirements.txt
functions-framework==3.* google-cloud-storage==2.*
Fai clic su Salva e ridistribuisci.
Copia e salva l'URL del servizio (ad esempio,
https://jamf-sc-receiver-abc123-uc.a.run.app). Utilizzerai il nome host nella sezione successiva.
Configura uno stream di dati HTTP generico in Jamf Security Cloud
- Accedi al portale Jamf Security Cloud.
- Vai a Integrazioni > Stream di dati.
- Fai clic su Nuova configurazione.
- Seleziona il tipo di stream di dati (ad esempio Eventi di minaccia).
- Seleziona HTTP generico come tipo di destinazione dello stream di dati.
- Fai clic su Continua.
- Fornisci i seguenti dettagli di configurazione:
- Protocollo: seleziona https
- Nome host/IP del server: inserisci il nome host del servizio Cloud Run (ad esempio,
jamf-sc-receiver-abc123-uc.a.run.app). - Porta: inserisci
443 - Endpoint: inserisci
/ - Intestazioni aggiuntive: fai clic su Aggiungi intestazione e inserisci il nome
X-Auth-Tokencon il token generato come valore.
- Fai clic su Testa configurazione e verifica che il test vada a buon fine.
- Fai clic sul pulsante di attivazione/disattivazione Abilita configurazione per attivare lo stream di dati.
- Fai clic su Salva.
- Ripeti questi passaggi per ogni tipo di stream di dati aggiuntivo che vuoi esportare.
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 del account di servizio univoca, ad esempio:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comCopia l'indirizzo email. Lo utilizzerai nel passaggio successivo.
Concedi al account di servizio Google SecOps l'accesso al bucket
- 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.
Configurare un feed in Google SecOps per l'importazione da Google Cloud Storage
- 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 del bucket effettivo. - 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.
Metodo 2: Amazon S3
AWS S3 di proprietà del cliente è l'unica destinazione di spazio di archiviazione sul cloud supportata in modo nativo da Jamf Security Cloud Data Streams. Jamf Security Cloud scrive gli eventi direttamente nel tuo bucket S3 e Google SecOps li importa utilizzando un feed Amazon S3 V2.
Configura il bucket AWS S3 e il ruolo IAM per Jamf Security Cloud
- Crea un bucket Amazon S3 seguendo questa guida utente: Creazione di un bucket
- Salva il nome e la regione del bucket per riferimento futuro (ad esempio,
jamf-security-cloud-logs). Crea un ruolo IAM che Jamf Security Cloud assume per caricare i dati nel bucket. Il ruolo richiede l'autorizzazione
s3:PutObjectsul bucket e l'account AWS di Jamf elencato come entità attendibile.Salva il ruolo IAM
ARNper riferimento futuro.
Configura uno stream di dati AWS S3 di proprietà del cliente in Jamf Security Cloud
- Accedi al portale Jamf Security Cloud.
- Vai a Integrazioni > Stream di dati.
- Fai clic su Nuova configurazione.
- Seleziona il tipo di stream di dati (ad esempio Eventi di minaccia).
- Seleziona AWS S3 di proprietà del cliente come tipo di destinazione dello stream di dati.
- Fai clic su Continua.
- Fornisci i seguenti dettagli di configurazione:
- Nome del bucket Amazon S3: inserisci il nome del bucket (ad esempio,
jamf-security-cloud-logs). - Ruolo IAM assunto da Jamf: inserisci l'ARN del ruolo IAM che hai creato per Jamf Security Cloud
- Regione: seleziona la regione del bucket S3
- Nome del bucket Amazon S3: inserisci il nome del bucket (ad esempio,
- Fai clic su Crea configurazione.
(Facoltativo) In Impostazioni avanzate, seleziona JSON come formato del messaggio.
Fai clic sul pulsante di attivazione/disattivazione Abilita configurazione per attivare lo stream di dati.
Fai clic su Salva.
Ripeti questi passaggi per ogni tipo di stream di dati aggiuntivo che vuoi esportare.
Crea un utente IAM e una chiave di accesso per Google SecOps
- Crea un utente seguendo questa guida utente: Creazione di un utente IAM.
- Seleziona l'utente creato.
- Seleziona la scheda Credenziali di sicurezza.
- Fai clic su Crea chiave di accesso nella sezione Chiavi di accesso.
- Seleziona Servizio di terze parti come Caso d'uso.
- Fai clic su Avanti.
- (Facoltativo) Aggiungi un tag di descrizione.
- Fai clic su Crea chiave di accesso.
- Fai clic su Scarica file .csv per salvare la chiave di accesso e la chiave di accesso segreta per riferimento futuro.
- Fai clic su Fine.
- Seleziona la scheda Autorizzazioni.
- Fai clic su Aggiungi autorizzazioni nella sezione Criteri per le autorizzazioni.
- Seleziona Aggiungi autorizzazioni.
- Seleziona Allega direttamente i criteri.
- Cerca la norma AmazonS3FullAccess.
- Seleziona la policy.
- Fai clic su Avanti.
- Fai clic su Aggiungi autorizzazioni.
Configura un feed in Google SecOps per l'importazione da Amazon S3
- 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 Amazon S3 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 S3 s3://jamf-security-cloud-logs/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 ID chiave di accesso Chiave di accesso utente con accesso al bucket S3 Chiave di accesso segreta Chiave segreta utente con accesso al bucket S3 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 S3.
- 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 | Logica |
|---|---|---|
accessPoint_label |
additional.fields |
Unita |
action_label |
additional.fields |
Unita |
activated_label |
additional.fields |
Unita |
alertId_label |
additional.fields |
Unita |
appName_label |
additional.fields |
Unita |
appRiskIndexThreshold_label |
additional.fields |
Unita |
appVersion_label |
additional.fields |
Unita |
app_id_label |
additional.fields |
Unita |
carrierName_label |
additional.fields |
Unita |
category_label |
additional.fields |
Unita |
deploymentState_label |
additional.fields |
Unita |
developer_label |
additional.fields |
Unita |
deviceId_label |
additional.fields |
Unita |
deviceModel_label |
additional.fields |
Unita |
deviceName_label |
additional.fields |
Unita |
deviceRiskIndex_label |
additional.fields |
Unita |
device_os_label |
additional.fields |
Unita |
device_user_name_label |
additional.fields |
Unita |
eventTimeUtcMs_label |
additional.fields |
Unita |
eventType_label |
additional.fields |
Unita |
hwPlatform_label |
additional.fields |
Unita |
imei_label |
additional.fields |
Unita |
installationTimeUtcMs_label |
additional.fields |
Unita |
installedBy_label |
additional.fields |
Unita |
isoCountryCode_label |
additional.fields |
Unita |
lastMdmCheckInUtcMs_label |
additional.fields |
Unita |
lastNetworkTrafficUtcMs_label |
additional.fields |
Unita |
lastUpdatedUtcMs_label |
additional.fields |
Unita |
loc_isoCountryCode_label |
additional.fields |
Unita |
mcc_label |
additional.fields |
Unita |
mdmId_label |
additional.fields |
Unita |
mnc_label |
additional.fields |
Unita |
osVersion_label |
additional.fields |
Unita |
packageName_label |
additional.fields |
Unita |
parentId_label |
additional.fields |
Unita |
parentId_label_1 |
additional.fields |
Unita |
platform_label |
additional.fields |
Unita |
profileId_label |
additional.fields |
Unita |
profileName_label |
additional.fields |
Unita |
profileStatus_label |
additional.fields |
Unita |
recordType_label |
additional.fields |
Unita |
resellerId_label |
additional.fields |
Unita |
routeName_label |
additional.fields |
Unita |
signatureId_id_label |
additional.fields |
Unita |
signatureId_name_label |
additional.fields |
Unita |
softwareId_label |
additional.fields |
Unita |
softwareName_label |
additional.fields |
Unita |
softwareVersion_label |
additional.fields |
Unita |
ssid_label |
additional.fields |
Unita |
system_label |
additional.fields |
Unita |
threat_result_label |
additional.fields |
Unita |
triggerTimeUtcMs_label |
additional.fields |
Unita |
triggerType_label |
additional.fields |
Unita |
types_list |
additional.fields |
Unita |
userId_label |
additional.fields |
Unita |
user_tld_label |
additional.fields |
Unita |
vpnActive_label |
additional.fields |
Unita |
wanderaAppVersion_label |
additional.fields |
Unita |
wifiActive_label |
additional.fields |
Unita |
event_data.receiptTime |
metadata.collected_timestamp |
Mappato direttamente |
event_data.cve.description |
metadata.description |
Mappato direttamente |
event_data_event_dataType_description |
metadata.description |
Mappato direttamente |
event_data.timestamp |
metadata.event_timestamp |
Analizzato come yyyy-MM-ddTHH:mm:ss.SSSZ |
has_principal |
metadata.event_type |
Mappato: true → STATUS_UPDATE |
has_user |
metadata.event_type |
Mappato: true → USER_UNCATEGORIZED |
event_data.md1.product |
metadata.product_event_type |
Mappato direttamente |
md1.product |
metadata.product_event_type |
Mappato direttamente |
event_data.device.externalId |
metadata.product_log_id |
Mappato direttamente |
event_data.externalId |
metadata.product_log_id |
Mappato direttamente |
md1.product |
metadata.product_name |
Mappato direttamente |
event_data.md1.schemaVersion |
metadata.product_version |
Mappato direttamente |
schemaVersion |
metadata.product_version |
Mappato direttamente |
dns_answers |
network.dns.answers |
Unita |
dns_questions |
network.dns.questions |
Unita |
event_data.domain |
principal.administrative_domain |
Mappato direttamente |
event_data.application |
principal.application |
Mappato direttamente |
event_data.hostName |
principal.asset.hostname |
Mappato direttamente |
event_data.source.ip |
principal.asset.ip |
Unita |
event_data.device.userDeviceName |
principal.hostname |
Mappato direttamente |
event_data.hostName |
principal.hostname |
Mappato direttamente |
event_data.source.ip |
principal.ip |
Unita |
event_data.source.port |
principal.port |
Rinominate/mappate |
event_data_event_dataType_id |
principal.process.pid |
Mappato direttamente |
event_data.cve.consoleUrl |
principal.url |
Mappato direttamente |
event_data.event_dataUrl |
principal.url |
Mappato direttamente |
device.user.email |
principal.user.email_addresses |
Unita |
event_data.user.userEmail |
principal.user.email_addresses |
Unita |
event_data.account.name |
principal.user.user_display_name |
Mappato direttamente |
event_data.user.userName |
principal.user.user_display_name |
Mappato direttamente |
customer.customerId |
principal.user.userid |
Mappato direttamente |
customerId |
principal.user.userid |
Mappato direttamente |
device.user.email |
principal.user.userid |
Mappato direttamente |
event_data.account.customerId |
principal.user.userid |
Mappato direttamente |
event_data.customerId |
principal.user.userid |
Mappato direttamente |
actionforBlocked |
security_result.action |
Unita |
event_data_event_dataType_name |
security_result.description |
Mappato direttamente |
attribution_label |
security_result.detection_fields |
Unita |
baseScore_label |
security_result.detection_fields |
Unita |
cve_id_label |
security_result.detection_fields |
Unita |
exploitAvailable_label |
security_result.detection_fields |
Unita |
permission_label |
security_result.detection_fields |
Unita |
threats_label |
security_result.detection_fields |
Unita |
event_data.cve.severity |
security_result.severity |
Mappato direttamente |
event_data.blockReason |
security_result.summary |
Mappato direttamente |
event_data.cve.cveDetailUrl |
security_result.url_back_to_product |
Mappato direttamente |
event_data.device.deviceId |
target.asset.asset_id |
Mappato direttamente |
event_data.destination.name |
target.asset.hostname |
Mappato direttamente |
device.carrier.ipAddress |
target.asset.ip |
Unita |
device.network.assignedIp |
target.asset.ip |
Unita |
device.network.publicIp |
target.asset.ip |
Unita |
event_data.destination.ip |
target.asset.ip |
Unita |
event_data.destinationIp |
target.asset.ip |
Unita |
ip |
target.asset.ip |
Unita |
app_id_md5 |
target.file.md5 |
Mappato direttamente |
app_id_sha1 |
target.file.sha1 |
Mappato direttamente |
app_id_sha256 |
target.file.sha256 |
Mappato direttamente |
event_data.destination.name |
target.hostname |
Mappato direttamente |
device.carrier.ipAddress |
target.ip |
Unita |
device.network.assignedIp |
target.ip |
Unita |
device.network.publicIp |
target.ip |
Unita |
event_data.destination.ip |
target.ip |
Unita |
event_data.destinationIp |
target.ip |
Unita |
ip |
target.ip |
Unita |
device.location.countryName |
target.location.country_or_region |
Mappato direttamente |
event_data.location |
target.location.name |
Mappato direttamente |
device.hw.wifiMacAddress |
target.mac |
Unita |
device.network.bssid |
target.mac |
Unita |
event_data.accessPointBssid |
target.mac |
Unita |
event_data_device_os_osVersion |
target.platform_version |
Mappato direttamente |
event_data.destination.port |
target.port |
Rinominate/mappate |
event_data.device.deviceName |
target.resource.name |
Mappato direttamente |
event_data.user.email |
target.user.email_addresses |
Unita |
event_data.user.email |
target.user.userid |
Mappato direttamente |
event_data.user.name |
target.user.userid |
Mappato direttamente |
| N/D | metadata.event_type |
Costante: STATUS_UPDATE |
| N/D | metadata.product_name |
Costante: JAMF_SECURITY_CLOUD |
| N/D | metadata.vendor_name |
Costante: JAMF_SECURITY_CLOUD |
| N/D | security_result.severity |
Costante: INFORMATIONAL |
| N/D | target.platform |
Costante: WINDOWS |
Log delle modifiche
Visualizza il log delle modifiche per questo parser
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.