Collecter des journaux d'audit Azure Storage

Compatible avec:

Ce document explique comment exporter les journaux d'audit Azure Storage vers Google Security Operations à l'aide d'un compte Azure Storage. L'analyseur traite les journaux au format JSON, en les transformant en Unified Data Model (UDM). Il extrait des champs du journal brut, effectue des conversions de type de données, enrichit les données avec un contexte supplémentaire (comme l'analyse de l'agent utilisateur et la répartition des adresses IP) et met en correspondance les champs extraits avec les champs UDM correspondants.

Avant de commencer

  • Assurez-vous de disposer d'une instance Google SecOps.
  • Assurez-vous de disposer d'un locataire Azure actif.
  • Assurez-vous de disposer d'un accès privilégié à Azure.

Configurer un compte de stockage Azure

  1. Dans la console Azure, recherchez Comptes de stockage.
  2. Cliquez sur Créer.
  3. 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.
  4. Cliquez sur Examiner et créer.
  5. Consultez la présentation du compte, puis cliquez sur Créer.
  6. Sur la page Vue d'ensemble du compte de stockage, sélectionnez le sous-menu Clés d'accès dans Sécurité et mise en réseau.
  7. Cliquez sur Afficher à côté de key1 ou key2.
  8. Cliquez sur Copy to clipboard (Copier dans le presse-papiers) pour copier la clé.
  9. Enregistrez la clé dans un emplacement sécurisé pour pouvoir l'utiliser ultérieurement.
  10. Sur la page Aperçu du compte de stockage, sélectionnez le sous-menu Points de terminaison dans Paramètres.
  11. Cliquez sur Copier dans le presse-papiers pour copier l'URL du point de terminaison du service Blob (par exemple, https://<storageaccountname>.blob.core.windows.net).
  12. Enregistrez l'URL du point de terminaison dans un endroit sécurisé pour une utilisation ultérieure.

Configurer l'exportation des journaux pour les journaux d'audit Azure Storage

  1. Connectez-vous au portail Azure à l'aide de votre compte privilégié.
  2. Accédez à Storage Accounts > Diagnostic Settings (Comptes de stockage > Paramètres de diagnostic).
  3. Cliquez sur + Ajouter un paramètre de diagnostic.
  4. Sélectionnez les paramètres de diagnostic pour blob, queue, table et file.
    • Sélectionnez l'option allLogs dans Groupes de catégories pour chaque paramètre de diagnostic.
    • Attribuez un nom descriptif à chaque paramètre de diagnostic.
  5. Cochez la case Archiver dans un compte de stockage comme destination.
    • Spécifiez l'abonnement et le compte de stockage.
  6. Cliquez sur Enregistrer.

