Comment exporter les journaux du système Okta

Comment exporter les journaux du système Okta

SOC Prime Team
SOC Prime Team linkedin icon Suivre

Dans la console d’administration Okta, Rapports → Journal du Système vous permet de rechercher des événements et de télécharger les résultats. Pour JSON, utilisez l’API du Journal du Système : GET /api/v1/logs avec since et until, en suivant le lien suivant jusqu’à épuisement. Un court script est ci-dessous. Okta conserve les événements du Journal du Système pendant 90 jours.

Lorsque l’identité est le périmètre, le Journal du Système d’Okta est le journal de la porte. Il enregistre chaque connexion, chaque poussée MFA, chaque réinitialisation de facteur et chaque changement de rôle d’admin. Prime Core a 58 règles de détection pour les données Okta, mappées à 32 techniques MITRE ATT&CK. Parmi eux : pulvérisation de mot de passe (T1110.003), fatigue MFA (T1621) et attaquants altérant l’inscription MFA (T1556.006).

Commencer gratuitement

Avant de commencer

La rétention est de 90 jours. Tout ce qui est plus ancien n’existe que là où vous avez diffusé ou transféré les journaux Okta, comme un SIEM.

Vous avez besoin d’un jeton. Un jeton API (Sécurité → API → Jetons) hérite des permissions de l’admin qui l’a créé. Un admin en lecture seule suffit pour les journaux. Pour tout ce qui est automatisé, une application de service OAuth avec la portée okta.logs.read est le choix le plus propre. Dans tous les cas, le jeton est un justificatif. Gardez-le hors de l’historique du shell et révoquez-le une fois terminé.

Des limites de taux s’appliquent. Le point d’accès des journaux a sa propre limite de taux. Les grandes fenêtres sont acceptables, mais pas instantanément.

Exporter avec l’API du Journal du Système

Ce script Python parcourt une fenêtre temporelle et écrit un événement par ligne. Il nécessite des demandes (pip install requests) :

import json, os, requests



org = "https://yourorg.okta.com"

headers = {"Authorization": f"SSWS {os.environ['OKTA_TOKEN']}", "Accept": "application/json"}

url = f"{org}/api/v1/logs"

params = {"since": "2026-10-19T00:00:00Z", "until": "2026-10-20T00:00:00Z", "limit": 1000}



with open("okta_1019.jsonl", "w") as out:

    while url:

        r = requests.get(url, headers=headers, params=params, timeout=60)

        r.raise_for_status()

        events = r.json()

        for e in events:

            out.write(json.dumps(e) + "n")

        if not events:

            break

        url = r.links.get("next", {}).get("url")

        params = None  # le lien suivant porte déjà la requête

Toujours définir until. Sans cela, Okta traite la demande comme un sondage en direct et continue de renvoyer un lien suivant. Votre boucle fonctionnerait indéfiniment, attendant de nouveaux événements.

Pour le réduire, ajoutez un filtre à params, par exemple « filter »: ‘eventType eq « user.session.start »‘. Ou utilisez « q »: « jane » pour une recherche par mot-clé.

À quoi s’attendre

eventTypePourquoi c’est important
user.session.start avec outcome.result : FAILUREConnexions échouées ; de nombreux utilisateurs d’une même plage d’IP signifie pulvérisation
user.mfa.okta_verify.deny_pushUtilisateur a rejeté une poussée ; une rafale de ceux-ci est une fatigue MFA en cours
user.mfa.factor.deactivate, user.mfa.factor.reset_allFacteurs supprimés, souvent juste après un appel d’ingénierie sociale au helpdesk
user.account.privilege.grantRôle d’admin accordé
policy.rule.update, policy.lifecycle.updateLa politique de connexion ou MFA a été modifiée, possiblement affaiblie
system.api_token.createUn nouveau jeton API, une manière discrète de maintenir l’accès

Les champs qui racontent l’histoire : actor.alternateId (qui), client.ipAddress et client.geographicalContext (d’où), outcome (ce qui s’est passé), et debugContext.debugData (les détails).

Envoyer, assainir et examiner dans LogTotal

  1. Envoyer. Ouvrez logtotal.com et déposez le fichier .jsonl. [PROOF : écran de téléchargement, limite de taille]
  2. Assainir. [PROOF: what gets masked: usernames and emails, IPs, device and session IDs]. Look it over before you continue.
  3. Examiner. [PROOF: what the results screen shows]

Quand ça tourne mal

SymptômeCause probableFix
401Jeton incorrect ou révoqué, ou préfixe SSWS manquantVérifiez le format de l’en-tête ; créez un nouveau jeton
403Le créateur du jeton n’a pas le droit de lire les journauxUtilisez un jeton d’un admin avec accès aux journaux
429Limite de taux atteinteAttendez le temps dans X-Rate-Limit-Reset, puis continuez
Le script ne se termine jamaisPas de until dans la requêteDéfinissez until
Rien de plus vieux que 90 joursRétention OktaVérifiez votre SIEM ou la destination du streaming de journaux

FAQ

Ne puis-je pas simplement utiliser la console d’administration ?

Pour un petit aperçu d’une courte fenêtre, oui. Pour tout ce que vous souhaitez analyser ou conserver, l’API vous fournit un JSON complet avec chaque champ.

Cela couvre-t-il Auth0 ?

Non. Ce guide concerne Okta Workforce Identity. Auth0 a son propre format de journal et API.

Rejoignez la plateforme Detection as Code de SOC Prime pour améliorer la visibilité sur les menaces les plus pertinentes pour votre entreprise. Pour vous aider à démarrer et à générer une valeur immédiate, planifiez dès maintenant une réunion avec des experts de SOC Prime.