Collecter les journaux Auth0

Compatible avec :

Présentation

Cet analyseur extrait les événements de journaux Auth0 à partir de messages au format JSON. Il initialise les champs UDM, analyse la charge utile JSON, mappe les champs pertinents au schéma UDM et catégorise les événements en fonction du champ type, en définissant les actions de sécurité et les types d'événements appropriés.

Avant de commencer

Assurez-vous de remplir les conditions préalables suivantes :

  • Instance Google SecOps.
  • Un compte Auth0 disposant des autorisations nécessaires.

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 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, Journaux Auth0).
  5. Sélectionnez Webhook comme type de source.
  6. Sélectionnez AUTH_ZERO comme type de journal.
  7. Cliquez sur Suivant.
  8. Facultatif : spécifiez les valeurs des paramètres d'entrée suivants :
    • Délimiteur de fractionnement : délimiteur utilisé pour séparer les lignes de journaux, tel que \n.
    • 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.
  9. Cliquez sur Suivant.
  10. Vérifiez la configuration du flux sur l'écran Finaliser, puis cliquez sur Envoyer.
  11. Cliquez sur Générer une clé secrète pour générer une clé secrète permettant d'authentifier ce flux.
  12. Copiez et stockez la clé secrète. Vous ne pourrez plus afficher cette clé secrète. Si nécessaire, vous pouvez générer une nouvelle clé secrète, mais l'ancienne deviendra obsolète.
  13. Dans l'onglet Détails, copiez l'URL du point de terminaison du flux à partir du champ Informations sur le point de terminaison. Vous devez spécifier cette URL de point de terminaison dans votre application cliente.
  14. Cliquez sur OK.

Configurer des flux depuis le Hub de contenu

Indiquez les valeurs des champs suivants :

  • Délimiteur de fractionnement : délimiteur utilisé pour séparer les lignes de journaux, tel que \n.

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.

  • Cliquez sur Générer une clé secrète pour générer une clé secrète permettant d'authentifier ce flux.

  • Copiez et stockez la clé secrète. Vous ne pourrez plus afficher cette clé secrète. Si nécessaire, vous pouvez générer une nouvelle clé secrète, mais l'ancienne deviendra obsolète.

  • Dans l'onglet Détails, copiez l'URL du point de terminaison du flux à partir du champ Informations sur le point de terminaison. Vous devez spécifier cette URL de point de terminaison dans votre application cliente.

Créer une clé API pour le flux de webhook

  1. Accédez à la consoleGoogle Cloud  > Identifiants.

    Accéder à "Identifiants"

  2. Cliquez sur Créer des identifiants, puis sélectionnez Clé API.

  3. Restreignez l'accès à la clé API à l'API Chronicle.

Spécifier l'URL du point de terminaison

  1. Dans votre application cliente, spécifiez l'URL du point de terminaison HTTPS fournie dans le flux de webhook.
  2. Activez l'authentification en spécifiant la clé API et la clé secrète dans l'en-tête personnalisé au format suivant :

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    Recommandation : Spécifiez la clé API en tant qu'en-tête au lieu de la spécifier dans l'URL. Si votre client de webhook n'accepte pas les en-têtes personnalisés, vous pouvez spécifier la clé API et la clé secrète à l'aide de paramètres de requête au format suivant :

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

Remplacez les éléments suivants :

  • ENDPOINT_URL : URL du point de terminaison du flux.
  • API_KEY : clé API pour s'authentifier auprès de Google Security Operations.
  • SECRET : clé secrète que vous avez générée pour authentifier le flux.

Configurer le webhook Auth0 pour Google SecOps

  1. Accédez au tableau de bord Auth0.
  2. Accédez à Surveillance > Flux.
  3. Cliquez sur Créer un flux de journaux.
  4. Cliquez sur le bouton Custom Webhook (Webhook personnalisé) et donnez-lui le nom de votre choix. Par exemple : Webhook Google SecOps.
  5. Configurez les éléments suivants :
    • URL du payload : saisissez l'URL du point de terminaison de l'API Google SecOps.
    • Content-Type : définissez l'en-tête Content-Type sur application/json. Cela indique à Google SecOps le format des données envoyées.
    • Facultatif : Jeton d'autorisation : configurez un secret pour renforcer la sécurité. Elle servira à vérifier l'authenticité des requêtes de webhook.

Personnaliser la charge utile : vous pouvez personnaliser la charge utile envoyée à Google SecOps en modifiant la catégorie d'événement. Cela vous permet de sélectionner des points de données spécifiques à partir de l'événement Auth0 et de les mettre en forme selon les besoins de Google SecOps. Pour en savoir plus sur les variables de contexte et les options de script disponibles, consultez la documentation Auth0. Assurez-vous que la charge utile finale est conforme au format UDM Google SecOps attendu.

  1. Cliquez sur Enregistrer pour créer le webhook.
  2. Déclenchez l'événement associé au crochet (par exemple, enregistrez un nouvel utilisateur ou connectez-vous).
  3. Vérifiez que les journaux sont envoyés à Google SecOps en consultant le flux dans la console Google SecOps.

Table de mappage UDM

