Collecter les journaux du contexte utilisateur Okta

Compatible avec :

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

Ajouter des plages d'adresses IP au contexte utilisateur Okta

  1. Connectez-vous à la console d'administration Okta.
  2. Accédez à Sécurité > Réseaux.
  3. Sous Restrictions d'adresse IP, cliquez sur Modifier.
  4. Ajoutez chaque plage d'adresses IP Google SecOps au format CIDR aux adresses IP de confiance.
  5. 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

  1. Connectez-vous à la console d'administration Okta.
  2. Accédez à Sécurité > API.
  3. Sélectionnez l'onglet Jetons.
  4. Cliquez sur Créer un jeton.
  5. Fournissez les informations de configuration suivantes :
    • Nom : saisissez un nom descriptif (par exemple, Google SecOps Integration).
    • Description (facultatif) : saisissez une description.
  6. 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 :

  1. Accédez à Paramètres SIEM> Flux.
  2. Cliquez sur Add New Feed (Ajouter un flux).
  3. Sur la page suivante, cliquez sur Configurer un seul flux.
  4. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Okta User Context).
  5. Sélectionnez API tierce comme type de source.
  6. Sélectionnez Contexte utilisateur Okta comme Type de journal.
  7. Cliquez sur Suivant.
  8. 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
    • 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
    • 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.

  9. Cliquez sur Suivant.

  10. 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.