Raccogliere i log di Okta
Questo documento spiega come importare i log di Okta in Google Security Operations utilizzando l'API Okta. Il parser estrae i log di sistema, gestendo sia i singoli eventi sia gli eventi raggruppati all'interno di un array JSON. Normalizza i dati nel formato UDM, mappa i campi Okta agli equivalenti UDM, arricchisce i dati con gli agenti utente analizzati, le informazioni geografiche e i dettagli di autenticazione e genera eventi di risultati di sicurezza in base ai risultati e alle informazioni sui rischi.
Prima di iniziare
- Assicurati di avere un'istanza Google SecOps.
- Assicurati di disporre dell'accesso con privilegi a Okta.
Configurare Okta
Per configurare l'accesso SSO di Okta, completa le seguenti attività:
Creare un utente amministrativo Okta con privilegi di sola lettura
- Accedi alla console di amministrazione di Okta.
Crea un utente standard.
- Vai a Directory > Persone.
- Fai clic su Aggiungi persona e compila i campi obbligatori.
Seleziona Sicurezza > Amministratori.
Fai clic su Aggiungi amministratore.
Nel campo Assegnazione amministratore da parte dell'amministratore, individua l'utente standard.
Nella sezione Ruoli, seleziona Amministratore di sola lettura dall'elenco.
Esci dall'account amministratore.
Recupera chiave API
- Accedi alla console di amministrazione Okta con l'utente amministratore di sola lettura.
- Vai a Sicurezza > API > Token.
- Fai clic su Crea token.
- Fornisci un nome significativo per il token.
- Fornisci la zona IP in cui verrà utilizzata l'API (se hai dubbi, puoi selezionare qualsiasi IP).
- Fai clic su Crea token.
- Copia la chiave API.
- Fai clic su Ok.
Configura un feed in Google SecOps per importare i log di Okta
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio Log di Okta).
- Seleziona API di terze parti come Tipo di origine.
- Seleziona Okta come Tipo di log.
- Fai clic su Avanti.
- Specifica i valori per i seguenti parametri di input:
- Intestazione HTTP per l'autenticazione: inserisci la chiave API Okta nel seguente formato:
Authorization:<API_KEY>
. - Nome host dell'API: specifica il nome di dominio dell'host Okta (ad esempio
<your-domain>.okta.com
). - Spazio dei nomi degli asset: lo spazio dei nomi degli asset.
- Etichette di importazione: l'etichetta applicata agli eventi di questo feed.
- Intestazione HTTP per l'autenticazione: inserisci la chiave API Okta nel seguente formato:
- Fai clic su Avanti.
- Controlla la configurazione del feed nella schermata Concludi e poi fai clic su Invia.
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logica |
---|---|---|
actor.alternateId |
principal.user.email_addresses |
Estratto da actor.alternateId se si tratta di un indirizzo email. Se non è un indirizzo email, viene utilizzato come principal.user.userid . |
actor.displayName |
principal.user.user_display_name |
Mappatura diretta. |
actor.id |
principal.user.product_object_id |
Mappatura diretta. |
actor.type |
principal.user.attribute.roles.name |
Mappatura diretta. |
authenticationContext.authenticationProvider |
security_result.detection_fields.value |
Mappata direttamente, con chiave authenticationProvider . |
authenticationContext.credentialProvider |
security_result.detection_fields.value |
Mappata direttamente, con chiave credentialProvider . |
authenticationContext.credentialType |
extensions.auth.mechanism |
Utilizzato per dedurre il meccanismo di autenticazione (OTP, USERNAME_PASSWORD, LOCAL). |
authenticationContext.externalSessionId |
network.parent_session_id |
Mappatura diretta. |
client.device |
principal.asset.type /additional.fields.value.string_value |
Mappato a principal.asset.type (WORKSTATION, MOBILE, ROLE_UNSPECIFIED) in base al valore. Mappato anche come valore di stringa con chiave device in additional.fields . |
client.geographicalContext.city |
principal.location.city |
Mappatura diretta. |
client.geographicalContext.country |
principal.location.country_or_region |
Mappatura diretta. |
client.geographicalContext.geolocation.lat |
principal.location.region_latitude |
Mappatura diretta. |
client.geographicalContext.geolocation.lon |
principal.location.region_longitude |
Mappatura diretta. |
client.geographicalContext.postalCode |
additional.fields.value.string_value |
Mappato direttamente come valore di stringa con chiave Postal code in additional.fields . |
client.geographicalContext.state |
principal.location.state |
Mappatura diretta. |
client.ipAddress |
principal.ip , principal.asset.ip |
Mappatura diretta. |
client.userAgent.browser |
target.resource.attribute.labels.value |
Mappata direttamente, con chiave Browser . |
client.userAgent.os |
principal.platform |
Mappato alla piattaforma (LINUX, WINDOWS, MAC) in base al valore. |
client.userAgent.rawUserAgent |
network.http.user_agent , network.http.parsed_user_agent |
Mappatura e analisi dirette. |
client.zone |
additional.fields.value.string_value |
Mappato direttamente come valore di stringa con chiave zone in additional.fields . |
debugContext.debugData.behaviors |
security_result.description , security_result.detection_fields |
Mappati direttamente alla descrizione. I singoli comportamenti vengono estratti e aggiunti come campi di rilevamento. |
debugContext.debugData.changedAttributes |
security_result.detection_fields.value |
Mappata direttamente, con chiave changedAttributes . |
debugContext.debugData.clientAddress |
principal.ip , principal.asset.ip |
Mappatura diretta se mancano request.ipChain e client.ipAddress . |
debugContext.debugData.deviceFingerprint |
target.asset.asset_id |
Mappatura diretta, con prefisso device_finger_print: . |
debugContext.debugData.dtHash |
security_result.detection_fields.value |
Mappata direttamente, con chiave dtHash . |
debugContext.debugData.factor |
security_result.detection_fields.value |
Mappata direttamente, con chiave factor . |
debugContext.debugData.factorIntent |
security_result.detection_fields.value |
Mappata direttamente, con chiave factorIntent . |
debugContext.debugData.logOnlySecurityData.risk.reasons |
security_result.detection_fields.value |
Mappata direttamente, con chiave Risk Reasons . |
debugContext.debugData.privilegeGranted |
target.user.attribute.roles |
Suddivisi in singoli privilegi e aggiunti come ruoli con nome e descrizione. |
debugContext.debugData.pushOnlyResponseType |
security_result.detection_fields.value |
Mappata direttamente, con chiave pushOnlyResponseType . |
debugContext.debugData.pushWithNumberChallengeResponseType |
security_result.detection_fields.value |
Mappata direttamente, con chiave pushWithNumberChallengeResponseType . |
debugContext.debugData.requestUri |
extensions.auth.auth_details |
Mappatura diretta. |
debugContext.debugData.suspiciousActivityEventId |
security_result.detection_fields.value |
Mappata direttamente, con chiave suspiciousActivityEventId . |
debugContext.debugData.suspiciousActivityEventType |
security_result.detection_fields.value |
Mappata direttamente, con chiave suspiciousActivityEventType . |
debugContext.debugData.threatDetections |
security_result.detection_fields.value |
Mappata direttamente, con chiave threatDetections . |
debugContext.debugData.threatSuspected |
security_result.detection_fields.value , security_result.threat_status |
Mappato come campo di rilevamento con chiave threatSuspected . Utilizzato per dedurre lo stato della minaccia (ACTIVE o FALSE_POSITIVE). |
debugContext.debugData.url |
target.url |
Mappatura diretta. |
displayMessage |
security_result.summary |
Mappatura diretta. |
eventType |
metadata.product_event_type , metadata.event_type |
Mappato direttamente a product_event_type . Utilizzato per dedurre event_type (USER_LOGIN, USER_LOGOUT, USER_CHANGE_PASSWORD, USER_CHANGE_PERMISSIONS, USER_DELETION, GROUP_MODIFICATION, SETTING_MODIFICATION, SCHEDULED_TASK_ENABLE, RESOURCE_CREATION, USER_UNCATEGORIZED). |
legacyEventType |
security_result.detection_fields.value |
Mappata direttamente, con chiave legacyEventType . |
outcome.reason |
security_result.category_details |
Mappatura diretta. |
outcome.result |
security_result.action |
Mappato all'azione (ALLOW, CHALLENGE, BLOCK) in base al valore. |
published |
metadata.event_timestamp |
Analizzati in base al timestamp. |
request.ipChain.n.geographicalContext |
intermediary.location |
Contesto geografico degli IP intermedi nella catena di richieste. |
request.ipChain.n.ip |
intermediary.ip |
Indirizzi IP degli intermediari nella catena di richieste. |
securityContext.asNumber |
security_result.detection_fields.value |
Mappata direttamente, con chiave asNumber . |
securityContext.asOrg |
security_result.detection_fields.value |
Mappata direttamente, con chiave asOrg . |
securityContext.domain |
security_result.detection_fields.value |
Mappata direttamente, con chiave domain . |
securityContext.isp |
security_result.detection_fields.value |
Mappata direttamente, con chiave isp . |
securityContext.isProxy |
security_result.detection_fields.value |
Mappata direttamente, con chiave anonymized IP . |
target.n.alternateId |
target.user.email_addresses /target.user.userid |
Se si tratta di un indirizzo email, deve essere mappato a target.user.email_addresses . Se non è un indirizzo email, viene utilizzato come target.user.userid . |
target.n.detailEntry.clientAppId |
target.asset_id |
Mappatura diretta, con prefisso Client_app_id: . |
target.n.detailEntry.methodTypeUsed |
target.resource_ancestors.attribute.labels.value |
Mappato direttamente, con chiave methodTypeUsed quando il tipo di destinazione è AuthenticatorEnrollment. |
target.n.detailEntry.methodUsedVerifiedProperties |
target.resource_ancestors.attribute.labels.value |
Mappato direttamente, con chiave methodUsedVerifiedProperties quando il tipo di destinazione è AuthenticatorEnrollment. |
target.n.detailEntry.policyType |
target.resource_ancestors.attribute.labels.value |
Mappata direttamente, con chiave Policy Type . |
target.n.detailEntry.signOnModeType |
security_result.detection_fields.value |
Mappata direttamente, con chiave signOnModeType . |
target.n.displayName |
target.user.user_display_name / target.application / target.resource.name |
Mappatura eseguita in base al tipo di target. |
target.n.id |
target.user.product_object_id / target.resource.product_object_id / target.resource_ancestors.product_object_id |
Mappatura eseguita in base al tipo di target. |
target.n.type |
target.user.attribute.roles.name / target.resource.resource_subtype / target.resource_ancestors.resource_subtype |
Mappatura eseguita in base al tipo di target. |
transaction.id |
network.session_id |
Mappatura diretta. |
transaction.type |
additional.fields.value.string_value |
Mappato direttamente come valore di stringa con chiave type in additional.fields . |
uuid |
metadata.product_log_id |
Mappatura diretta. |
N/D | metadata.vendor_name |
Imposta su Okta . |
N/D | metadata.product_name |
Imposta su Okta . |
N/D | extensions.auth.type |
Impostato su SSO . |
N/D | is_alert |
Imposta su true per gli eventi security.threat.detected e user.account.report_suspicious_activity_by_enduser . |
N/D | is_significant |
Imposta su true per gli eventi security.threat.detected e user.account.report_suspicious_activity_by_enduser . |
Modifiche
2024-05-16
- Se
is_alert
è true eis_significant
è true, impostasecurity_result.alert_state
suALERTING
.
2024-03-05
- Campo
security_result.action
aggiornato per indicare se il traffico è stato consentito o bloccato.
2024-02-16
Correzione di bug:
- Quando
target.0.type
èUser
oAppUser
,target.0.alternateId
viene mappato atarget.user.userid
. - Quando
target.1.type
èUser
oAppUser
,target.1.alternateId
viene mappato atarget.user.userid
.
2023-12-14
securityContext.asNumber
è stato mappato asecurity_result.detection_fields
.legacyEventType
è stato mappato asecurity_result.detection_fields
.- È stato aggiunto
conditional_check
prima dell'impostazionemetadata.event_type
.
2023-06-28
- Il valore completo mappato di
debugContext.debugData.suspiciousActivityEventType
asecurity_result.detection_fields
. - Il valore completo mappato di
debugContext.debugData.logOnlySecurityData.behaviors.New Device
asecurity_result.detection_fields
.
2023-06-09
- Il campo
debugContext.debugData.deviceFingerprint
è mappato atarget.asset.asset_id
. - Il valore completo mappato di
debugContext.debugData.risk.reasons
asecurity_result.detection_fields
.
2023-05-17
- Il campo "authenticationContext.externalSessionId" è mappato a "network.parent_session_id".
- Il campo "debugContext.debugData.pushOnlyResponseType" è mappato a "security_result.detection_fields.key/value".
- Il campo "debugContext.debugData.factor" è mappato a "security_result.detection_fields.key/value".
- Il campo "debugContext.debugData.factorIntent" è mappato a "security_result.detection_fields.key/value".
- Il campo "debugContext.debugData.pushWithNumberChallengeResponseType" è mappato a "security_result.detection_fields.key/value".
- Il campo "debugContext.debugData.dtHash" è mappato a "security_result.detection_fields.key/value".
- Il campo "client.userAgent.rawUserAgent" è mappato a "network.http.user_agent".
- È stata modificata la mappatura da "ALLOW_WITH_MODIFICATION" al valore enumerato "CHALLENGE" in "security_result.action".
- Per l'eventType "system.api_token.create", è stato modificato metadata.event_type da "USER_UNCATEGORIZED" a "RESOURCE_CREATION".
2023-04-28
Correzione di bug:
- Mappatura modificata per
security_result.threat_status
inACTIVE
quandodebugContext.debugData.threatSuspected
ètrue
, altrimenti mappata aFALSE_POSITIVE
.
2023-03-24
- I campi
logOnlySecurityData
sono stati mappati asecurity_result.detection_fields
. - Inoltre, è stato risolto l'errore di analisi aggiungendo
DEFERRED
all'elenco di azioni.
2023-04-11
- I campi mappati a
http.user_agent
sono stati rimappati ahttp.parsed_user_agent
. target.displayName
è stato mappato atarget.resource_ancestors.name
.targetfield.detailEntry.methodTypeUsed
è stato mappato atarget.resource_ancestors.attribute.labels
.targetfield.detailEntry.methodUsedVerifiedProperties
è stato mappato atarget.resource_ancestors.attribute.labels
.
2023-02-20
- Il valore di
metadata.event_type
è cambiato daUSER_LOGIN
aSTATUS_UPDATE
doveeventType
èuser.authentication.auth_via_AD_agent
2022-12-14
debugContext.debugData.changedAttributes
è stato mappato asecurity_result.detection_fields
.- È stato aggiunto il controllo null per
detail.actor.alternateId
.
2022-11-17
- Il campo
target[n].alternateId
è mappato atarget.resource.attribute.labels
. - Il campo
detail.target.0.alternateId
è mappato atarget.resource.attribute.labels
.
2022-11-08
Correzione di bug:
- Aggiunta una condizione per il controllo corretto dell'email per il campo
user_email
. - È stato aggiunto il controllo per il campo
Action1
non presente inRATE_LIMIT
. - È stato aggiunto un controllo di valori null e sconosciuti per
actor.displayName
.
2022-11-04
- È stato aggiunto il supporto per i log con più eventi.
2022-10-15
signOnModeType
mappato asecurity_result.detection_fields
.authenticationProvider
mappato asecurity_result.detection_fields
.credentialProvider
mappato asecurity_result.detection_fields
.device
mappato aadditional.fields
.zone
mappato aadditional.fields
.type
mappato aadditional.fields
.
2022-10-14
Correzione di bug:
- È stato aggiunto il controllo condizionale per "principal.user.email_addresses" e "target.user.email_addresses".
- È stato aggiunto il pattern grok per verificare la presenza di un indirizzo IP valido per il campo "request.ipChain.0.ip" mappato a "principal.ip".
- È stata aggiunta la condizione on_error per il campo "debugContext.debugData.url" mappato a "target.url".
2022-10-03
client.userAgent.os
è stato mappato aprincipal.platform
.client.device
è stato mappato aprincipal.asset.type
.- È stata mappata la stringa hardcoded
anonymized IP
a security_result.detection_fields.key, dove il valore "securityContext.isProxy" corrisponde a security_result.detection_fields.value.
2022-09-16
- "securityContext.asOrg" mappato a "security_result.category_details".
- 'securityContext.isProxy' mappato a 'security_result.detection_fields'.
- 'securityContext.domain' mappato a 'security_result.detection_fields'.
- 'securityContext.isp' mappato a 'security_result.detection_fields'.
- "debugContext.debugData.risk.level" mappato a "security_result.severity".
- 'debugContext.debugData.risk.reasons' mappato a 'security_result.detection_fields'.
2022-08-12
- i log appena importati sono stati analizzati e mappati ai seguenti campi:
- "detail.uuid" mappato a "metadata.product_log_id".
- 'detail.eventType' mappato a 'metadata.product_event_type'
- 'detail.actor.id' mappato a 'principal.user.product_object_id'.
- if 'detail.actor.alternateId' mapped to 'principal.user.userid' else
- "detail.actor.alternateId" mappato a "principal.user.email_addresses".
- "detail.actor.displayName" mappato a "principal.user.user_display_name".
- "detail.actor.type" mappato a ".principal.user.attribute.roles".
- 'detail.client.ipChain.0.ip' mappato a 'principal.ip'.
- 'detail.client.ipChain.0.geographicalContext.state' mappato a 'principal.location.state'.
- 'detail.client.ipChain.0.geographicalContext.city' mappato a 'principal.location.city'.
- 'detail.client.ipChain.0.geographicalContext.country' mappato a 'principal.location.country_or_region'.
- 'detail.debugContext.debugData.requestUri' mappato a 'target.url'.
- 'detail.target.0.type' mappato a 'target.resource.resource_subtype'.
- 'detail.target.0.id' mappato a 'target.resource.resource.product_object_id'.
- "detail.target.0.displayName" mappato a "target.resource.resource_subtype".
- 'detail.target.0.detailEntry.policyType' mappato a 'target.resource_ancestors.attribute.labels'.
- 'detail.outcome.reason' mappato a 'security_result.category_details'.
- 'detail.debugContext.debugData.threatSuspected' mappato a 'security_result.detection_fields'.
- "detail.displayMessage" mappato a "security_result.summary".
- 'detail.outcome.result' mappato a 'security_result.action'.
- 'detail.severity' mappato a 'security_result.severity'.
- 'detail.transaction.id' mappato a 'network.session_id'.
- 'detail.debugContext.debugData.requestUri' mappato a 'extensions.auth.auth_details'.
2022-07-08
- Mappatura modificata per
actor.type
daprincipal.user.role_name
aprincipal.user.attribute.roles
. - Mappatura modificata per
target.0.type
datarget.user.role_name
atarget.user.attribute.roles
. - Mappatura modificata per
target.1.type
datarget.user.role_name
atarget.user.attribute.roles
.
2022-06-15
Miglioramento:
- per
target.0.type
==Token
. target.0.detailEntry.clientAppId
è stato mappato atarget.asset_id
.- È stato aggiunto un controllo condizionale per il campo "transaction.id" mappato al campo UDM "network.session_id".
2022-06-03
Miglioramento:
- È stato mappato anche debugContext.debugData.privilegeGranted a target.user.attribute.roles.name.
- È stata mappata la richiesta debugContext.debugData.requestUri ad extensions.auth.auth_details.
- Sono stati mappati debugContext.debugData.suspiciousActivityEventId, debugContext.debugData.threatDetections e debugContext.debugData.threatSuspected a security_result.detection_fields.
2022-03-22
Miglioramento:
- debugContext.debugData.behaviors mappato a security_result.description.
- debugContext.debugData.threatSuspected mappato a security_result.threat_status.
- debugContext.debugData.risk mappato a security_result.severity.
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.