Collecter les journaux Auth0
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
- Accédez à Paramètres du SIEM > Flux.
- Cliquez sur Ajouter.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Auth0 Logs).
- Sélectionnez Webhook comme type de source.
- Sélectionnez AUTH_ZERO comme type de journal.
- Cliquez sur Suivant.
- 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.
- Délimiteur de fractionnement: délimiteur utilisé pour séparer les lignes de journal, par exemple
- Cliquez sur Suivant.
- Vérifiez la configuration du flux dans l'écran Finaliser, puis cliquez sur Envoyer.
- 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 cette action rend l'ancienne clé secrète obsolète.
- 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.
- Cliquez sur OK.
Créer une clé API pour le flux webhook
Accédez à la console Google Cloud > Identifiants.
Cliquez sur Créer des identifiants, puis sélectionnez Clé API.
Limitez l'accès de la clé API à l'API Google Security Operations.
Spécifier l'URL du point de terminaison
- Dans votre application cliente, spécifiez l'URL du point de terminaison HTTPS fournie dans le flux de webhook.
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
- Accédez au tableau de bord Auth0.
- Accédez à Surveillance > Flux.
- Cliquez sur Créer un flux de journaux.
- Cliquez sur le bouton Webhook personnalisé, puis attribuez-lui un nom de votre choix. Par exemple: Webhook Google SecOps.
- 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.
- Cliquez sur Enregistrer pour créer le webhook.
- Déclenchez l'événement associé au hook (par exemple, enregistrez un nouvel utilisateur, connectez-vous).
- 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éé.