Collecter les journaux Okta
Ce document explique comment ingérer les journaux Okta dans Google Security Operations à l'aide de l'API Okta. L'analyseur extrait les journaux système, traitant à la fois les événements uniques et les événements groupés dans un tableau JSON. Il normalise les données au format UDM, mappe les champs Okta sur les équivalents UDM, enrichit les données avec des agents utilisateur analysés, des informations géographiques et des informations d'authentification, et génère des événements de résultats de sécurité en fonction des résultats et des informations sur les risques.
Avant de commencer
- Assurez-vous de disposer d'une instance Google SecOps.
- Assurez-vous de disposer d'un accès privilégié à Okta.
Configurer Okta
Pour configurer l'authentification unique Okta, effectuez les tâches suivantes:
Créer un utilisateur administrateur Okta avec des droits en lecture seule
- Connectez-vous à la console d'administration Okta.
Créez un utilisateur avec des droits standards.
- Accédez à Annuaire > Personnes.
- Cliquez sur Ajouter une personne et remplissez les champs obligatoires.
Sélectionnez Sécurité > Administrateurs.
Cliquez sur Ajouter un administrateur.
Dans le champ Attribution par l'administrateur, recherchez l'utilisateur standard.
Dans la section Rôles, sélectionnez Administrateur en lecture seule dans la liste.
Déconnectez-vous du compte administrateur.
Obtenir une clé API
- Connectez-vous à la console d'administration Okta avec l'utilisateur administrateur en lecture seule.
- Accédez à Sécurité > API > Jetons.
- Cliquez sur Créer un jeton.
- Attribuez un nom explicite au jeton.
- Indiquez la zone IP dans laquelle l'API sera utilisée (vous pouvez sélectionner n'importe quelle adresse IP si vous n'êtes pas sûr).
- Cliquez sur Créer un jeton.
- Copiez la clé API.
- Cliquez sur OK, j'ai compris.
Configurer un flux dans Google SecOps pour ingérer les journaux Okta
- Accédez à SIEM Settings > Feeds (Paramètres du SIEM > Flux).
- Cliquez sur Ajouter.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux Okta).
- Sélectionnez API tierce comme type de source.
- Sélectionnez Okta comme type de journal.
- Cliquez sur Suivant.
- Spécifiez les valeurs des paramètres d'entrée suivants :
- En-tête HTTP d'authentification: saisissez la clé API Okta au format suivant:
Authorization:<API_KEY>
. - Nom d'hôte de l'API: spécifiez le nom de domaine de votre hôte Okta (par exemple,
<your-domain>.okta.com
). - Espace de noms des éléments: espace de noms des éléments.
- Libellés d'ingestion: libellé appliqué aux événements de ce flux.
- En-tête HTTP d'authentification: saisissez la clé API Okta au format suivant:
- Cliquez sur Suivant.
- Vérifiez la configuration du flux dans l'écran Finaliser, puis cliquez sur Envoyer.
Tableau de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
actor.alternateId |
principal.user.email_addresses |
Extrait de actor.alternateId s'il s'agit d'une adresse e-mail. Si ce n'est pas une adresse e-mail, utilisé comme principal.user.userid . |
actor.displayName |
principal.user.user_display_name |
Mappage direct. |
actor.id |
principal.user.product_object_id |
Mappage direct. |
actor.type |
principal.user.attribute.roles.name |
Mappage direct. |
authenticationContext.authenticationProvider |
security_result.detection_fields.value |
Mappage direct, avec la clé authenticationProvider . |
authenticationContext.credentialProvider |
security_result.detection_fields.value |
Mappage direct, avec la clé credentialProvider . |
authenticationContext.credentialType |
extensions.auth.mechanism |
Permet d'extraire le mécanisme d'authentification (OTP, USERNAME_PASSWORD, LOCAL). |
authenticationContext.externalSessionId |
network.parent_session_id |
Mappage direct. |
client.device |
principal.asset.type /additional.fields.value.string_value |
Mappé sur principal.asset.type (WORKSTATION, MOBILE, ROLE_UNSPECIFIED) en fonction de la valeur. Également mappé en tant que valeur de chaîne avec la clé device dans additional.fields . |
client.geographicalContext.city |
principal.location.city |
Mappage direct. |
client.geographicalContext.country |
principal.location.country_or_region |
Mappage direct. |
client.geographicalContext.geolocation.lat |
principal.location.region_latitude |
Mappage direct. |
client.geographicalContext.geolocation.lon |
principal.location.region_longitude |
Mappage direct. |
client.geographicalContext.postalCode |
additional.fields.value.string_value |
Mappé directement en tant que valeur de chaîne avec la clé Postal code dans additional.fields . |
client.geographicalContext.state |
principal.location.state |
Mappage direct. |
client.ipAddress |
principal.ip , principal.asset.ip |
Mappage direct. |
client.userAgent.browser |
target.resource.attribute.labels.value |
Mappage direct, avec la clé Browser . |
client.userAgent.os |
principal.platform |
Mappé sur la plate-forme (LINUX, WINDOWS, MAC) en fonction de la valeur. |
client.userAgent.rawUserAgent |
network.http.user_agent , network.http.parsed_user_agent |
Mappage et analyse directs. |
client.zone |
additional.fields.value.string_value |
Mappé directement en tant que valeur de chaîne avec la clé zone dans additional.fields . |
debugContext.debugData.behaviors |
security_result.description , security_result.detection_fields |
Mappé directement sur la description. Les comportements individuels sont extraits et ajoutés en tant que champs de détection. |
debugContext.debugData.changedAttributes |
security_result.detection_fields.value |
Mappage direct, avec la clé changedAttributes . |
debugContext.debugData.clientAddress |
principal.ip , principal.asset.ip |
Mappé directement si request.ipChain et client.ipAddress sont manquants. |
debugContext.debugData.deviceFingerprint |
target.asset.asset_id |
Mappé directement, avec le préfixe device_finger_print: . |
debugContext.debugData.dtHash |
security_result.detection_fields.value |
Mappage direct, avec la clé dtHash . |
debugContext.debugData.factor |
security_result.detection_fields.value |
Mappage direct, avec la clé factor . |
debugContext.debugData.factorIntent |
security_result.detection_fields.value |
Mappage direct, avec la clé factorIntent . |
debugContext.debugData.logOnlySecurityData.risk.reasons |
security_result.detection_fields.value |
Mappage direct, avec la clé Risk Reasons . |
debugContext.debugData.privilegeGranted |
target.user.attribute.roles |
Ils ont été divisés en droits individuels et ajoutés en tant que rôles avec un nom et une description. |
debugContext.debugData.pushOnlyResponseType |
security_result.detection_fields.value |
Mappage direct, avec la clé pushOnlyResponseType . |
debugContext.debugData.pushWithNumberChallengeResponseType |
security_result.detection_fields.value |
Mappage direct, avec la clé pushWithNumberChallengeResponseType . |
debugContext.debugData.requestUri |
extensions.auth.auth_details |
Mappage direct. |
debugContext.debugData.suspiciousActivityEventId |
security_result.detection_fields.value |
Mappage direct, avec la clé suspiciousActivityEventId . |
debugContext.debugData.suspiciousActivityEventType |
security_result.detection_fields.value |
Mappage direct, avec la clé suspiciousActivityEventType . |
debugContext.debugData.threatDetections |
security_result.detection_fields.value |
Mappage direct, avec la clé threatDetections . |
debugContext.debugData.threatSuspected |
security_result.detection_fields.value , security_result.threat_status |
Mappé en tant que champ de détection avec la clé threatSuspected . Permet d'obtenir l'état de la menace (ACTIVE ou FALSE_POSITIVE). |
debugContext.debugData.url |
target.url |
Mappage direct. |
displayMessage |
security_result.summary |
Mappage direct. |
eventType |
metadata.product_event_type , metadata.event_type |
Mappé directement sur product_event_type . Utilisé pour dériver 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 |
Mappage direct, avec la clé legacyEventType . |
outcome.reason |
security_result.category_details |
Mappage direct. |
outcome.result |
security_result.action |
Mappé sur une action (ALLOW, CHALLENGE, BLOCK) en fonction de la valeur. |
published |
metadata.event_timestamp |
Analysé en code temporel. |
request.ipChain.n.geographicalContext |
intermediary.location |
Contexte géographique des adresses IP intermédiaires dans la chaîne de requêtes. |
request.ipChain.n.ip |
intermediary.ip |
Adresses IP des intermédiaires de la chaîne de requêtes. |
securityContext.asNumber |
security_result.detection_fields.value |
Mappage direct, avec la clé asNumber . |
securityContext.asOrg |
security_result.detection_fields.value |
Mappage direct, avec la clé asOrg . |
securityContext.domain |
security_result.detection_fields.value |
Mappage direct, avec la clé domain . |
securityContext.isp |
security_result.detection_fields.value |
Mappage direct, avec la clé isp . |
securityContext.isProxy |
security_result.detection_fields.value |
Mappage direct, avec la clé anonymized IP . |
target.n.alternateId |
target.user.email_addresses /target.user.userid |
S'il s'agit d'une adresse e-mail, elle est mappée sur target.user.email_addresses . Si ce n'est pas une adresse e-mail, utilisé comme target.user.userid . |
target.n.detailEntry.clientAppId |
target.asset_id |
Mappées directement, précédées du préfixe Client_app_id: . |
target.n.detailEntry.methodTypeUsed |
target.resource_ancestors.attribute.labels.value |
Mappage direct, avec la clé methodTypeUsed lorsque le type de cible est "Enregistrement dans l'Authentificateur". |
target.n.detailEntry.methodUsedVerifiedProperties |
target.resource_ancestors.attribute.labels.value |
Mappage direct, avec la clé methodUsedVerifiedProperties lorsque le type de cible est "Enregistrement dans l'Authentificateur". |
target.n.detailEntry.policyType |
target.resource_ancestors.attribute.labels.value |
Mappage direct, avec la clé Policy Type . |
target.n.detailEntry.signOnModeType |
security_result.detection_fields.value |
Mappage direct, avec la clé signOnModeType . |
target.n.displayName |
target.user.user_display_name / target.application / target.resource.name |
Mappage basé sur le type de cible. |
target.n.id |
target.user.product_object_id / target.resource.product_object_id / target.resource_ancestors.product_object_id |
Mappage basé sur le type de cible. |
target.n.type |
target.user.attribute.roles.name / target.resource.resource_subtype / target.resource_ancestors.resource_subtype |
Mappage basé sur le type de cible. |
transaction.id |
network.session_id |
Mappage direct. |
transaction.type |
additional.fields.value.string_value |
Mappé directement en tant que valeur de chaîne avec la clé type dans additional.fields . |
uuid |
metadata.product_log_id |
Mappage direct. |
N/A | metadata.vendor_name |
Variable définie sur Okta . |
N/A | metadata.product_name |
Variable définie sur Okta . |
N/A | extensions.auth.type |
Variable définie sur SSO . |
N/A | is_alert |
Définissez cette valeur sur "true" pour les événements security.threat.detected et user.account.report_suspicious_activity_by_enduser . |
N/A | is_significant |
Définissez cette valeur sur "true" pour les événements security.threat.detected et user.account.report_suspicious_activity_by_enduser . |
Modifications
2024-05-16
- Si
is_alert
etis_significant
sont définis sur "true", définissezsecurity_result.alert_state
surALERTING
.
2024-03-05
- Mise à jour du champ
security_result.action
pour indiquer si le trafic a été autorisé ou bloqué.
2024-02-16
Correction de bug:
- Lorsque
target.0.type
estUser
ouAppUser
,target.0.alternateId
est mappé surtarget.user.userid
. - Lorsque
target.1.type
estUser
ouAppUser
,target.1.alternateId
est mappé surtarget.user.userid
.
2023-12-14
- Mappage de
securityContext.asNumber
sursecurity_result.detection_fields
. - Mappage de
legacyEventType
sursecurity_result.detection_fields
. - Ajout de
conditional_check
avant le paramétrage demetadata.event_type
.
2023-06-28
- La valeur complète de
debugContext.debugData.suspiciousActivityEventType
a été mappée sursecurity_result.detection_fields
. - Mappage de la valeur complète de
debugContext.debugData.logOnlySecurityData.behaviors.New Device
sursecurity_result.detection_fields
.
2023-06-09
- Le champ
debugContext.debugData.deviceFingerprint
est mappé surtarget.asset.asset_id
. - Mappage de la valeur complète de
debugContext.debugData.risk.reasons
sursecurity_result.detection_fields
.
2023-05-17
- Le champ "authenticationContext.externalSessionId" est mappé sur "network.parent_session_id".
- Le champ "debugContext.debugData.pushOnlyResponseType" est mappé sur "security_result.detection_fields.key/value".
- Le champ "debugContext.debugData.factor" est mappé sur "security_result.detection_fields.key/value".
- Le champ "debugContext.debugData.factorIntent" est mappé à "security_result.detection_fields.key/value".
- Le champ "debugContext.debugData.pushWithNumberChallengeResponseType" est mappé sur "security_result.detection_fields.key/value".
- Le champ "debugContext.debugData.dtHash" est mappé à "security_result.detection_fields.key/value".
- Le champ "client.userAgent.rawUserAgent" est mappé sur "network.http.user_agent".
- Modification de la mise en correspondance de "ALLOW_WITH_MODIFICATION" en valeur d'énumération "CHALLENGE" sous "security_result.action".
- Pour le type d'événement "system.api_token.create", la valeur de metadata.event_type a été modifiée de "USER_UNCATEGORIZED" à "RESOURCE_CREATION".
2023-04-28
Correction de bug:
- Modification du mappage de
security_result.threat_status
versACTIVE
lorsquedebugContext.debugData.threatSuspected
esttrue
, sinon mappé surFALSE_POSITIVE
.
24/03/2023
- Champs
logOnlySecurityData
mappés sursecurity_result.detection_fields
. - De plus, nous avons résolu l'erreur d'analyse en ajoutant
DEFERRED
à la liste d'actions.
2023-04-11
- Les champs mappés sur
http.user_agent
ont été remappés surhttp.parsed_user_agent
. - Mappage de
target.displayName
surtarget.resource_ancestors.name
. - Mappage de
targetfield.detailEntry.methodTypeUsed
surtarget.resource_ancestors.attribute.labels
. - Mappage de
targetfield.detailEntry.methodUsedVerifiedProperties
surtarget.resource_ancestors.attribute.labels
.
2023-02-20
metadata.event_type
est passé deUSER_LOGIN
àSTATUS_UPDATE
, oùeventType
estuser.authentication.auth_via_AD_agent
.
2022-12-14
- Mappage de
debugContext.debugData.changedAttributes
sursecurity_result.detection_fields
. - Ajout d'une vérification de valeur nulle pour
detail.actor.alternateId
.
2022-11-17
- Le champ
target[n].alternateId
est mappé surtarget.resource.attribute.labels
. - Le champ
detail.target.0.alternateId
est mappé surtarget.resource.attribute.labels
.
2022-11-08
Correction de bug:
- Ajout d'une condition pour vérifier correctement l'adresse e-mail du champ
user_email
. - Ajout de la vérification du champ
Action1
qui n'est pas dansRATE_LIMIT
. - Ajout d'une vérification de valeur nulle et inconnue pour
actor.displayName
.
2022-11-04
- Prise en charge des journaux contenant plusieurs événements.
2022-10-15
signOnModeType
mappé sursecurity_result.detection_fields
.authenticationProvider
mappé sursecurity_result.detection_fields
.credentialProvider
mappé sursecurity_result.detection_fields
.device
mappé suradditional.fields
.zone
mappé suradditional.fields
.type
mappé suradditional.fields
.
2022-10-14
Correction de bug:
- Ajout d'une vérification conditionnelle pour "principal.user.email_addresses" et "target.user.email_addresses".
- Ajout de grok pour vérifier la présence d'une adresse IP valide pour le champ "request.ipChain.0.ip" mappé sur "principal.ip".
- Ajout de la condition on_error pour le champ "debugContext.debugData.url" mappé sur "target.url".
2022-10-03
- Mappage de
client.userAgent.os
surprincipal.platform
. - Mappage de
client.device
surprincipal.asset.type
. - Mappage de
anonymized IP
(chaîne codée en dur) sur security_result.detection_fields.key où la valeur "securityContext.isProxy" correspond à security_result.detection_fields.value.
2022-09-16
- "securityContext.asOrg" mappé sur "security_result.category_details".
- "securityContext.isProxy" mappé sur "security_result.detection_fields".
- "securityContext.domain" mappé sur "security_result.detection_fields".
- "securityContext.isp" mappé sur "security_result.detection_fields".
- "debugContext.debugData.risk.level" mappé sur "security_result.severity".
- "debugContext.debugData.risk.reasons" mappé sur "security_result.detection_fields".
2022-08-12
- Les journaux nouvellement ingérés ont été analysés et mappés aux champs suivants:
- "detail.uuid" mappé sur "metadata.product_log_id".
- "detail.eventType" mappé sur "metadata.product_event_type"
- "detail.actor.id" mappé sur "principal.user.product_object_id".
- if 'detail.actor.alternateId' mapped to 'principal.user.userid' else
- "detail.actor.alternateId" mappé sur "principal.user.email_addresses".
- "detail.actor.displayName" mappé sur "principal.user.user_display_name".
- "detail.actor.type" mappé sur ".principal.user.attribute.roles".
- "detail.client.ipChain.0.ip" mappé sur "principal.ip".
- "detail.client.ipChain.0.geographicalContext.state" mappé sur "principal.location.state".
- "detail.client.ipChain.0.geographicalContext.city" mappé sur "principal.location.city".
- "detail.client.ipChain.0.geographicalContext.country" mappé sur "principal.location.country_or_region".
- "detail.debugContext.debugData.requestUri" mappé sur "target.url".
- "detail.target.0.type" mappé sur "target.resource.resource_subtype".
- "detail.target.0.id" mappé sur "target.resource.resource.product_object_id".
- "detail.target.0.displayName" mappé sur "target.resource.resource_subtype".
- "detail.target.0.detailEntry.policyType" mappé sur "target.resource_ancestors.attribute.labels".
- "detail.outcome.reason" mappé sur "security_result.category_details".
- "detail.debugContext.debugData.threatSuspected" mappé sur "security_result.detection_fields".
- "detail.displayMessage" mappé sur "security_result.summary".
- "detail.outcome.result" mappé sur "security_result.action".
- "detail.severity" mappé sur "security_result.severity".
- "detail.transaction.id" mappé sur "network.session_id".
- "detail.debugContext.debugData.requestUri" mappé sur "extensions.auth.auth_details".
2022-07-08
- Mappage modifié pour
actor.type
deprincipal.user.role_name
àprincipal.user.attribute.roles
. - Mappage modifié pour
target.0.type
detarget.user.role_name
àtarget.user.attribute.roles
. - Mappage modifié pour
target.1.type
detarget.user.role_name
àtarget.user.attribute.roles
.
2022-06-15
Amélioration :
- pour
target.0.type
==Token
. - Mappage de
target.0.detailEntry.clientAppId
surtarget.asset_id
. - Ajout d'une vérification conditionnelle pour le champ "transaction.id" mappé sur le champ UDM "network.session_id".
2022-06-03
Amélioration :
- Mappage de debugContext.debugData.privilegeGranted sur target.user.attribute.roles.name en plus.
- Mappage de debugContext.debugData.requestUri sur extensions.auth.auth_details.
- Correspondance de debugContext.debugData.suspiciousActivityEventId, debugContext.debugData.threatDetections et debugContext.debugData.threatSuspected avec security_result.detection_fields.
2022-03-22
Amélioration :
- debugContext.debugData.behaviors mappé sur security_result.description.
- debugContext.debugData.threatSuspected mappé sur security_result.threat_status.
- debugContext.debugData.risk mappé sur security_result.severity.
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.