Collecter les journaux Auth0

Compatible avec:

Présentation

Cet analyseur extrait les événements de journal Auth0 à partir de messages au format JSON. Il initialise les champs UDM, analyse la charge utile JSON, mappe les champs pertinents sur le 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 disposer d'une instance Google SecOps.
  • Un compte Auth0 disposant des autorisations nécessaires.

Configurer un flux dans Google SecOps pour ingérer les journaux Auth0

  1. Accédez à Paramètres du SIEM > Flux.
  2. Cliquez sur Ajouter.
  3. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Auth0 Logs).
  4. Sélectionnez Webhook comme type de source.
  5. Sélectionnez AUTH_ZERO comme type de journal.
  6. Cliquez sur Suivant.
  7. Facultatif: spécifiez des valeurs pour les paramètres d'entrée suivants :
    • Délimiteur de fractionnement: délimiteur utilisé pour séparer les lignes de journal, par exemple \n.
    • Espace de noms des éléments: espace de noms des éléments.
    • Libellés d'ingestion: libellé appliqué aux événements de ce flux.
  8. Cliquez sur Suivant.
  9. Vérifiez la configuration du flux dans l'écran Finaliser, puis cliquez sur Envoyer.
  10. Cliquez sur Générer une clé secrète pour générer une clé secrète permettant d'authentifier ce flux.
  11. 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 cette action rend l'ancienne clé secrète obsolète.
  12. Dans l'onglet Détails, copiez l'URL du point de terminaison du flux dans le champ Informations sur le point de terminaison. Vous devez spécifier cette URL de point de terminaison dans votre application cliente.
  13. Cliquez sur OK.

Créer une clé API pour le flux webhook

  1. Accédez à la console Google Cloud > Identifiants.

    Accéder à "Identifiants"

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

  3. Limitez l'accès de la clé API à l'API Google Security Operations.

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 plutôt que dans l'URL. Si votre client webhook n'est pas compatible avec 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 permettant de 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 Webhook personnalisé, puis attribuez-lui un nom de votre choix. Par exemple: Webhook Google SecOps.
  5. Configurez les éléments suivants :
    • URL de la charge utile: 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é. Il servira à vérifier l'authenticité des requêtes webhook.

Personnaliser la charge utile: vous pouvez personnaliser la charge utile envoyée à Google SecOps en modifiant la catégorie d'événement. Vous pouvez ainsi sélectionner des points de données spécifiques de l'événement Auth0 et les mettre en forme selon les besoins pour 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 hook (par exemple, enregistrez un nouvel utilisateur, connectez-vous).
  3. Vérifiez que les journaux sont envoyés à Google SecOps en consultant le flux dans la console Google SecOps.

Tableau 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 Extrait du champ date au format ISO 8601.
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, le cas échéant, 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 "migrée".
details.request.channel security_result.detection_fields Mappé à partir du champ details.request.channel. La clé est "channel".
details.request.method network.http.method Mappé directement à partir du champ details.request.method après conversion en majuscules.
details.request.path target.url Mappé directement à 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 Mappé directement à 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 Mappé directement à 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 Analyse 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 de l'analyseur 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 Mappé directement à 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 la valeur sur "MACHINE" si security_result.action est "ALLOW" et que type est "slo", "sapi", "s", "ss" ou "ssa". Définissez cette valeur 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 de l'analyseur pour connaître les mappages spécifiques.

Modifications

2024-03-07

  • Correction de bug:
  • "data.user_name" a été mappé sur "target.user.email_addresses".
  • Mappage de "data.details.body.email_verified" et "data.details.body.is_signup" sur "security_result.detection_fields".
  • Mappage de "data.details.body.transaction.redirect_uri" sur "target.url".

2023-06-19

  • Analyseur nouvellement créé.