Ingérer les journaux d'activité Microsoft Azure
Ce document décrit la procédure à suivre pour ingérer les journaux d'activité Microsoft Azure (AZURE_ACTIVITY
) dans Google Security Operations.
Configurer un compte de stockage
Pour configurer un compte de stockage, procédez comme suit :
- Dans la console Azure, recherchez Comptes de stockage.
- Cliquez sur Create (Créer).
- Sélectionnez l'abonnement, le groupe de ressources, la région, les performances (nous vous recommandons de choisir "Standard") et la redondance (nous vous recommandons de choisir "GRS" ou "LRS") nécessaires pour le compte, puis saisissez un nom pour le nouveau compte de stockage.
- Cliquez sur Examiner et créer, vérifiez l'aperçu du compte, puis cliquez sur Créer.
- Sur la page Vue d'ensemble du compte de stockage, sélectionnez Clés d'accès dans le volet de navigation de gauche de la fenêtre.
- Cliquez sur Afficher les clés et notez la clé partagée du compte de stockage.
- Sélectionnez Points de terminaison dans le menu de navigation de gauche de la fenêtre.
- Notez le point de terminaison Blob service. (https://<storageaccountname>.blob.core.windows.net/)
Configurer la journalisation des activités Azure
Pour configurer la journalisation des activités Azure, procédez comme suit :
- Dans la console Azure, recherchez Monitor.
- Cliquez sur le lien Journal d'activité dans la navigation de gauche de la page.
- Cliquez sur Exporter les journaux d'activité en haut de la fenêtre.
- Cliquez sur Ajouter un paramètre de diagnostic.
- Sélectionnez toutes les catégories que vous souhaitez exporter vers Google SecOps.
- Sous Détails de la destination, sélectionnez Archiver dans un compte de stockage.
- Sélectionnez l'abonnement et le compte de stockage que vous avez créés à l'étape précédente.
- Cliquez sur Enregistrer.
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 :
- Accédez à Paramètres SIEM > Flux.
- Cliquez sur Add New Feed (Ajouter un flux).
- Sur la page suivante, cliquez sur Configurer un seul flux.
- Saisissez un nom unique pour le Nom du champ.
- Sélectionnez Microsoft Azure Blob Storage comme type de source.
- Sélectionnez Activité Microsoft Azure comme Type de journal.
- Cliquez sur Suivant.
- Configurez les paramètres d'entrée obligatoires suivants :
- URI Azure : saisissez la valeur du point de terminaison Blob Service que vous avez enregistrée précédemment, suivie de insights-activity-logs (par exemple, https://acme-azure-chronicle.blob.core.windows.net/insights-activity-logs).
- URI is a (L'URI est un) : sélectionnez Directory which includes subdirectories (Répertoire incluant des sous-répertoires).
- Option de suppression de la source : indiquez si vous souhaitez supprimer les fichiers et les répertoires après le transfert.
- Clé partagée : saisissez la valeur de la clé partagée que vous avez récupérée précédemment.
- Cliquez sur Suivant, puis sur Envoyer.
Configurer des flux depuis le Hub de contenu
Indiquez les valeurs des champs suivants :
- URI Azure : saisissez la valeur du point de terminaison Blob Service que vous avez enregistrée précédemment, suivie de insights-activity-logs (par exemple, https://acme-azure-chronicle.blob.core.windows.net/insights-activity-logs).
- URI is a (L'URI est un) : sélectionnez Directory which includes subdirectories (Répertoire incluant des sous-répertoires).
- Option de suppression de la source : indiquez si vous souhaitez supprimer les fichiers et les répertoires après le transfert.
- Clé partagée : saisissez la valeur de la clé partagée que vous avez récupérée précédemment.
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.
Référence du mappage de champs
Ce code d'analyseur initialise d'abord un grand nombre de champs avec des chaînes vides, puis effectue une série d'opérations de manipulation de chaînes et d'analyse JSON pour extraire les informations pertinentes du message du journal d'activité Azure. Enfin, il mappe les données extraites aux champs UDM (Unified Data Model), catégorise le type d'événement et l'enrichit avec des détails supplémentaires tels que la gravité, les informations principales et les données réseau.
Table de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
category | read_only_udm.security_result.category_details |
Mappé directement à partir du champ "category" (catégorie) dans le journal brut. |
callerIpAddress | read_only_udm.principal.asset.ip , read_only_udm.principal.ip |
Mappé directement à partir du champ "callerIpAddress" du journal brut. |
correlationId | read_only_udm.security_result.detection_fields.correlationId |
Mappé directement à partir du champ "correlationId" du journal brut. |
data.callerIpAddress | read_only_udm.principal.asset.ip , read_only_udm.principal.ip |
Mappé directement à partir du champ "callerIpAddress" dans l'objet "data" du journal brut. |
data.correlationId | read_only_udm.security_result.detection_fields.correlationId |
Mappé directement à partir du champ "correlationId" dans l'objet "data" du journal brut. |
data.DeploymentUnit | read_only_udm.target.resource.name |
Mappé directement à partir du champ "DeploymentUnit" dans l'objet "data" du journal brut. |
data.details | read_only_udm.metadata.description |
Directement mappé à partir du champ "details" dans l'objet "data" du journal brut, uniquement si le champ "details" n'est pas "Unknown" (Inconnu). |
data.entity | read_only_udm.additional.fields.entity |
Mappé directement à partir du champ "entity" dans l'objet "data" du journal brut. |
data.EventName | read_only_udm.metadata.product_event_type |
Directement mappé à partir du champ "EventName" dans l'objet "data" du journal brut. |
data.hierarchy | read_only_udm.additional.fields.hierarchy |
Mappé directement à partir du champ "hierarchy" (hiérarchie) dans l'objet "data" (données) du journal brut. |
data.identity.authorization.action | read_only_udm.security_result.detection_fields.action |
Mappé directement à partir du champ "action" dans l'objet "authorization" de l'objet "identity" du journal brut. |
data.identity.authorization.evidence.principalId | read_only_udm.principal.user.product_object_id , read_only_udm.principal.resource.product_object_id , read_only_udm.principal.group.product_object_id |
Directement mappé à partir du champ "principalId" dans l'objet "evidence" de l'objet "authorization" de l'objet "identity" dans le journal brut. Le champ UDM spécifique auquel il est mappé dépend de la valeur du champ "principalType". Si "principalType" est défini sur "User" ou "ServicePrincipal", il correspond à principal.user.product_object_id . Si "principalType" est défini sur "Group", il correspond à principal.group.product_object_id . Si "principalType" est défini sur "ServicePrincipal", il correspond à principal.resource.product_object_id . |
data.identity.authorization.evidence.principalType | read_only_udm.principal.resource.resource_subtype |
Directement mappé à partir du champ "principalType" dans l'objet "evidence" de l'objet "authorization" de l'objet "identity" dans le journal brut. |
data.identity.authorization.evidence.role | read_only_udm.principal.user.role_name |
Directement mappé à partir du champ "role" dans l'objet "evidence" de l'objet "authorization" de l'objet "identity" dans le journal brut. |
data.identity.authorization.evidence.roleAssignmentId | read_only_udm.principal.resource.attribute.labels.roleAssignmentId |
Directement mappé à partir du champ "roleAssignmentId" dans l'objet "evidence" de l'objet "authorization" de l'objet "identity" dans le journal brut. |
data.identity.authorization.evidence.roleAssignmentScope | read_only_udm.principal.resource.attribute.labels.roleAssignmentScope |
Directement mappé à partir du champ "roleAssignmentScope" dans l'objet "evidence" de l'objet "authorization" de l'objet "identity" dans le journal brut. |
data.identity.authorization.evidence.roleDefinitionId | read_only_udm.principal.resource.attribute.labels.roleDefinitionId |
Directement mappé à partir du champ "roleDefinitionId" dans l'objet "evidence" de l'objet "authorization" de l'objet "identity" dans le journal brut. |
data.identity.authorization.scope | read_only_udm.security_result.detection_fields.scope |
Directement mappé à partir du champ "scope" dans l'objet "authorization" de l'objet "identity" du journal brut. |
data.identity.claims.aio | read_only_udm.security_result.detection_fields.aio |
Mappé directement à partir du champ "aio" dans l'objet "claims" de l'objet "identity" du journal brut. |
data.identity.claims.appid | read_only_udm.security_result.detection_fields.appid |
Directement mappé à partir du champ "appid" dans l'objet "claims" de l'objet "identity" du journal brut. |
data.identity.claims.appidacr | read_only_udm.security_result.detection_fields.appidacr |
Directement mappé à partir du champ "appidacr" dans l'objet "claims" de l'objet "identity" du journal brut. |
data.identity.claims.aud | read_only_udm.security_result.detection_fields.aud |
Mappé directement à partir du champ "aud" dans l'objet "claims" de l'objet "identity" du journal brut. |
data.identity.claims.exp | read_only_udm.security_result.detection_fields.exp |
Directement mappé à partir du champ "exp" dans l'objet "claims" de l'objet "identity" dans le journal brut. |
data.identity.claims.http://schemas.microsoft.com/identity/claims/identityprovider |
read_only_udm.security_result.detection_fields.identityprovider |
Directement mappé à partir du champ "http://schemas.microsoft.com/identity/claims/identityprovider" dans l'objet "claims" de l'objet "identity" du journal brut. |
data.identity.claims.http://schemas.microsoft.com/identity/claims/objectidentifier |
read_only_udm.security_result.detection_fields.objectidentifier |
Directement mappé à partir du champ "http://schemas.microsoft.com/identity/claims/objectidentifier" dans l'objet "claims" de l'objet "identity" du journal brut. |
data.identity.claims.http://schemas.microsoft.com/identity/claims/tenantid |
read_only_udm.security_result.detection_fields.tenantid |
Directement mappé à partir du champ "http://schemas.microsoft.com/identity/claims/tenantid" dans l'objet "claims" de l'objet "identity" du journal brut. |
data.identity.claims.http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier |
read_only_udm.security_result.detection_fields.nameidentifier |
Mappé directement à partir du champ "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier" dans l'objet "claims" de l'objet "identity" du journal brut. |
data.identity.claims.iat | read_only_udm.security_result.detection_fields.iat |
Directement mappé à partir du champ "iat" dans l'objet "claims" de l'objet "identity" du journal brut. |
data.identity.claims.iss | read_only_udm.security_result.detection_fields.iss |
Directement mappé à partir du champ "iss" dans l'objet "claims" de l'objet "identity" du journal brut. |
data.identity.claims.nbf | read_only_udm.security_result.detection_fields.nbf |
Directement mappé à partir du champ "nbf" dans l'objet "claims" de l'objet "identity" du journal brut. |
data.identity.claims.rh | read_only_udm.security_result.detection_fields.rh |
Directement mappé à partir du champ "rh" dans l'objet "claims" de l'objet "identity" dans le journal brut. |
data.identity.claims.uti | read_only_udm.security_result.detection_fields.uti |
Mappé directement à partir du champ "uti" dans l'objet "claims" de l'objet "identity" dans le journal brut. |
data.identity.claims.ver | read_only_udm.security_result.detection_fields.ver |
Directement mappé à partir du champ "ver" dans l'objet "claims" de l'objet "identity" du journal brut. |
data.identity.claims.xms_tcdt | read_only_udm.security_result.detection_fields.xms_tcdt |
Directement mappé à partir du champ "xms_tcdt" dans l'objet "claims" de l'objet "identity" du journal brut. |
data.identity.UserName | read_only_udm.principal.user.user_display_name |
Mappé directement à partir du champ "UserName" dans l'objet "identity" du journal brut. |
data.level | read_only_udm.security_result.severity , read_only_udm.security_result.severity_details |
Mappé directement à partir du champ "level" (niveau) dans l'objet "data" (données) du journal brut. Le champ "level" est également utilisé pour déterminer la valeur du champ severity . Si "level" est défini sur "Information" ou "Informational", severity est défini sur "INFORMATIONAL". Si "level" est défini sur "Warning", severity est défini sur "MEDIUM". Si "level" est défini sur "Error", severity est défini sur "ERROR". Si "level" est défini sur "Critical", severity est défini sur "CRITICAL". |
data.location | read_only_udm.target.location.name |
Mappé directement à partir du champ "location" (emplacement) dans l'objet "data" (données) du journal brut. |
data.operationName | read_only_udm.metadata.product_event_type |
Mappé directement à partir du champ "operationName" dans l'objet "data" du journal brut. |
data.properties.EventChannel | read_only_udm.additional.fields.properties EventChannel |
Mappé directement à partir du champ "EventChannel" dans l'objet "properties" de l'objet "data" du journal brut. |
data.properties.EventSource | read_only_udm.additional.fields.properties EventSource |
Directement mappé à partir du champ "EventSource" dans l'objet "properties" de l'objet "data" du journal brut. |
data.properties.EventId | read_only_udm.metadata.product_log_id |
Directement mappé à partir du champ "EventId" dans l'objet "properties" de l'objet "data" du journal brut. |
data.properties.eventProperties.cause | read_only_udm.security_result.detection_fields.cause |
Directement mappé à partir du champ "cause" dans l'objet "eventProperties" de l'objet "properties" de l'objet "data" dans le journal brut. |
data.properties.eventProperties.clientIPAddress | read_only_udm.principal.asset.ip , read_only_udm.principal.ip |
Directement mappé à partir du champ "clientIPAddress" dans l'objet "eventProperties" de l'objet "properties" de l'objet "data" dans le journal brut. |
data.properties.eventProperties.compromisedHost | read_only_udm.principal.asset.hostname , read_only_udm.principal.hostname |
Directement mappé à partir du champ "compromisedHost" dans l'objet "eventProperties" de l'objet "properties" de l'objet "data" dans le journal brut. |
data.properties.eventProperties.currentHealthStatus | read_only_udm.security_result.detection_fields.currentHealthStatus |
Directement mappé à partir du champ "currentHealthStatus" dans l'objet "eventProperties" de l'objet "properties" de l'objet "data" dans le journal brut. |
data.properties.eventProperties.previousHealthStatus | read_only_udm.security_result.detection_fields.previousHealthStatus |
Directement mappé à partir du champ "previousHealthStatus" dans l'objet "eventProperties" de l'objet "properties" de l'objet "data" dans le journal brut. |
data.properties.eventProperties.type | read_only_udm.security_result.detection_fields.type |
Directement mappé à partir du champ "type" dans l'objet "eventProperties" de l'objet "properties" de l'objet "data" dans le journal brut. |
data.properties.eventProperties.User | read_only_udm.principal.user.userid |
Directement mappé à partir du champ "User" (Utilisateur) dans l'objet "eventProperties" de l'objet "properties" de l'objet "data" dans le journal brut. |
data.properties.eventProperties.userName | read_only_udm.principal.user.user_display_name |
Mappé directement à partir du champ "userName" dans l'objet "eventProperties" de l'objet "properties" de l'objet "data" du journal brut, après suppression du préfixe "SECURE\". |
data.properties.ipAddress | read_only_udm.principal.asset.ip , read_only_udm.principal.ip |
Mappé directement à partir du champ "ipAddress" dans l'objet "properties" de l'objet "data" du journal brut. |
data.properties.legacyChannels | read_only_udm.security_result.detection_fields.legacyChannels |
Directement mappé à partir du champ "legacyChannels" dans l'objet "properties" de l'objet "data" du journal brut. |
data.properties.legacyEventDataId | read_only_udm.security_result.detection_fields.legacyEventDataId |
Directement mappé à partir du champ "legacyEventDataId" dans l'objet "properties" de l'objet "data" du journal brut. |
data.properties.legacyResourceId | read_only_udm.security_result.detection_fields.legacyResourceId |
Directement mappé à partir du champ "legacyResourceId" dans l'objet "properties" de l'objet "data" du journal brut. |
data.properties.legacyResourceGroup | read_only_udm.security_result.detection_fields.legacyResourceGroup |
Directement mappé à partir du champ "legacyResourceGroup" dans l'objet "properties" de l'objet "data" du journal brut. |
data.properties.legacyResourceProviderName | read_only_udm.security_result.detection_fields.legacyResourceProviderName |
Directement mappé à partir du champ "legacyResourceProviderName" dans l'objet "properties" de l'objet "data" du journal brut. |
data.properties.legacyResourceType | read_only_udm.security_result.detection_fields.legacyResourceType |
Directement mappé à partir du champ "legacyResourceType" dans l'objet "properties" de l'objet "data" du journal brut. |
data.properties.legacySubscriptionId | read_only_udm.security_result.detection_fields.legacySubscriptionId |
Directement mappé à partir du champ "legacySubscriptionId" dans l'objet "properties" de l'objet "data" du journal brut. |
data.properties.operationId | read_only_udm.security_result.detection_fields.operationId |
Mappé directement à partir du champ "operationId" dans l'objet "properties" de l'objet "data" du journal brut. |
data.properties.result | read_only_udm.security_result.action_details |
Directement mappé à partir du champ "result" dans l'objet "properties" de l'objet "data" du journal brut. |
data.properties.statusCode | read_only_udm.network.http.response_code |
Directement mappé à partir du champ "statusCode" dans l'objet "properties" de l'objet "data" du journal brut. |
data.properties.suspiciousCommandLine | read_only_udm.target.process.command_line |
Directement mappé à partir du champ "suspiciousCommandLine" dans l'objet "properties" de l'objet "data" du journal brut. |
data.properties.suspiciousProcess | read_only_udm.target.process.file.full_path |
Directement mappé à partir du champ "suspiciousProcess" dans l'objet "properties" de l'objet "data" du journal brut. |
data.properties.suspiciousProcessId | read_only_udm.target.process.pid |
Directement mappé à partir du champ "suspiciousProcessId" dans l'objet "properties" de l'objet "data" du journal brut. |
data.properties.tlsVersion | read_only_udm.network.tls.version |
Directement mappé à partir du champ "tlsVersion" dans l'objet "properties" de l'objet "data" du journal brut. |
data.properties.userAgent | read_only_udm.network.http.user_agent , read_only_udm.network.http.parsed_user_agent |
Mappé directement à partir du champ "userAgent" dans l'objet "properties" de l'objet "data" du journal brut. |
data.properties.userAgentHeader | read_only_udm.network.http.user_agent , read_only_udm.network.http.parsed_user_agent |
Mappé directement à partir du champ "userAgentHeader" dans l'objet "properties" de l'objet "data" du journal brut. |
data.properties.userId | read_only_udm.target.user.product_object_id |
Directement mappé à partir du champ "userId" dans l'objet "properties" de l'objet "data" du journal brut. |
data.ReleaseVersion | read_only_udm.metadata.product_version |
Mappé directement à partir du champ "ReleaseVersion" dans l'objet "data" du journal brut. |
data.resourceId | read_only_udm.target.resource.name |
Mappé directement à partir du champ "resourceId" dans l'objet "data" du journal brut. |
data.resourceType | read_only_udm.additional.fields.resourceType |
Mappé directement à partir du champ "resourceType" dans l'objet "data" du journal brut. |
data.resultDescription | read_only_udm.metadata.description |
Mappé directement à partir du champ "resultDescription" dans l'objet "data" du journal brut. |
data.resultSignature | read_only_udm.additional.fields.resultSignature |
Mappé directement à partir du champ "resultSignature" dans l'objet "data" du journal brut. |
data.resultType | read_only_udm.security_result.action_details , read_only_udm.additional.fields.resultType |
Directement mappé à partir du champ "resultType" dans l'objet "data" du journal brut. |
data.RoleLocation | read_only_udm.target.location.name |
Directement mappé à partir du champ "RoleLocation" dans l'objet "data" du journal brut. |
data.time | read_only_udm.metadata.event_timestamp |
Le champ "time" de l'objet "data" du journal brut est analysé pour extraire le code temporel, qui est ensuite mappé sur event_timestamp . |
data.uri | read_only_udm.network.http.referral_url |
Mappé directement à partir du champ "uri" dans l'objet "data" du journal brut. |
read_only_udm.extensions.auth.mechanism |
INTERACTIVE |
Définissez la valeur sur "INTERACTIVE" si le champ "isInteractive" de l'objet "properties" de l'objet "data" du journal brut est défini sur "true". Sinon, la valeur est définie sur "MECHANISM_OTHER". |
read_only_udm.extensions.auth.type |
MACHINE |
Définissez la valeur sur "MACHINE" si le champ "category" du journal brut est "NonInteractiveUserSignInLogs", "ManagedIdentitySignInLogs" ou "ServicePrincipalSignInLogs". |
read_only_udm.metadata.log_type |
AZURE_ACTIVITY |
Codé en dur sur "AZURE_ACTIVITY". |
read_only_udm.metadata.vendor_name |
Microsoft |
Codé en dur sur "Microsoft". |
read_only_udm.principal.platform |
WINDOWS , MAC , LINUX , ANDROID |
Déterminé en fonction de la valeur du champ "properties.test.deviceDetail.operatingSystem". Si elle contient "Win", platform est défini sur "WINDOWS". Si elle contient "Mac", platform est défini sur "MAC". Si elle contient "Lin", platform est défini sur "LINUX". Si elle contient "Android", platform est défini sur "ANDROID". |
read_only_udm.principal.resource.type |
SERVICE_ACCOUNT , UNSPECIFIED |
Déterminé en fonction de la valeur du champ "identity.authorization.evidence.principalType". Si la valeur est "ServicePrincipal", type est défini sur "SERVICE_ACCOUNT". Sinon, elle est définie sur "UNSPECIFIED". |
read_only_udm.security_result.action |
ALLOW , BLOCK , UNKNOWN_ACTION |
Déterminé en fonction des valeurs des champs "resultType", "status_errorcode" et "statusText". Si "resultType" est "Success", "success", "Succeeded", "Started", "Resolved", "Active", "Updated", "Start", "Accept", "Accepted", "0", si "status_errorcode" est défini sur 0 ou si "statusText" est défini sur "Success", action est défini sur "ALLOW". Si "resultType" est défini sur "Failure" ou "Failed", si "status_errorcode" n'est pas vide ou si "resultType" n'est pas vide, action est défini sur "BLOCK". Sinon, la valeur est définie sur "UNKNOWN_ACTION". |
read_only_udm.target.cloud.environment |
MICROSOFT_AZURE |
Codé en dur sur "MICROSOFT_AZURE". |