Collecter les journaux du contexte utilisateur Okta
Ce document explique comment collecter les journaux du contexte utilisateur Okta en configurant un flux Google Security Operations à l'aide de l'API tierce.
Avant de commencer
Assurez-vous de remplir les conditions préalables suivantes :
- Une instance Google SecOps
- Accès privilégié au locataire Okta ou à la console d'administration
- Droits de création de jetons d'API dans Okta
Configurer la liste d'autorisation d'adresses IP
Avant de créer le flux, vous devez ajouter les plages d'adresses IP Google SecOps à la liste d'autorisation dans les paramètres de pare-feu ou de réseau Okta.
Obtenir les plages d'adresses IP Google SecOps
- Récupérez les plages d'adresses IP à partir du fichier JSON des plages d'adresses IP de Google.
Ajouter des plages d'adresses IP au contexte utilisateur Okta
- Connectez-vous à la console d'administration Okta.
- Accédez à Sécurité > Réseaux.
- Sous Restrictions d'adresse IP, cliquez sur Modifier.
- Ajoutez chaque plage d'adresses IP Google SecOps au format CIDR aux adresses IP de confiance.
- Cliquez sur Enregistrer.
Configurer l'accès à l'API Okta User Context
Pour permettre à Google SecOps d'extraire les données de contexte utilisateur, vous devez créer un jeton d'API avec des autorisations de lecture.
Créer un jeton d'API
- Connectez-vous à la console d'administration Okta.
- Accédez à Sécurité > API.
- Sélectionnez l'onglet Jetons.
- Cliquez sur Créer un jeton.
- Fournissez les informations de configuration suivantes :
- Nom : saisissez un nom descriptif (par exemple,
Google SecOps Integration). - Description (facultatif) : saisissez une description.
- Nom : saisissez un nom descriptif (par exemple,
- Cliquez sur Créer un jeton.
Enregistrer les identifiants de l'API
Une fois le jeton d'API créé, vous recevrez les identifiants suivants :
- Jeton d'API : valeur de votre jeton d'API (par exemple,
00QCGr-1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1)
Autorisations d'API requises
Le jeton d'API nécessite les autorisations suivantes dans Okta :
| Autorisation/Rôle | Niveau d'accès | Objectif |
|---|---|---|
| Administrateur en lecture seule | Lire | Accéder aux données du profil utilisateur |
| Super-administrateur | Lire | Accès complet à toutes les données utilisateur |
Configurer des flux
Pour configurer un flux, procédez comme suit :
- 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,
Okta User Context). - Sélectionnez API tierce comme type de source.
- Sélectionnez Contexte utilisateur 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 les identifiants d'authentification au format suivant :
Authorization:SSWS your-api-token- Par exemple :
Authorization:SSWS 00QCGr-1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1
- Par exemple :
Nom d'hôte de l'API : nom de domaine complet de votre instance Okta (par exemple, example.okta.com, et non un domaine personnalisé qui peut être configuré).
- Par exemple :
company.okta.com
- Par exemple :
Champ de référence de l'ID du responsable : ID requis lorsque vous utilisez un ID non Okta pour référencer les responsables (facultatif).
Espace de noms de l'élément : espace de noms de l'élément.
Libellés d'ingestion : libellé à appliquer aux événements de ce flux.
Cliquez sur Suivant.
Vérifiez la configuration de votre nouveau flux sur l'écran Finaliser, puis cliquez sur Envoyer.
Une fois la configuration terminée, le flux commence à récupérer les journaux de l'instance de contexte utilisateur Okta dans l'ordre chronologique.
Points de terminaison régionaux
Okta utilise différents points de terminaison d'API en fonction de la région de votre organisation :
| Région | URL de base / Nom d'hôte |
|---|---|
| États-Unis (par défaut) | {org-name}.okta.com |
| UE (EMEA) | {org-name}.okta-emea.com |
| APAC | {org-name}.okta.com.au |
| Aperçu (test) | {org-name}.oktapreview.com |
Utilisez le nom d'hôte qui correspond à la région de votre instance Okta.
Limites de débit des API
L'API Okta présente les limites de débit suivantes :
- Limitation du débit par défaut : 600 requêtes par minute pour la plupart des points de terminaison
- API Journaux système : 60 requêtes par minute
- Points de terminaison utilisateur : 600 requêtes par minute
Google SecOps gère automatiquement la limitation du débit avec un intervalle exponentiel entre les tentatives. Si vous rencontrez des problèmes, contactez l'assistance Okta pour augmenter vos limites d'API.
Table de mappage UDM
| Champ de journal | Mappage UDM | Logique |
|---|---|---|
activated |
event.idm.entity.entity.labels |
Si activated existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "activated". |
created |
event.idm.entity.entity.labels |
Si created existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "created". |
profile.costCenter |
event.idm.entity.entity.labels |
Si profile.costCenter existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "costCenter". |
profile.Function |
event.idm.entity.entity.labels |
Si profile.Function existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "Function". |
statusChanged |
event.idm.entity.entity.labels |
Si statusChanged existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "statusChanged". |
type.id |
event.idm.entity.entity.labels |
Si type.id existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "type_id". |
profile.location |
event.idm.entity.entity.location.name |
Valeur extraite de profile.location. |
profile.AD_ObjectGUID |
event.idm.entity.entity.user.attribute.labels |
Si profile.AD_ObjectGUID existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "AD_ObjectGUID". |
profile.ADpwdLastSet |
event.idm.entity.entity.user.attribute.labels |
Si profile.ADpwdLastSet existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "ADpwdLastSet". |
profile.AFF_Code |
event.idm.entity.entity.user.attribute.labels |
Si profile.AFF_Code existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "AFF_Code". |
profile.Desk_Location_WD |
event.idm.entity.entity.user.attribute.labels |
Si profile.Desk_Location_WD existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "Desk_Location_WD". |
profile.Mailing_Address_WD |
event.idm.entity.entity.user.attribute.labels |
Si profile.Mailing_Address_WD existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "Mailing_Address_WD". |
profile.Manager_UPN |
event.idm.entity.entity.user.attribute.labels |
Si profile.Manager_UPN existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "Manager_UPN". |
profile.PRIVATE_CONF_Profile |
event.idm.entity.entity.user.attribute.labels |
Si profile.PRIVATE_CONF_Profile existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "PRIVATE_CONF_Profile". |
profile.Region_WD |
event.idm.entity.entity.user.attribute.labels |
Si profile.Region_WD existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "Region_WD". |
profile.Subsidiary_Company |
event.idm.entity.entity.user.attribute.labels |
Si profile.Subsidiary_Company existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "Subsidiary_Company". |
profile.Telephone_Work |
event.idm.entity.entity.user.attribute.labels |
Si profile.Telephone_Work existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "Telephone_Work". |
profile.Temp_WD_Primary_Email |
event.idm.entity.entity.user.attribute.labels |
Si profile.Temp_WD_Primary_Email existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "Temp_WD_Primary_Email". |
profile.VMware_WS1_Username |
event.idm.entity.entity.user.attribute.labels |
Si profile.VMware_WS1_Username existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "VMware_WS1_Username". |
profile.Work_Street_Address_WD |
event.idm.entity.entity.user.attribute.labels |
Si profile.Work_Street_Address_WD existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "Work_Street_Address_WD". |
profile.Workato_WD_Primary_Email |
event.idm.entity.entity.user.attribute.labels |
Si profile.Workato_WD_Primary_Email existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "Workato_WD_Primary_Email". |
profile.Workday_ID |
event.idm.entity.entity.user.attribute.labels |
Si profile.Workday_ID existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "Workday_ID". |
profile.Worker_Type_WD |
event.idm.entity.entity.user.attribute.labels |
Si profile.Worker_Type_WD existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "Worker_Type_WD". |
profile.businessUnit |
event.idm.entity.entity.user.attribute.labels |
Si profile.businessUnit existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "businessUnit". |
profile.companyName |
event.idm.entity.entity.user.attribute.labels |
Si profile.companyName existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "companyName". |
profile.contingentSupplierName |
event.idm.entity.entity.user.attribute.labels |
Si profile.contingentSupplierName existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "contingentSupplierName". |
profile.conversationId |
event.idm.entity.entity.user.attribute.labels |
Si profile.conversationId existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "conversationId". |
profile.distinguishedName |
event.idm.entity.entity.user.attribute.labels |
Si profile.distinguishedName existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "distinguishedName". |
profile.division |
event.idm.entity.entity.user.attribute.labels |
Si profile.division existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "division". |
profile.emailPrefix |
event.idm.entity.entity.user.attribute.labels |
Si profile.emailPrefix existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "emailPrefix". |
profile.employeeType |
event.idm.entity.entity.user.attribute.labels |
Si profile.employeeType existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "employeeType". |
profile.homePostalAddress |
event.idm.entity.entity.user.attribute.labels |
Si profile.homePostalAddress existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "homePostalAddress". |
profile.isManager |
event.idm.entity.entity.user.attribute.labels |
Si profile.isManager existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "isManager". |
lastLogin |
event.idm.entity.entity.user.attribute.labels |
Si lastLogin existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "lastLogin". |
profile.leaveOfAbsence |
event.idm.entity.entity.user.attribute.labels |
Si profile.leaveOfAbsence existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "leaveOfAbsence". |
profile.managerDn |
event.idm.entity.entity.user.attribute.labels |
Si profile.managerDn existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "managerDn". |
profile.payGroup |
event.idm.entity.entity.user.attribute.labels |
Si profile.payGroup existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "payGroup". |
profile.wdemployeeID |
event.idm.entity.entity.user.attribute.labels |
Si profile.wdemployeeID existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "wdemployeeID". |
profile.zipCode |
event.idm.entity.entity.user.attribute.labels |
Si profile.zipCode existe, sa valeur est ajoutée en tant que paire clé-valeur avec la clé "zipCode". |
profile.userType |
event.idm.entity.entity.user.attribute.roles |
Si profile.userType existe, sa valeur est ajoutée à un tableau de rôles. |
profile.organization, profile.company |
event.idm.entity.entity.user.company_name |
Valeur extraite de profile.organization ou profile.company si la première n'est pas présente. |
profile.department |
event.idm.entity.entity.user.department |
Valeur extraite de profile.department. |
profile.email, profile.secondEmail, profile.login |
event.idm.entity.entity.user.email_addresses |
Les valeurs de profile.email, profile.secondEmail et profile.login (s'il s'agit d'une adresse e-mail et non d'un doublon) sont fusionnées dans ce champ. |
profile.employeeNumber |
event.idm.entity.entity.user.employee_id |
Valeur extraite de profile.employeeNumber. |
profile.firstName, profile.Preferred_First_Name |
event.idm.entity.entity.user.first_name |
Valeur extraite de profile.firstName ou profile.Preferred_First_Name si la première n'est pas présente. |
profile.EmployeeWorkGroup |
event.idm.entity.entity.user.group_identifiers |
Valeur extraite de profile.EmployeeWorkGroup. |
profile.HireDate, profile.hiredate |
event.idm.entity.entity.user.hire_date |
La valeur est analysée à partir de profile.HireDate ou profile.hiredate si la première n'est pas présente. |
profile.lastName, profile.preferred_Last_Name |
event.idm.entity.entity.user.last_name |
Valeur extraite de profile.lastName si profile.lastName ou profile.preferred_Last_Name existent. |
lastLogin |
event.idm.entity.entity.user.last_login_time |
La valeur est analysée à partir de lastLogin. |
passwordChanged |
event.idm.entity.entity.user.last_password_change_time |
La valeur est analysée à partir de passwordChanged. |
profile.manager, profile.managerEmail, profile.managerId |
event.idm.entity.entity.user.managers |
Renseigné avec un objet contenant user_display_name de profile.manager, email_addresses de profile.managerEmail et employee_id de profile.managerId. |
profile.city, profile.firstBaseCity |
event.idm.entity.entity.user.office_address.city |
Valeur extraite de profile.city ou profile.firstBaseCity si la première n'est pas présente. |
profile.countryCode, profile.country |
event.idm.entity.entity.user.office_address.country_or_region |
Valeur extraite de profile.countryCode ou profile.country si la première n'est pas présente. |
profile.streetAddress |
event.idm.entity.entity.user.personal_address.name |
Valeur extraite de profile.streetAddress. |
profile.state |
event.idm.entity.entity.user.personal_address.state |
Valeur extraite de profile.state. |
profile.primaryPhone, profile.mobilePhone, profile.mobile |
event.idm.entity.entity.user.phone_numbers |
Les valeurs de profile.primaryPhone, profile.mobilePhone et profile.mobile sont fusionnées dans ce champ. |
profile.terminationDate, profile.terminationdate |
event.idm.entity.entity.user.termination_date |
La valeur est analysée à partir de profile.terminationDate ou profile.terminationdate si la première n'est pas présente. |
profile.title |
event.idm.entity.entity.user.title |
Valeur extraite de profile.title. |
status |
event.idm.entity.entity.user.user_authentication_status |
Mappé à partir de status : ACTIVE/RECOVERY/LOCKED_OUT/PASSWORD_EXPIRED -> ACTIVE ; SUSPENDED -> SUSPENDED ; DEPROVISIONED -> DELETED ; sinon UNKNOWN_AUTHENTICATION_STATUS. |
profile.displayName |
event.idm.entity.entity.user.user_display_name |
Valeur extraite de profile.displayName. |
profile.samAccountName, profile.samaccountname, profile.login, profile.ldapUid |
event.idm.entity.entity.user.userid |
Rempli avec la précédence suivante : profile.samAccountName, profile.samaccountname, profile.login (si ce n'est pas une adresse e-mail), profile.ldapUid (si profile.login n'est pas une adresse e-mail). |
event.idm.entity.metadata.entity_type |
Variable définie sur USER. |
|
id |
event.idm.entity.metadata.product_entity_id |
Valeur extraite de id. |
event.idm.entity.metadata.product_name |
Variable définie sur Identity Cloud. |
|
event.idm.entity.metadata.vendor_name |
Variable définie sur Okta. |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.