Configurer un flux dans Google SecOps pour ingérer les journaux d'audit Azure Storage

  1. Accédez à SIEM Settings > Feeds (Paramètres du SIEM > Flux).
  2. Cliquez sur Ajouter.
  3. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux d'audit Azure Storage).
  4. Sélectionnez Microsoft Azure Blob Storage comme Type de source.
  5. Sélectionnez Audit Azure Storage comme Type de journal.
  6. Cliquez sur Suivant.
  7. Spécifiez les valeurs des paramètres d'entrée suivants:

    • URI Azure: URL du point de terminaison de blob.
      • ENDPOINT_URL/BLOB_NAME
        • Remplacez l'élément suivant :
          • ENDPOINT_URL: URL du point de terminaison de blob (https://<storageaccountname>.blob.core.windows.net)
          • BLOB_NAME: nom du blob (par exemple, <logname>-logs)
    • 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.

    • Clé partagée: clé d'accès à Azure Blob Storage.

    • Espace de noms des éléments: espace de noms des éléments.

    • Libellés d'ingestion: libellé à appliquer aux événements de ce flux.

  8. Cliquez sur Suivant.

  9. Vérifiez la configuration de votre nouveau flux dans l'écran Finaliser, puis cliquez sur Envoyer.

Tableau de mappage UDM

Champ de journal Mappage UDM Logique
callerIpAddress principal.asset.ip L'adresse IP est extraite du champ callerIpAddress à l'aide d'un modèle Grok et attribuée à principal.asset.ip.
callerIpAddress principal.ip L'adresse IP est extraite du champ callerIpAddress à l'aide d'un modèle Grok et attribuée à principal.ip.
callerIpAddress principal.port Le numéro de port est extrait du champ callerIpAddress à l'aide d'un modèle Grok et attribué à principal.port.
category security_result.category_details La valeur du champ category est attribuée à security_result.category_details.
correlationId security_result.detection_fields[0].key La chaîne littérale correlationId est attribuée au champ de clé.
correlationId security_result.detection_fields[0].value La valeur du champ correlationId est attribuée à security_result.detection_fields[0].value. La valeur du champ time est analysée en tant que code temporel et attribuée à event.idm.read_only_udm.metadata.event_timestamp. Si category est StorageWrite et que principal.user.userid existe (dérivé de properties.accountName), la valeur est définie sur USER_RESOURCE_UPDATE_CONTENT. Si category est StorageDelete et que principal.user.userid existe, la valeur est définie sur USER_RESOURCE_DELETION. Sinon, la valeur est définie sur USER_RESOURCE_ACCESS. La chaîne littérale AZURE_STORAGE_AUDIT est attribuée à event.idm.read_only_udm.metadata.log_type. La chaîne littérale AZURE_STORAGE_AUDIT est attribuée à event.idm.read_only_udm.metadata.product_name. La valeur du champ schemaVersion est attribuée à event.idm.read_only_udm.metadata.product_version. La chaîne littérale AZURE_STORAGE_AUDIT est attribuée à event.idm.read_only_udm.metadata.vendor_name.
location target.location.name La valeur du champ location est attribuée à target.location.name.
operationName additional.fields[x].key La chaîne littérale operationName est attribuée au champ de clé.
operationName additional.fields[x].value.string_value La valeur du champ operationName est attribuée à additional.fields[x].value.string_value.
operationVersion additional.fields[x].key La chaîne littérale operationVersion est attribuée au champ de clé.
operationVersion additional.fields[x].value.string_value La valeur du champ operationVersion est attribuée à additional.fields[x].value.string_value.
properties.accountName principal.user.userid La valeur du champ properties.accountName est attribuée à principal.user.userid.
properties.clientRequestId additional.fields[x].key La chaîne littérale clientRequestId est attribuée au champ de clé.
properties.clientRequestId additional.fields[x].value.string_value La valeur du champ properties.clientRequestId est attribuée à additional.fields[x].value.string_value.
properties.etag additional.fields[x].key La chaîne littérale etag est attribuée au champ de clé.
properties.etag additional.fields[x].value.string_value La valeur du champ properties.etag est attribuée à additional.fields[x].value.string_value.
properties.objectKey additional.fields[x].key La chaîne littérale objectKey est attribuée au champ de clé.
properties.objectKey additional.fields[x].value.string_value La valeur du champ properties.objectKey est attribuée à additional.fields[x].value.string_value.
properties.requestMd5 additional.fields[x].key La chaîne littérale requestMd5 est attribuée au champ de clé.
properties.requestMd5 additional.fields[x].value.string_value La valeur du champ properties.requestMd5 est attribuée à additional.fields[x].value.string_value.
properties.responseMd5 additional.fields[x].key La chaîne littérale responseMd5 est attribuée au champ de clé.
properties.responseMd5 additional.fields[x].value.string_value La valeur du champ properties.responseMd5 est attribuée à additional.fields[x].value.string_value.
properties.serviceType additional.fields[x].key La chaîne littérale serviceType est attribuée au champ de clé.
properties.serviceType additional.fields[x].value.string_value La valeur du champ properties.serviceType est attribuée à additional.fields[x].value.string_value.
properties.tlsVersion network.tls.version La valeur du champ properties.tlsVersion est attribuée à network.tls.version.
properties.userAgentHeader network.http.parsed_user_agent La valeur du champ properties.userAgentHeader est analysée en tant que chaîne user-agent et attribuée à network.http.parsed_user_agent.
properties.userAgentHeader network.http.user_agent La valeur du champ properties.userAgentHeader est attribuée à network.http.user_agent.
protocol network.application_protocol La valeur du champ protocol est attribuée à network.application_protocol.
resourceId target.resource.id La valeur du champ resourceId est attribuée à target.resource.id.
resourceId target.resource.product_object_id La valeur du champ resourceId est attribuée à target.resource.product_object_id. La chaîne littérale DATABASE est attribuée à target.resource.resource_type.
resourceType additional.fields[x].key La chaîne littérale resourceType est attribuée au champ de clé.
resourceType additional.fields[x].value.string_value La valeur du champ resourceType est attribuée à additional.fields[x].value.string_value. Si statusText est Success, la valeur est définie sur ALLOW.
statusCode network.http.response_code La valeur du champ statusCode est convertie en entier et attribuée à network.http.response_code. La chaîne littérale MICROSOFT_AZURE est attribuée à target.cloud.environment.
time timestamp La valeur du champ time est analysée en tant que code temporel et attribuée à timestamp.
uri network.http.referral_url La valeur du champ uri est attribuée à network.http.referral_url.

Modifications

2024-12-12

  • Mappage de identity.tokenHash, identity.type, identity.requester.appId, identity.requester.tenantId, identity.requester.tokenIssuer, properties.sourceAccessTier, principal.type, auth.action, auth.roleAssignmentId et auth.roleDefinitionId sur additional.fields.
  • Mappage de identity.requester.upn sur src.user.userid.
  • Mappage de identity.requester.objectId sur src.user.product_object_id.

2024-12-06

  • Mappage de smbCommandMinor sur security_result.action_details.

2024-07-31

  • Initialisation de statusText et correlationId sur "null".

2024-04-08

  • Analyseur nouvellement créé.

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.