Collecter les journaux Okta
Ce document explique comment ingérer des journaux Okta dans Google Security Operations à l'aide de l'API Okta. L'analyseur extrait les journaux système, en traitant les événements uniques et les événements par lot dans un tableau JSON. Il normalise les données au format UDM, mappe les champs Okta à leurs équivalents UDM, enrichit les données avec les user-agents analysés, les informations géographiques et les détails 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
- Instance Google SecOps
- 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 standard.
- Accédez à Annuaire > Personnes.
- Cliquez sur Ajouter une personne et renseignez les champs obligatoires.
Sélectionnez Sécurité > Administrateurs.
Cliquez sur Ajouter un administrateur.
Dans le champ Attribution d'administrateur par un 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 d'adresses IP où 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.
Configurer des flux
Il existe deux points d'entrée différents pour configurer les flux dans la plate-forme Google SecOps :
- Paramètres SIEM> Flux
- Plate-forme de contenu > Packs de contenu
Configurer des flux à partir de Paramètres SIEM > Flux
Pour configurer plusieurs flux pour différents types de journaux dans cette famille de produits, consultez Configurer des flux par produit.
Pour configurer un seul flux :
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur Add New Feed (Ajouter un flux).
- Sur la page suivante, cliquez sur Configurer un seul flux.
- 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 de l'élément : espace de noms de l'élément.
- 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 sur l'écran Finaliser, puis cliquez sur Envoyer.
Configurer des flux depuis le Hub de contenu
Indiquez les valeurs des champs suivants :
- En-têtes HTTP d'authentification : utilisés pour l'authentification auprès de l'API SentinelOne Alerts/Threats & static-indicator au format
key:value
. - Nom d'hôte de l'API : nom de domaine complet de l'API SentinelOne.
Options avancées
- Nom du flux : valeur préremplie qui identifie le flux.
- Type de source : méthode utilisée pour collecter les journaux dans Google SecOps.
- Espace de noms de l'élément : espace de noms associé au flux.
- Libellés d'ingestion : libellés appliqués à tous les événements de ce flux.
Table 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, elle est utilisée comme principal.user.userid . |
actor.displayName |
principal.user.user_display_name |
Mappé directement. |
actor.id |
principal.user.product_object_id |
Mappé directement. |
actor.type |
principal.user.attribute.roles.name |
Mappé directement. |
authenticationContext.authenticationProvider |
security_result.detection_fields.value |
Mappé directement, avec la clé authenticationProvider . |
authenticationContext.credentialProvider |
security_result.detection_fields.value |
Mappé directement, avec la clé credentialProvider . |
authenticationContext.credentialType |
extensions.auth.mechanism |
Utilisé pour dériver le mécanisme d'authentification (OTP, USERNAME_PASSWORD, LOCAL). |
authenticationContext.externalSessionId |
network.parent_session_id |
Mappé directement. |
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 |
Mappé directement. |
client.geographicalContext.country |
principal.location.country_or_region |
Mappé directement. |
client.geographicalContext.geolocation.lat |
principal.location.region_latitude |
Mappé directement. |
client.geographicalContext.geolocation.lon |
principal.location.region_longitude |
Mappé directement. |
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 |
Mappé directement. |
client.ipAddress |
principal.ip , principal.asset.ip |
Mappé directement. |
client.userAgent.browser |
target.resource.attribute.labels.value |
Mappé directement, avec la clé Browser . |
client.userAgent.os |
principal.platform |
Mappé à la plate-forme (LINUX, WINDOWS, MAC) en fonction de la valeur. |
client.userAgent.rawUserAgent |
network.http.user_agent , network.http.parsed_user_agent |
Mappé et analysé directement. |
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 |
Mappé directement, 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 |
Mappé directement, avec la clé dtHash . |
debugContext.debugData.factor |
security_result.detection_fields.value |
Mappé directement, avec la clé factor . |
debugContext.debugData.factorIntent |
security_result.detection_fields.value |
Mappé directement, avec la clé factorIntent . |
debugContext.debugData.logOnlySecurityData.risk.reasons |
security_result.detection_fields.value |
Mappé directement, avec la clé Risk Reasons . |
debugContext.debugData.privilegeGranted |
target.user.attribute.roles |
Ils sont 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 |
Mappé directement, avec la clé pushOnlyResponseType . |
debugContext.debugData.pushWithNumberChallengeResponseType |
security_result.detection_fields.value |
Mappé directement, avec la clé pushWithNumberChallengeResponseType . |
debugContext.debugData.requestUri |
extensions.auth.auth_details |
Mappé directement. |
debugContext.debugData.suspiciousActivityEventId |
security_result.detection_fields.value |
Mappé directement, avec la clé suspiciousActivityEventId . |
debugContext.debugData.suspiciousActivityEventType |
security_result.detection_fields.value |
Mappé directement, avec la clé suspiciousActivityEventType . |
debugContext.debugData.threatDetections |
security_result.detection_fields.value |
Mappé directement, 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 de déterminer l'état de la menace (ACTIVE ou FALSE_POSITIVE). |
debugContext.debugData.url |
target.url |
Mappé directement. |
displayMessage |
security_result.summary |
Mappé directement. |
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 |
Mappé directement, avec la clé legacyEventType . |
outcome.reason |
security_result.category_details |
Mappé directement. |
outcome.result |
security_result.action |
Mappé à 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ête. |
request.ipChain.n.ip |
intermediary.ip |
Adresses IP des intermédiaires de la chaîne de requête. |
securityContext.asNumber |
security_result.detection_fields.value |
Mappé directement, avec la clé asNumber . |
securityContext.asOrg |
security_result.detection_fields.value |
Mappé directement, avec la clé asOrg . |
securityContext.domain |
security_result.detection_fields.value |
Mappé directement, avec la clé domain . |
securityContext.isp |
security_result.detection_fields.value |
Mappé directement, avec la clé isp . |
securityContext.isProxy |
security_result.detection_fields.value |
Mappé directement, 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, elle est utilisée comme target.user.userid . |
target.n.detailEntry.clientAppId |
target.asset_id |
Mappé directement, avec le préfixe Client_app_id: . |
target.n.detailEntry.methodTypeUsed |
target.resource_ancestors.attribute.labels.value |
Mappé directement, avec la clé methodTypeUsed lorsque le type cible est AuthenticatorEnrollment. |
target.n.detailEntry.methodUsedVerifiedProperties |
target.resource_ancestors.attribute.labels.value |
Mappé directement, avec la clé methodUsedVerifiedProperties lorsque le type cible est AuthenticatorEnrollment. |
target.n.detailEntry.policyType |
target.resource_ancestors.attribute.labels.value |
Mappé directement, avec la clé Policy Type . |
target.n.detailEntry.signOnModeType |
security_result.detection_fields.value |
Mappé directement, 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 |
Mappé directement. |
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 |
Mappé directement. |
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 . |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.