Collecter des journaux d'audit Azure Storage
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
- 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.
- Consultez la présentation du compte, puis cliquez sur Créer.
- 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.
- Cliquez sur Afficher à côté de key1 ou key2.
- Cliquez sur Copy to clipboard (Copier dans le presse-papiers) pour copier la clé.
- Enregistrez la clé dans un emplacement sécurisé pour pouvoir l'utiliser ultérieurement.
- Sur la page Aperçu 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 du service Blob (par exemple,
https://<storageaccountname>.blob.core.windows.net
). - 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
- Connectez-vous au portail Azure à l'aide de votre compte privilégié.
- Accédez à Storage Accounts > Diagnostic Settings (Comptes de stockage > Paramètres de diagnostic).
- Cliquez sur + Ajouter un paramètre de diagnostic.
- Sélectionnez les paramètres de diagnostic pour
blob
,queue
,table
etfile
.- 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.
- Cochez la case Archiver dans un compte de stockage comme destination.
- Spécifiez l'abonnement et le compte de stockage.
- Cliquez sur Enregistrer.
Configurer un flux dans Google SecOps pour ingérer les journaux d'audit Azure Storage
- Accédez à SIEM Settings > Feeds (Paramètres du SIEM > Flux).
- Cliquez sur Ajouter.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux d'audit Azure Storage).
- Sélectionnez Microsoft Azure Blob Storage comme Type de source.
- Sélectionnez Audit Azure Storage 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 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
)
- 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.
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.
- URI Azure: URL du point de terminaison de blob.
Cliquez sur Suivant.
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
etauth.roleDefinitionId
suradditional.fields
. - Mappage de
identity.requester.upn
sursrc.user.userid
. - Mappage de
identity.requester.objectId
sursrc.user.product_object_id
.
2024-12-06
- Mappage de
smbCommandMinor
sursecurity_result.action_details
.
2024-07-31
- Initialisation de
statusText
etcorrelationId
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.