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 pouvoir l'utiliser ultérieurement.
- 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
- Plate-forme de contenu > Packs de contenu
Configurer des flux à partir de Paramètres SIEM > Flux
Pour configurer plusieurs flux pour différents types de journaux dans cette famille de produits, consultez Configurer des flux par produit.
Pour configurer un seul flux :
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur Add New Feed (Ajouter un flux).
- Sur la page suivante, cliquez sur Configurer un seul flux.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux de connexion Azure).
- Sélectionnez Microsoft Azure Blob Storage comme Type de source.
- Sélectionnez Connexion Azure comme Type de journal.
- Cliquez sur Suivant.
Spécifiez les valeurs des paramètres d'entrée suivants :
- 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 :
- L'URI est : sélectionnez le TYPE d'URI en fonction de la configuration du flux de journaux (Fichier unique | Répertoire | Répertoire incluant des sous-répertoires).
Options de suppression de la source : sélectionnez l'option de suppression en fonction de vos préférences d'ingestion.
Clé partagée : clé d'accès à Azure Blob Storage.
Espace de noms de l'élément : espace de noms de l'élément.
Libellés d'ingestion : libellé à appliquer aux événements de ce flux.
- URI Azure : URL du point de terminaison du blob.
Cliquez sur Suivant.
Vérifiez la configuration de votre nouveau flux sur l'écran Finaliser, puis cliquez sur Envoyer.
Configurer des flux depuis le Hub de contenu
Indiquez les valeurs des champs suivants :
- 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 :
- L'URI est : sélectionnez le TYPE d'URI en fonction de la configuration du flux de journaux (Fichier unique | Répertoire | Répertoire incluant des sous-répertoires).
- Options de suppression de la source : sélectionnez l'option de suppression en fonction de vos préférences d'ingestion.
- Clé partagée : clé d'accès à Azure Blob Storage.
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.
Table de mappage UDM
Champ du journal | Mappage UDM | Logique |
---|---|---|
AppDisplayName | read_only_udm.target.application | Mappé directement à partir du champ AppDisplayName dans le journal brut. |
AppId | read_only_udm.security_result.detection_fields.value | Mappé directement à partir du champ AppId dans le journal brut. La clé est définie sur appId . |
Catégorie | read_only_udm.security_result.category_details | Mappé directement à partir du champ Category dans le journal brut. |
ConditionalAccessPolicies[].displayName | read_only_udm.security_result.rule_name | Mappé directement à 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 | Mappé directement à partir du champ id dans le tableau ConditionalAccessPolicies du journal brut. |
ConditionalAccessPolicies[].Result | read_only_udm.security_result.rule_labels.value | Mappé directement à 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 | Mappé directement à partir du champ ConditionalAccessStatus dans le journal brut. La clé est définie sur conditionalAccessStatus . |
CorrelationId | read_only_udm.security_result.detection_fields.value | Mappé directement à partir du champ CorrelationId dans le journal brut. La clé est définie sur correlationId . |
DurationMs | read_only_udm.additional.fields.value.string_value | Mappé directement à partir du champ DurationMs dans le journal brut. La clé est définie sur durationMs . |
HomeTenantId | read_only_udm.security_result.detection_fields.value | Mappé directement à 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 | Mappé directement à partir du champ IPAddress dans le journal brut. |
ID | read_only_udm.security_result.detection_fields.value | Mappé directement à partir du champ Id dans le journal brut. La clé est définie sur id . |
Identité | read_only_udm.target.resource.attribute.labels.value | Mappé directement à 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 | Mappé directement à 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 | Mappé directement à partir du champ OperationName dans le journal brut. |
ResourceGroup | read_only_udm.security_result.detection_fields.value | Mappé directement à partir du champ ResourceGroup dans le journal brut. La clé est définie sur ResourceGroup . |
ResultSignature | read_only_udm.additional.fields.value.string_value | Mappé directement à partir du champ ResultSignature dans le journal brut. La clé est définie sur resultSignature . |
ResultType | read_only_udm.additional.fields.value.string_value | Mappé directement à partir du champ ResultType dans le journal brut. La clé est définie sur resultType . |
TenantId | read_only_udm.metadata.product_deployment_id | Mappé directement à partir du champ TenantId dans le journal brut. |
TimeGenerated | read_only_udm.metadata.event_timestamp.seconds, read_only_udm.metadata.event_timestamp.nanos | Mappé directement à 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 | Mappé directement à partir du champ TokenIssuerType dans le journal brut. La clé est définie sur TokenIssuerType . |
UniqueTokenIdentifier | read_only_udm.security_result.detection_fields.value | Mappé directement à 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 | Mappé directement à 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 | Mappé directement à partir du champ UserDisplayName dans le journal brut. |
UserId | read_only_udm.target.user.userid | Mappé directement à 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 | Mappé directement à partir du champ UserType dans le journal brut. |
_Internal_WorkspaceResourceId | read_only_udm.security_result.detection_fields.value | Mappé directement à 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 | Mappé directement à 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 | Mappé directement à 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 | Mappé directement à 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 | Mappé directement à 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 | Mappé directement à 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 | Mappé directement à 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 | Mappé directement à 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 | Mappé directement à partir du champ resourceId dans le journal brut. |
temps | read_only_udm.metadata.event_timestamp.seconds, read_only_udm.metadata.event_timestamp.nanos | Mappé directement à 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.