Ingérer les journaux d'activité Microsoft Azure

Compatible avec :

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 :

  1. Dans la console Azure, recherchez Comptes de stockage.
  2. Cliquez sur Create (Créer).
  3. 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.
  4. Cliquez sur Examiner et créer, vérifiez l'aperçu du compte, puis cliquez sur Créer.
  5. 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.
  6. Cliquez sur Afficher les clés et notez la clé partagée du compte de stockage.
  7. Sélectionnez Points de terminaison dans le menu de navigation de gauche de la fenêtre.
  8. 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 :

  1. Dans la console Azure, recherchez Monitor.
  2. Cliquez sur le lien Journal d'activité dans la navigation de gauche de la page.
  3. Cliquez sur Exporter les journaux d'activité en haut de la fenêtre.
  4. Cliquez sur Ajouter un paramètre de diagnostic.
  5. Sélectionnez toutes les catégories que vous souhaitez exporter vers Google SecOps.
  6. Sous Détails de la destination, sélectionnez Archiver dans un compte de stockage.
  7. Sélectionnez l'abonnement et le compte de stockage que vous avez créés à l'étape précédente.
  8. 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 :

  1. Accédez à Paramètres SIEM > Flux.
  2. Cliquez sur Add New Feed (Ajouter un flux).
  3. Sur la page suivante, cliquez sur Configurer un seul flux.
  4. Saisissez un nom unique pour le Nom du champ.
  5. Sélectionnez Microsoft Azure Blob Storage comme type de source.
  6. Sélectionnez Activité Microsoft Azure comme Type de journal.
  7. Cliquez sur Suivant.
  8. 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.
  9. 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".