Raccogli i log di JumpCloud Directory Insights
Questo documento spiega come importare i log di JumpCloud Directory Insights in Google Security Operations utilizzando Google Cloud Storage V2.
JumpCloud è una piattaforma di directory cloud che fornisce gestione delle identità, SSO e gestione dei dispositivi. Directory Insights fornisce log di controllo e delle attività che coprono l'autenticazione degli utenti, le azioni degli amministratori e gli eventi di sistema. Il parser mappa i campi dei log al modello UDM (Unified Data Model), gestendo tipi di eventi come accessi degli utenti, modifiche alle risorse e azioni di sicurezza.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Un'istanza Google SecOps
- Un progetto GCP con l'API Storage di Cloud Storage abilitata
- Autorizzazioni per creare e gestire bucket GCS e policy IAM
- Un account JumpCloud con un ruolo Admin (Amministratore) o Manager (Gestore) e una chiave API valida
Crea un bucket Google 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 globalmente univoco (ad esempio jumpcloud-directory-insights-logs)Tipo di località Scegli in base alle tue esigenze (Regione, a due regioni, multiregionale) Località Seleziona la località (ad esempio us-central1)Classe di archiviazione Standard (consigliato per i log ad accesso frequente) Controllo degli accessi Uniforme (consigliato) Strumenti di protezione (Facoltativo) Abilita il controllo delle versioni degli oggetti o la policy di conservazione Fai clic su Crea.
Esporta i log di JumpCloud Directory Insights in Google Cloud Storage
JumpCloud Directory Insights espone gli eventi tramite l'API Directory Insights. Utilizza uno script pianificato o una funzione Cloud Run per estrarre gli eventi e scriverli in GCS.
Genera una chiave API JumpCloud:
- Accedi al portale di amministrazione di JumpCloud.
- Vai all'icona del tuo profilo e seleziona La mia chiave API.
- Copia la chiave API.
Crea una funzione Cloud Run che esegua query sull'API JumpCloud Directory Insights, recuperi gli eventi e li scriva in GCS.
Attivare la funzione in base a una pianificazione utilizzando Cloud Scheduler e Pub/Sub.
- Assicurati che i file esportati mantengano il formato JSON originale.
- Ogni file deve contenere uno o più record di eventi.
Recupera il account di servizio Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni > Gestione dei dati > Feed. Se utilizzi una piattaforma solo SIEM, vai a Impostazioni > Feed.
- Fai clic su Aggiungi nuovo feed.
- Fai clic su Configura un singolo feed.
- Seleziona Google Cloud Storage V2 come Tipo di origine.
- Seleziona JumpCloud Directory Insights come Tipo di log.
Fai clic su Ottieni service account. Verrà visualizzato un indirizzo email univoco del account di servizio, ad esempio:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comCopia l'indirizzo email. Lo utilizzerai nel prossimo passaggio.
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'indirizzo email del account di servizio Google SecOps.
- Assegna ruoli: seleziona Visualizzatore oggetti Storage.
- Fai clic su Salva.
Configura un feed in Google SecOps per importare i log di JumpCloud Directory Insights
- Vai a Impostazioni > Gestione dei dati > Feed. Se utilizzi una piattaforma solo SIEM, vai a Impostazioni > 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 es.
JumpCloud Directory Insights Logs). - Seleziona Google Cloud Storage V2 come Tipo di origine.
- Seleziona JumpCloud Directory Insights come Tipo di log.
- Fai clic su Avanti.
Specifica i valori per i seguenti parametri di input:
Campo Valore URI del bucket di archiviazione gs://jumpcloud-directory-insights-logs/jumpcloud/Opzione di eliminazione dell'origine Seleziona l'opzione di eliminazione in base alle tue preferenze Maximum File Age (Days) 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
jumpcloud-directory-insights-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 di notizie nella schermata Finalizza e poi fai clic su Invia.
Tabella di mappatura UDM
| Campo log | Mappatura UDM | Logica |
|---|---|---|
| data.profile_list.payload_content.payload_type, data.profile_list.payload_content.payload_identifier, data.profile_list.payload_content.payload_uuid, data.profile_list.payload_content.payload_organization, data.profile_list.payload_content.payload_display_name, data.profile_list.payload_content.payload_description | about | Unito alle etichette degli attributi di payloadContent |
| data.association.op, data.association.action_source, data.geoip.region_code, data.service, data.event_type, data.@version, data.application.version, data.application.publisher, data.application.uninstall_string, data.changes.0.field, data.changes.0.from, data.changes.0.to, data.available_os_updates.allows_install_later | additional.fields | Unite alle etichette corrispondenti |
| extensions.auth.type | Impostato su "MACHINE" quando event_type è USER_LOGIN | |
| data.timestamp | metadata.event_timestamp | Conversione eseguita utilizzando la corrispondenza della data ISO8601, RFC 3339, yyyy-MM-ddTHH:mm:ss.SSSSSSZ |
| data.message, data.client_ip, data.initiated_by.username, data.system.hostname | metadata.event_type | Impostato su USER_LOGIN se il messaggio corrisponde a "connesso" e il target non è vuoto, altrimenti su USER_UNCATEGORIZED se sono presenti IP e ID utente, altrimenti su STATUS_UPDATE se sono presenti nome host o IP, altrimenti su USER_UNCATEGORIZED se è presente l'ID utente, altrimenti su GENERIC_EVENT |
| data.id | metadata.product_log_id | Valore copiato direttamente |
| data.@version, data.application.version | metadata.product_version | Impostato su data.@version, poi sostituito con data.application.version |
| data.application.name | principal.application | Valore copiato direttamente |
| data.mdm_type | principal.asset.hardware | Unito con il produttore impostato su data.mdm_type |
| data.command_uuid | principal.asset_id | Concatenato come "commandUuid:" + data.command_uuid |
| data.system.hostname | principal.hostname | Valore copiato direttamente |
| data.client_ip | principal.ip | Unito da data.client_ip |
| data.geoip.country_code | principal.location.country_or_region | Valore copiato direttamente |
| data.geoip.region_code | principal.location.name | Valore copiato direttamente |
| data.geoip.latitude | principal.location.region_latitude | Convertito in stringa e poi in numero in virgola mobile |
| data.geoip.longitude | principal.location.region_longitude | Convertito in stringa e poi in float |
| data.geoip.region_name | principal.location.state | Valore copiato direttamente |
| data.application.path, data.process_name | principal.process.file.full_path | Impostato su data.application.path, poi sostituito con data.process_name |
| data.association.connection.from.name, data.mdm_device_manager_id, data.request_type | principal.resource.attribute.labels | Unite alle etichette per connection_from_name, mdm_device_manager_id, request_type |
| data.system.id, data.resource.id, data.mdm_device_id | principal.resource.id | Impostato su data.system.id, poi sostituito con data.resource.id, poi sostituito con data.mdm_device_id |
| data.resource.username | principal.resource.name | Valore copiato direttamente |
| data.association.connection.from.object_id | principal.resource.product_object_id | Valore copiato direttamente |
| data.association.connection.from.type | principal.resource.type | Valore copiato direttamente |
| data.initiated_by.email | principal.user.email_addresses | Unito se l'email corrisponde a ^.+@.+$ |
| data.system.displayName | principal.user.user_display_name | Valore copiato direttamente |
| data.initiated_by.username, data.admin_info.name | principal.user.userid | Impostato su data.initiated_by.username, poi sostituito con data.admin_info.name, poi sostituito con data.initiated_by.username |
| data.success, data.status | sec_result.action | Imposta su ALLOW se success è true o se lo stato è Acknowledged, BLOCK se success è false |
| data.status, data.success | sec_result.action_details | Impostato su stato se non vuoto, altrimenti su operazione riuscita |
| data.success, data.status, data.security_info.management_status.is_activation_lock_manageable, data.security_info.management_status.is_user_enrollment, data.security_info.management_status.enrolled_via_dep, data.organization, data.windows_meta.logon_type, data.security_info.management_status.user_approved_enrollment | sec_result.detection_fields | Unito alle etichette per is_activation_lock_manageable, is_user_enrollment, enrolled_via_dep, organization, logon_type, user_approved_enrollment |
| data.query_responses.device_name | target.hostname | Valore copiato direttamente |
| data.query_responses.wifi_mac | target.mac | Unito da data.query_responses.wifi_mac |
| data.query_responses.model_name | target.platform | Imposta su "MAC" se corrisponde a (?i)mac |
| data.query_responses.os_version | target.platform_version | Valore copiato direttamente |
| data.query_responses.available_device_capacity, data.query_responses.device_capacity | target.resource.attribute.labels | Unito alle etichette per available_device_capacity, device_capacity |
| data.association.connection.to.name | target.resource.name | Valore copiato direttamente |
| data.association.connection.to.object_id | target.resource.product_object_id | Valore copiato direttamente |
| data.association.connection.to.type | target.resource.type | Valore copiato direttamente |
| data.profile_list.payload_organization | target.user.department | Unito da profile_payload_organization |
| metadata.vendor_name | Imposta su "JUMPCLOUD_DIRECTORY_INSIGHTS" | |
| metadata.product_name | Imposta su "JUMPCLOUD_DIRECTORY_INSIGHTS" | |
data.alert_id |
event.idm.read_only_udm.metadata.product_log_id |
Mappato dal log delle modifiche |
data.alert_title |
event.idm.read_only_udm.security_result.summary |
Mappato dal log delle modifiche |
data.category |
event.idm.read_only_udm.security_result.category_details |
Mappato dal log delle modifiche |
data.description |
event.idm.read_only_udm.security_result.description |
Mappato dal log delle modifiche |
data.priority |
event.idm.read_only_udm.security_result.priority |
Mappato dal log delle modifiche |
data.rule_id |
event.idm.read_only_udm.security_result.rule_id |
Mappato dal log delle modifiche |
data.event_description |
event.idm.read_only_udm.metadata.description |
Mappato dal log delle modifiche |
data.di_event.event_type |
event.idm.read_only_udm.metadata.product_event_type |
Mappato dal log delle modifiche |
data.di_event.initiated_by.email |
event.idm.read_only_udm.principal.user.email_addresses |
Mappato dal log delle modifiche |
data.di_event.initiated_by.id |
event.idm.read_only_udm.principal.user.product_object_id |
Mappato dal log delle modifiche |
data.di_event.client_ip |
event.idm.read_only_udm.principal.ip |
Mappato dal log delle modifiche |
data.di_event.association.connection.from.name |
event.idm.read_only_udm.target.group.group_display_name |
Mappato dal log delle modifiche |
data.di_event.association.connection.to.name |
event.idm.read_only_udm.about.user.userid |
Mappato dal log delle modifiche |
data.di_event.association.connection.to.object_id |
event.idm.read_only_udm.about.user.product_object_id |
Mappato dal log delle modifiche |
data.di_event.success |
event.idm.read_only_udm.security_result.action |
Mappato dal log delle modifiche |
data.di_event.service |
event.idm.read_only_udm.target.application |
Mappato dal log delle modifiche |
data.di_event.geoip.country_code |
event.idm.read_only_udm.principal.location.country_or_region |
Mappato dal log delle modifiche |
data.organization_name |
event.idm.read_only_udm.principal.user.company_name |
Mappato dal log delle modifiche |
data.di_event.@version |
event.idm.read_only_udm.metadata.product_version |
Mappato dal log delle modifiche |
data.source_url |
event.idm.read_only_udm.principal.url |
Mappato dal log delle modifiche |
data.di_event.initiated_by.source |
event.idm.read_only_udm.principal.hostname |
Mappato dal log delle modifiche |
data.source_name |
event.idm.read_only_udm.principal.user.userid |
Mappato dal log delle modifiche |
data.di_event.geoip.latitude |
event.idm.read_only_udm.principal.location.region_latitude |
Mappato dal log delle modifiche |
data.di_event.geoip.longitude |
event.idm.read_only_udm.principal.location.region_longitude |
Mappato dal log delle modifiche |
data.di_event.geoip.region_name |
event.idm.read_only_udm.principal.location.state |
Mappato dal log delle modifiche |
data.di_event.organization |
event.idm.read_only_udm.security_result.detection_fields |
Mappato dal log delle modifiche |
association_op", "action_source", and "sso_token_success |
additional.fields |
Mappato dal log delle modifiche |
connection_from_type |
principal.resource.resource_type |
Mappato dal log delle modifiche |
connection_from_object_id |
principal.resource.product_object_id |
Mappato dal log delle modifiche |
connection_to_name |
target.resource.name |
Mappato dal log delle modifiche |
connection_to_type |
target.resource.resource_type |
Mappato dal log delle modifiche |
connection_to_object_id |
target.resource.product_object_id |
Mappato dal log delle modifiche |
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.