Collecter les journaux Azure Application Gateway

Compatible avec:

Ce document explique comment collecter les journaux de la passerelle d'application Azure en configurant un flux Google Security Operations. Cet analyseur gère les structures JSON à enregistrement unique et multi-enregistrement, extrait des champs du tableau "records", effectue des conversions de type de données, met en correspondance des champs avec l'UDM et enrichit les données avec des métadonnées et des champs dérivés tels que le type de connexion réseau. Il gère également une logique spécifique pour différentes valeurs operationName, en extrayant les adresses IP, les sous-réseaux et d'autres informations de configuration pertinents.

Avant de commencer

Assurez-vous d'avoir effectué les opérations suivantes :

  • Une instance Google SecOps.
  • Accès privilégié à un abonnement Azure.
  • Un environnement Application Gateway Azure (locataire) dans 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 Présentation 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 clé1 ou clé2.
  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 Azure Application Gateway

  1. Connectez-vous au portail Azure.
  2. Accédez au groupe de ressources souhaité.
  3. Sélectionnez Passerelle d'application (la fenêtre Passerelle d'application s'affiche).
  4. Dans la section Surveillance, sélectionnez Paramètres de diagnostic > Activer les diagnostics.
  5. Sélectionnez Ajouter un paramètre de diagnostic (la fenêtre Paramètres de diagnostic affiche les paramètres des journaux de diagnostic).
  6. Dans la section Journal, procédez comme suit :
    1. Cochez la case ApplicationGatewayAccessLog.
    2. Cochez la case ApplicationGatewayFirewallLog.
  7. Pour stocker des journaux dans le compte de stockage, procédez comme suit :
    1. Cochez la case Archiver dans un compte de stockage.
    2. Dans la liste Abonnement, sélectionnez un abonnement existant.
    3. Dans la liste Compte de stockage, sélectionnez un compte de stockage existant.

Configurer un flux dans Google SecOps pour ingérer les journaux de la passerelle d'application Azure

  1. Accédez à 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 de la passerelle d'application Azure).
  4. Sélectionnez Microsoft Azure Blob Storage comme Type de source.
  5. Sélectionnez Azure Application Gateway 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, insights-logs-<logname>)
    • 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
