Collecter les journaux de connexion Azure AD
Ce document explique comment exporter les journaux de connexion Azure AD vers Google Security Operations à l'aide d'un compte de stockage Azure. L'analyseur prend les journaux bruts au format JSON et les transforme en un format structuré conforme à l'Unified Data Model (UDM). Il extrait les champs pertinents, normalise les valeurs, gère les différents codes temporels et enrichit les données avec un contexte lié à la sécurité, comme les informations sur les utilisateurs, les adresses IP et les règles d'accès conditionnel.
Avant de commencer
Assurez-vous de remplir les conditions préalables suivantes :
- Instance Google SecOps
- Un locataire Azure actif
- Accès privilégié à Azure
Configurer un compte de stockage Azure
- Dans la console Azure, recherchez Comptes de stockage.
- Cliquez sur + Créer.
- Spécifiez les valeurs des paramètres d'entrée suivants :
- Abonnement : sélectionnez l'abonnement.
- Groupe de ressources : sélectionnez le groupe de ressources.
- Région : sélectionnez la région.
- Performances : sélectionnez les performances (standard recommandé).
- Redondance : sélectionnez la redondance (GRS ou LRS recommandé).
- Nom du compte de stockage : saisissez un nom pour le nouveau compte de stockage.
- Cliquez sur Examiner et créer.
- Examinez l'aperçu du compte, puis cliquez sur Créer.
- Sur la page Présentation du compte de stockage, sélectionnez le sous-menu Clés d'accès dans Sécurité et mise en réseau.
- Cliquez sur Afficher à côté de key1 ou key2.
- Cliquez sur Copier dans le presse-papiers pour copier la clé.
- Enregistrez la clé dans un endroit sûr pour une utilisation ultérieure.
- Sur la page Présentation du compte de stockage, sélectionnez le sous-menu Points de terminaison dans Paramètres.
- Cliquez sur Copier dans le presse-papiers pour copier l'URL du point de terminaison Blob service (Service Blob). Par exemple,
https://<storageaccountname>.blob.core.windows.net
. - Enregistrez l'URL du point de terminaison dans un endroit sûr pour une utilisation ultérieure.
Configurer l'exportation des journaux de connexion Azure AD
- Connectez-vous au portail Azure à l'aide de votre compte privilégié.
- Accédez à Microsoft Entra ID > Surveillance > Paramètres de diagnostic.
- Cliquez sur Ajouter un paramètre de diagnostic.
- Attribuez un nom descriptif au paramètre de diagnostic.
- Sélectionnez Journaux de connexion.
- Cochez la case Archiver dans un compte de stockage comme destination.
- Spécifiez l'abonnement et le compte de stockage.
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 > Ajouter un flux
- Plate-forme de contenu> Packs de contenu> Premiers pas
Configurer le flux de connexion Azure AD
- Cliquez sur le pack Plate-forme Azure.
- Recherchez le type de journal Connexion Azure AD.
Indiquez les valeurs des champs suivants :
- Type de source : Microsoft Azure Blob Storage V2.
- URI Azure : URL du point de terminaison du blob.
ENDPOINT_URL/BLOB_NAME
- Remplacez l'élément suivant :
ENDPOINT_URL
: URL du point de terminaison du blob (https://<storageaccountname>.blob.core.windows.net
)BLOB_NAME
: nom du blob (par exemple,insights-logs-<logname>
)
- Remplacez l'élément suivant :
Options de suppression de la source : sélectionnez l'option de suppression en fonction de vos préférences d'ingestion.
Âge maximal du fichier : fichiers modifiés au cours d'un certain nombre de jours. La valeur par défaut est de 180 jours.
Clé partagée : clé d'accès à Azure Blob Storage.
Options avancées
- Nom du flux : valeur préremplie qui identifie le flux.
- 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 Créer un flux.
Pour en savoir plus sur la configuration de plusieurs flux pour différents types de journaux dans cette famille de produits, consultez Configurer des flux par produit.
Table de mappage UDM
Champ du journal | Mappage UDM | Logique |
---|---|---|
AppDisplayName | read_only_udm.target.application | Directement mappé à partir du champ AppDisplayName dans le journal brut. |
AppId | read_only_udm.security_result.detection_fields.value | Directement mappé à partir du champ AppId dans le journal brut. La clé est définie sur appId . |
Catégorie | read_only_udm.security_result.category_details | Directement mappé à partir du champ Category dans le journal brut. |
ConditionalAccessPolicies[].displayName | read_only_udm.security_result.rule_name | Directement mappé à partir du champ displayName dans le tableau ConditionalAccessPolicies du journal brut. |
ConditionalAccessPolicies[].enforcedGrantControls[] | read_only_udm.security_result.rule_labels.value | Directement mappé à partir du tableau enforcedGrantControls dans le tableau ConditionalAccessPolicies du journal brut. La clé est définie sur applied_conditional_access_policies_enforced_grant_controls . |
ConditionalAccessPolicies[].enforcedSessionControls[] | read_only_udm.security_result.rule_labels.value | Directement mappé à partir du tableau enforcedSessionControls dans le tableau ConditionalAccessPolicies du journal brut. La clé est définie sur applied_conditional_access_policies_enforced_session_controls . |
ConditionalAccessPolicies[].id | read_only_udm.security_result.rule_id | Directement mappé à partir du champ id dans le tableau ConditionalAccessPolicies du journal brut. |
ConditionalAccessPolicies[].Result | read_only_udm.security_result.rule_labels.value | Directement mappé à partir du champ Result dans le tableau ConditionalAccessPolicies du journal brut. La clé est définie sur applied_conditional_access_policies_result . |
ConditionalAccessStatus | read_only_udm.additional.fields.value.string_value | Directement mappé à partir du champ ConditionalAccessStatus dans le journal brut. La clé est définie sur conditionalAccessStatus . |
CorrelationId | read_only_udm.security_result.detection_fields.value | Directement mappé à partir du champ CorrelationId dans le journal brut. La clé est définie sur correlationId . |
DurationMs | read_only_udm.additional.fields.value.string_value | Directement mappé à partir du champ DurationMs dans le journal brut. La clé est définie sur durationMs . |
HomeTenantId | read_only_udm.security_result.detection_fields.value | Directement mappé à partir du champ HomeTenantId dans le journal brut. La clé est définie sur HomeTenantId . |
IPAddress | read_only_udm.principal.asset.ip, read_only_udm.principal.ip | Directement mappé à partir du champ IPAddress dans le journal brut. |
ID | read_only_udm.security_result.detection_fields.value | Directement mappé à partir du champ Id dans le journal brut. La clé est définie sur id . |
Identité | read_only_udm.target.resource.attribute.labels.value | Directement mappé à partir du champ Identity dans le journal brut. La clé est définie sur identity . |
Niveau | read_only_udm.security_result.severity, read_only_udm.security_result.severity_details | Directement mappé à partir du champ Level dans le journal brut. La gravité est déterminée en fonction de la valeur de Level : Information , Informational , 0 ou 4 correspond à INFORMATIONAL ; Warning , 1 ou 3 correspond à MEDIUM ; Error ou 2 correspond à ERROR ; Critical correspond à CRITICAL . |
OperationName | read_only_udm.metadata.product_event_type | Directement mappé à partir du champ OperationName dans le journal brut. |
ResourceGroup | read_only_udm.security_result.detection_fields.value | Directement mappé à partir du champ ResourceGroup dans le journal brut. La clé est définie sur ResourceGroup . |
ResultSignature | read_only_udm.additional.fields.value.string_value | Directement mappé à partir du champ ResultSignature dans le journal brut. La clé est définie sur resultSignature . |
ResultType | read_only_udm.additional.fields.value.string_value | Directement mappé à partir du champ ResultType dans le journal brut. La clé est définie sur resultType . |
TenantId | read_only_udm.metadata.product_deployment_id | Directement mappé à partir du champ TenantId dans le journal brut. |
TimeGenerated | read_only_udm.metadata.event_timestamp.seconds, read_only_udm.metadata.event_timestamp.nanos | Directement mappé à partir du champ TimeGenerated dans le journal brut. Le champ est analysé en tant qu'horodatage et utilisé pour renseigner les champs seconds et nanos . |
TokenIssuerType | read_only_udm.security_result.detection_fields.value | Directement mappé à partir du champ TokenIssuerType dans le journal brut. La clé est définie sur TokenIssuerType . |
UniqueTokenIdentifier | read_only_udm.security_result.detection_fields.value | Directement mappé à partir du champ UniqueTokenIdentifier dans le journal brut. La clé est définie sur UniqueTokenIdentifier . |
UserAgent | read_only_udm.network.http.user_agent, read_only_udm.network.http.parsed_user_agent | Directement mappé à partir du champ UserAgent dans le journal brut. Le champ est analysé en tant que chaîne user-agent et utilisé pour remplir l'objet parsed_user_agent . |
UserDisplayName | read_only_udm.target.user.user_display_name | Directement mappé à partir du champ UserDisplayName dans le journal brut. |
UserId | read_only_udm.target.user.userid | Directement mappé à partir du champ UserId dans le journal brut. |
UserPrincipalName | read_only_udm.target.user.email_addresses | Mappé directement à partir du champ UserPrincipalName du journal brut, mais uniquement s'il correspond au modèle d'adresse e-mail. |
UserType | read_only_udm.target.user.attribute.roles.name | Directement mappé à partir du champ UserType dans le journal brut. |
_Internal_WorkspaceResourceId | read_only_udm.security_result.detection_fields.value | Directement mappé à partir du champ _Internal_WorkspaceResourceId dans le journal brut. La clé est définie sur Internal_WorkspaceResourceId . |
_ItemId | read_only_udm.security_result.detection_fields.value | Directement mappé à partir du champ _ItemId dans le journal brut. La clé est définie sur ItemId . |
properties.appId | read_only_udm.security_result.detection_fields.value | Directement mappé à partir du champ appId dans l'objet properties du journal brut. La clé est définie sur appId . |
properties.authenticationDetails[].authenticationMethod | read_only_udm.security_result.detection_fields.value | Directement mappé à partir du champ authenticationMethod dans le tableau authenticationDetails du journal brut. La clé est définie sur authenticationMethod . |
properties.authenticationDetails[].authenticationMethodDetail | read_only_udm.security_result.detection_fields.value | Directement mappé à partir du champ authenticationMethodDetail dans le tableau authenticationDetails du journal brut. La clé est définie sur authenticationMethodDetail . |
properties.authenticationDetails[].authenticationStepDateTime | read_only_udm.security_result.detection_fields.value | Directement mappé à partir du champ authenticationStepDateTime dans le tableau authenticationDetails du journal brut. La clé est définie sur authenticationStepDateTime . |
properties.authenticationDetails[].authenticationStepRequirement | read_only_udm.security_result.detection_fields.value | Directement mappé à partir du champ authenticationStepRequirement dans le tableau authenticationDetails du journal brut. La clé est définie sur authenticationStepRequirement . |
properties.authenticationDetails[].authenticationStepResultDetail | read_only_udm.security_result.detection_fields.value | Directement mappé à partir du champ authenticationStepResultDetail dans le tableau authenticationDetails du journal brut. La clé est définie sur authenticationStepResultDetail . |
properties.authenticationDetails[].succeeded | read_only_udm.security_result.action, read_only_udm.security_result.action_details | Directement mappé à partir du champ succeeded dans le tableau authenticationDetails du journal brut. Si la valeur est true , l'action est définie sur ALLOW . Sinon, elle est définie sur BLOCK . |
properties.conditionalAccessStatus | read_only_udm.additional.fields.value.string_value | Directement mappé à partir du champ conditionalAccessStatus dans l'objet properties du journal brut. La clé est définie sur conditionalAccessStatus . |
properties.id | read_only_udm.security_result.detection_fields.value | Directement mappé à partir du champ id dans l'objet properties du journal brut. La clé est définie sur id . |
properties.status.errorCode | read_only_udm.security_result.action | Si la valeur est 0, l'action est définie sur ALLOW . Sinon, elle est définie sur BLOCK . |
properties.userId | read_only_udm.target.user.userid | Directement mappé à partir du champ userId dans l'objet properties du journal brut. |
properties.userPrincipalName | read_only_udm.target.user.email_addresses | Directement mappé à partir du champ userPrincipalName dans l'objet properties du journal brut, mais uniquement s'il correspond au format d'adresse e-mail. |
resourceId | read_only_udm.target.resource.name | Directement mappé à partir du champ resourceId dans le journal brut. |
temps | read_only_udm.metadata.event_timestamp.seconds, read_only_udm.metadata.event_timestamp.nanos | Directement mappé à partir du champ time dans le journal brut. Le champ est analysé en tant qu'horodatage et utilisé pour renseigner les champs seconds et nanos . |
read_only_udm.extensions.auth.type | La valeur est définie sur AUTHTYPE_UNSPECIFIED . |
|
read_only_udm.metadata.event_type | La valeur est déterminée en fonction de la présence des champs principal.ip et target.user.userid : si les deux sont présents, le type est défini sur USER_LOGIN ; si seul principal.ip est présent, le type est défini sur STATUS_UPDATE ; sinon, il est défini sur GENERIC_EVENT . |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.