Champ de journal Mappage UDM Logique
client_id principal.asset.product_object_id Mappé directement à partir du champ client_id.
client_name principal.hostname Mappé directement à partir du champ client_name.
connection security_result.description Mappé directement à partir du champ connection.
connection_id security_result.rule_id Mappé directement à partir du champ connection_id.
date metadata.event_timestamp Analysé à partir du champ date au format ISO8601.
description metadata.description Mappé directement à partir du champ description.
details.error security_result.detection_fields Mappé à partir du champ details.error. La clé est "Error".
details.error.oauthError security_result.detection_fields Mappé à partir du champ details.error.oauthError. La clé est "oauthError".
details.error.type security_result.detection_fields Mappé à partir du champ details.error.type. La clé est "oauth_error_type".
details.ipOnAllowlist security_result.detection_fields Mappé à partir du champ details.ipOnAllowlist. La clé est "ipOnAllowlist".
details.link target.url Mappé directement à partir du champ details.link s'il est présent, sinon dérivé d'autres champs (voir ci-dessous).
details.request.auth.strategy security_result.detection_fields Mappé à partir du champ details.request.auth.strategy. La clé est "strategy".
details.request.body.app_metadata.blockedReason security_result.detection_fields Mappé à partir du champ details.request.body.app_metadata.blockedReason. La clé est "blockedReason".
details.request.body.app_metadata.customer_id target.user.product_object_id Mappé directement à partir du champ details.request.body.app_metadata.customer_id.
details.request.body.app_metadata.migrated security_result.detection_fields Mappé à partir du champ details.request.body.app_metadata.migrated. La clé est "migrated".
details.request.channel security_result.detection_fields Mappé à partir du champ details.request.channel. La clé est "channel".
details.request.method network.http.method Directement mappé à partir du champ details.request.method après conversion en majuscules.
details.request.path target.url Directement mappé à partir du champ details.request.path si details.link n'est pas présent, sinon dérivé d'autres champs (voir ci-dessous).
details.response.body.email target.user.email_addresses Mappé directement à partir du champ details.response.body.email.
details.response.body.email_verified security_result.detection_fields Mappé à partir du champ details.response.body.email_verified. La clé est "email_verified".
details.response.body.nickname target.user.user_display_name Mappé directement à partir du champ details.response.body.nickname.
details.response.body.user_id target.user.userid Mappé directement à partir du champ details.response.body.user_id.
details.response.statusCode network.http.response_code Mappé directement à partir du champ details.response.statusCode après conversion en entier.
details.return_to target.url Directement mappé à partir du champ details.return_to si details.link et details.request.path ne sont pas présents, sinon dérivé d'autres champs (voir ci-dessous).
details.session_id network.session_id Mappé directement à partir du champ details.session_id.
details.stats.loginsCount additional.fields Mappé à partir du champ details.stats.loginsCount. La clé est "loginsCount".
details.requiresVerification security_result.detection_fields Mappé à partir du champ details.requiresVerification. La clé est "requiresVerification".
details.to target.user.email_addresses Mappé directement à partir du champ details.to.
hostname target.hostname Mappé directement à partir du champ hostname.
ip principal.ip Mappé directement à partir du champ ip.
js_data.audience target.url Mappé directement à partir du champ js_data.audience si details.link, details.request.path et details.return_to ne sont pas présents.
js_data.details.body.email_verified security_result.detection_fields Mappé à partir du champ js_data.details.body.email_verified. La clé est "email_verified".
js_data.details.body.is_signup security_result.detection_fields Mappé à partir du champ js_data.details.body.is_signup. La clé est "is_signup".
js_data.details.body.transaction.redirect_uri target.url Directement mappé à partir du champ js_data.details.body.transaction.redirect_uri si details.link, details.request.path, details.return_to et js_data.audience ne sont pas présents.
js_data.scope security_result.detection_fields Mappé à partir du champ js_data.scope. La clé est "scope".
js_data.tracking_id security_result.detection_fields Mappé à partir du champ js_data.tracking_id. La clé est "tracking_id".
log_id metadata.product_log_id Mappé directement à partir du champ log_id.
metadata.log_type metadata.log_type Mappé directement à partir du champ log_type.
metadata.product_name metadata.product_name Défini sur "AUTH_ZERO".
metadata.vendor_name metadata.vendor_name Défini sur "AUTH_ZERO".
metadata.product_event_type metadata.product_event_type Mappé directement à partir du champ type.
network.http.parsed_user_agent network.http.parsed_user_agent Analysé à partir du champ user_agent.
network.http.user_agent network.http.user_agent Mappé directement à partir du champ user_agent.
security_result.action security_result.action Déterminé par le champ type (ALLOW ou BLOCK). Consultez le code du parseur pour connaître les mappages spécifiques.
strategy security_result.detection_fields Mappé à partir du champ strategy. La clé est "strategy".
strategy_type security_result.detection_fields Mappé à partir du champ strategy_type. La clé est "strategy_type".
target.user.email_addresses target.user.email_addresses Mappé directement à partir du champ user_name s'il s'agit d'une adresse e-mail, sinon dérivé d'autres champs (voir ci-dessus).
target.user.userid target.user.userid Directement mappé à partir du champ user_id, ou details.response.body.user_id ou user_name si user_id n'est pas présent.
user_agent network.http.user_agent Mappé directement à partir du champ user_agent.
user_id target.user.userid Mappé directement à partir du champ user_id.
user_name target.user.email_addresses Mappé directement à partir du champ user_name. Définissez sur "MACHINE" si security_result.action est défini sur "ALLOW" et type est défini sur "slo", "sapi", "s", "ss" ou "ssa". Définissez sur "OTP" si extensions.auth.type est défini sur "MACHINE" et type sur "slo". Déterminé par une combinaison de champs, y compris type, client_name, ip, hostname et has_user. Consultez le code du parseur pour connaître les mappages spécifiques.

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.