Category metadata.product_event_type Mappé directement à partir du champ Category.
ClientOperationId additional.fields[].key:"ClientOperationId", value.string_value Mappé directement à partir du champ ClientOperationId.
CorrelationRequestId additional.fields[].key:"CorrelationRequestId", value.string_value Mappé directement à partir du champ CorrelationRequestId.
GatewayManagerVersion additional.fields[].key:"GatewayManagerVersion", value.string_value Mappé directement à partir du champ GatewayManagerVersion.
category metadata.product_event_type Mappé directement à partir du champ category.
level security_result.severity Mappé directement à partir du champ level, converti en majuscules. Si la valeur est "WARNING" (AVERTISSEMENT), la gravité est définie sur "HIGH" (ÉLEVÉE) et security_result.severity_details est défini sur la valeur d'origine.
properties.clientIP principal.ip, principal.asset.ip Mappé directement à partir du champ properties.clientIP.
properties.clientPort principal.port Mappé directement à partir du champ properties.clientPort, converti en entier.
properties.clientResponseTime additional.fields[].key:"clientResponseTime", value.string_value Mappé directement à partir du champ properties.clientResponseTime.
properties.configuration.BgpConfiguration.GatewayConfig.Asn security_result.detection_fields[].key:"ASN", value Mappé directement à partir du champ properties.configuration.BgpConfiguration.GatewayConfig.Asn lorsque operationName est "SetGatewayConfiguration".
properties.configuration.BgpConfiguration.GatewayConfig.PeerAddress target.ip, target.asset.ip Mappé directement à partir du champ properties.configuration.BgpConfiguration.GatewayConfig.PeerAddress lorsque operationName est "SetGatewayConfiguration".
properties.configuration.BgpConfiguration.GatewayConfig.PeerType security_result.detection_fields[].key:"PeerType", value Mappé directement à partir du champ properties.configuration.BgpConfiguration.GatewayConfig.PeerType lorsque operationName est "SetGatewayConfiguration".
properties.configuration.IkeVersion principal.resource.attribute.labels[].key:"ike_version", value Mappé directement à partir du champ properties.configuration.IkeVersion lorsque operationName est "SetConnectionConfiguration".
properties.configuration.LocalSubnets principal.resource.attribute.labels[].key:"local subnets", value Chaîne concaténée d'adresses IP du tableau properties.configuration.LocalSubnets lorsque operationName est "SetConnectionConfiguration".
properties.configuration.LocalTunnelEndpoint principal.ip, principal.asset.ip Mappé directement à partir du champ properties.configuration.LocalTunnelEndpoint lorsque operationName est "SetConnectionConfiguration".
properties.configuration.Name principal.hostname, principal.asset.hostname Mappé directement à partir du champ properties.configuration.Name. Si cette valeur est vide, la valeur est extraite de properties.instance.
properties.configuration.RemoteSite target.hostname, target.asset.hostname Mappé directement à partir du champ properties.configuration.RemoteSite.
properties.configuration.RemoteSubnets principal.resource.attribute.labels[].key:"remote subnets", value Chaîne concaténée d'adresses IP du tableau properties.configuration.RemoteSubnets lorsque operationName est "SetConnectionConfiguration".
properties.configuration.RemoteTunnelEndpoint target.ip, target.asset.ip Mappé directement à partir du champ properties.configuration.RemoteTunnelEndpoint lorsque operationName est "SetConnectionConfiguration".
properties.configuration.VIPAddress principal.ip, principal.asset.ip Mappé directement à partir du champ properties.configuration.VIPAddress lorsque operationName est "SetGatewayConfiguration".
properties.configuration.VirtualNetworkRanges principal.resource.attribute.labels[].key:"virutal network ranges", value Chaîne concaténée d'adresses IP du tableau properties.configuration.VirtualNetworkRanges lorsque operationName est "SetGatewayConfiguration".
properties.configuration.VirtualNetworkSubnets principal.resource.attribute.labels[].key:"virtual network subnets", value Chaîne concaténée d'adresses IP du tableau properties.configuration.VirtualNetworkSubnets lorsque operationName est "SetGatewayConfiguration".
properties.error_info additional.fields[].key:"error_info", value.string_value Mappé directement à partir du champ properties.error_info.
properties.host principal.hostname, principal.asset.hostname Mappé directement à partir du champ properties.host si properties.originalHost est vide.
properties.httpMethod network.http.method Mappé directement à partir du champ properties.httpMethod.
properties.httpStatus network.http.response_code Mappé directement à partir du champ properties.httpStatus, converti en entier.
properties.httpVersion network.application_protocol Définissez cette valeur sur "HTTP" si le champ properties.httpVersion contient "HTTP".
properties.instance principal.hostname, principal.asset.hostname Utilisé comme valeur pour principal.hostname si properties.configuration.Name est vide.
properties.message metadata.description Mappé directement à partir du champ properties.message.
properties.operationName additional.fields[].key:"operationName", value.string_value Mappé directement à partir du champ properties.operationName.
properties.operationStatus security_result.category_details Mappé directement à partir du champ properties.operationStatus. Si la valeur est "Success" ou "InProgress", security_result.action est défini sur "ALLOW".
properties.originalHost principal.hostname, principal.asset.hostname Mappé directement à partir du champ properties.originalHost.
properties.originalRequestUriWithArgs additional.fields[].key:"originalRequestUriWithArgs", value.string_value Mappé directement à partir du champ properties.originalRequestUriWithArgs.
properties.receivedBytes network.received_bytes Mappé directement à partir du champ properties.receivedBytes, converti en entier non signé.
properties.requestQuery additional.fields[].key:"requestQuery", value.string_value Mappé directement à partir du champ properties.requestQuery.
properties.requestUri target.url Mappé directement à partir du champ properties.requestUri.
properties.sentBytes network.sent_bytes Mappé directement à partir du champ properties.sentBytes, converti en entier non signé.
properties.serverResponseLatency additional.fields[].key:"Server Response Latency", value.string_value Mappé directement à partir du champ properties.serverResponseLatency.
properties.serverRouted target.ip, target.asset.ip, target.port L'adresse IP et le port sont extraits du champ properties.serverRouted à l'aide d'une expression régulière.
properties.sslCipher network.tls.cipher Mappé directement à partir du champ properties.sslCipher.
properties.sslClientCertificateIssuerName network.tls.server.certificate.issuer Mappé directement à partir du champ properties.sslClientCertificateIssuerName.
properties.sslProtocol network.tls.version Mappé directement à partir du champ properties.sslProtocol.
properties.timeTaken additional.fields[].key:"timeTaken", value.string_value Mappé directement à partir du champ properties.timeTaken.
properties.transactionId network.session_id Mappé directement à partir du champ properties.transactionId.
properties.userAgent network.http.user_agent, network.http.parsed_user_agent Mappé directement à partir du champ properties.userAgent. De plus, le champ est converti en user-agent analysé et mappé sur network.http.parsed_user_agent.
properties.WAFEvaluationTime additional.fields[].key:"WAFEvaluationTime", value.string_value Mappé directement à partir du champ properties.WAFEvaluationTime.
properties.WAFMode additional.fields[].key:"WAFMode", value.string_value Mappé directement à partir du champ properties.WAFMode.
resourceId target.resource.id Mappé directement à partir du champ resourceId.
resourceid target.resource.product_object_id Mappé directement à partir du champ resourceid.
ruleName security_result.rule_name Mappé directement à partir du champ ruleName.
time/timeStamp metadata.event_timestamp, timestamp Analyse comme un code temporel au format RFC 3339 ou ISO 8601. timeStamp est préférable, mais time est utilisé si timeStamp n'est pas présent.
(Logique de l'analyseur) metadata.event_type Définissez-le sur "NETWORK_CONNECTION" si le principal et la cible sont tous deux présents, sur "STATUS_UPDATE" si seul le principal est présent, et sur "GENERIC_EVENT" dans le cas contraire.
(Logique de l'analyseur) metadata.product_name Définissez-le sur "Azure Gateway".
(Logique de l'analyseur) metadata.vendor_name Défini sur "Microsoft".
(Logique de l'analyseur) has_principal Indicateur booléen défini sur "true" si des informations principales (nom d'hôte, adresse IP ou port) sont extraites, et sur "false" dans le cas contraire.
(Logique de l'analyseur) has_target Indicateur booléen défini sur "true" si des informations cibles (nom d'hôte, adresse IP, port, ID de ressource ou URL) sont extraites, et sur "false" dans le cas contraire.
(Logique de l'analyseur) disambiguation_key Ajouté lorsque plusieurs événements sont extraits d'une seule entrée de journal.

Modifications

2024-04-19

  • Ajout de la compatibilité avec plusieurs journaux JSON d'événements.

2023-12-22

  • "resourceid" a été mappé sur "target.resource.id".
  • "properties.operationStatus" a été mappé sur "security_result.category_details".
  • "properties.configuration.Name" a été mappé sur "principal.hostname".
  • Mappage de "properties.message" sur "metadata.description".
  • "properties.configuration.RemoteStie" a été mappé sur "target.hostname".
  • Mappage de "level" sur "security_result.severity_details".
  • Mappage de "properties.configuration.Ikeversion" sur "principal.resource.attribute.labels".
  • "properties.configuration.LocalTunnelEndpoint" a été mappé sur "principal.ip".
  • "properties.configuration.RemoteTunnelEndpoint" a été mappé sur "target.ip".
  • Mise en correspondance de "properties.configuration.LocalSubnets", "properties.configuration.RemoteSubnets", "properties.configuration.VirtualNetworkRanges" et "properties.configuration.VirtualNetworkSubnets" avec "principal.resource.attribute.labels".
  • "properties.configuration.VIPAddress" a été mappé sur "principal.ip".
  • Mappage de "properties.configuration.BgpConfiguration.GatewayConfig.PeerAddress" sur "targrt.ip".
  • "properties.configuration.BgpConfiguration.GatewayConfig.PeerType" et "properties.configuration.BgpConfiguration.GatewayConfig.Asn" ont été mappés sur "security_result.detection_fields".

2023-11-16

  • Analyseur nouvellement créé.