Collecter les journaux Azure Application Gateway

Compatible avec :

Ce document explique comment collecter les journaux Azure Application Gateway en configurant un flux Google Security Operations. Ce parseur gère les structures JSON à un ou plusieurs enregistrements, extrait les champs du tableau "records", effectue des conversions de types de données, mappe les champs à 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 détails de configuration pertinents.

Avant de commencer

Assurez-vous de remplir les conditions préalables suivantes :

  • Instance Google SecOps
  • Accès privilégié à un abonnement Azure
  • Un environnement (locataire) de passerelle d'application Azure 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. Examinez l'aperçu 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 key1 ou key2.
  8. Cliquez sur Copier dans le presse-papiers pour copier la clé.
  9. Enregistrez la clé dans un endroit sûr pour pouvoir l'utiliser ultérieurement.
  10. Sur la page Présentation 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ûr pour une utilisation ultérieure.

Configurer Azure Application Gateway

  1. Connectez-vous au portail Azure.
  2. Accédez au groupe de ressources de votre choix.
  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 les 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 des flux

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 plusieurs flux pour différents types de journaux dans cette famille de produits, consultez Configurer des flux par produit.

Pour configurer un seul flux :

  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. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux Azure Application Gateway).
  5. Sélectionnez Microsoft Azure Blob Storage comme Type de source.
  6. Sélectionnez "Azure Application Gateway" comme type de journal.
  7. Cliquez sur Suivant.
  8. Spécifiez les valeurs des paramètres d'entrée suivants :

    • URI Azure : URL du point de terminaison du blob.
      • ENDPOINT_URL/BLOB_NAME
        • Remplacez l'élément suivant :
          • ENDPOINT_URL : URL du point de terminaison du 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 d'ingestion.
    • Clé partagée : clé d'accès à Azure Blob Storage.
    • Espace de noms de l'élément : espace de noms de l'élément.
    • Libellés d'ingestion : libellé à appliquer aux événements de ce flux.
  9. Cliquez sur Suivant.

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

Configurer des flux depuis le Hub de contenu

Indiquez les valeurs des champs suivants :

  • URI Azure : URL du point de terminaison du blob.
    • ENDPOINT_URL/BLOB_NAME
      • Remplacez l'élément suivant :
        • ENDPOINT_URL : URL du point de terminaison du 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 d'ingestion.
  • Clé partagée : clé d'accès à Azure Blob Storage.

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.

Table 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 Directement mappé à partir du champ level, converti en majuscules. Si la valeur est "WARNING", le niveau de gravité est défini sur "HIGH" (ÉLEVÉ) 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 et 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 défini sur "SetGatewayConfiguration".
properties.configuration.BgpConfiguration.GatewayConfig.PeerAddress target.ip, target.asset.ip Mappé directement à partir du champ properties.configuration.BgpConfiguration.GatewayConfig.PeerAddress lorsque operationName est défini sur "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 défini sur "SetGatewayConfiguration".
properties.configuration.IkeVersion principal.resource.attribute.labels[].key:"ike_version", value Mappé directement à partir du champ properties.configuration.IkeVersion lorsque operationName est défini sur "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 défini sur "SetConnectionConfiguration".
properties.configuration.LocalTunnelEndpoint principal.ip, principal.asset.ip Mappé directement à partir du champ properties.configuration.LocalTunnelEndpoint lorsque operationName est défini sur "SetConnectionConfiguration".
properties.configuration.Name principal.hostname, principal.asset.hostname Mappé directement à partir du champ properties.configuration.Name. Si ce champ 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 défini sur "SetConnectionConfiguration".
properties.configuration.RemoteTunnelEndpoint target.ip, target.asset.ip Mappé directement à partir du champ properties.configuration.RemoteTunnelEndpoint lorsque operationName est défini sur "SetConnectionConfiguration".
properties.configuration.VIPAddress principal.ip, principal.asset.ip Mappé directement à partir du champ properties.configuration.VIPAddress lorsque operationName est défini sur "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 défini sur "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 défini sur "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 et converti en entier.
properties.httpVersion network.application_protocol Définissez 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 Directement mappé à 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 Directement mappé à 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é à 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 Analysé comme un code temporel au format RFC 3339 ou ISO8601. Il est préférable d'utiliser timeStamp, mais time est utilisé si timeStamp n'est pas présent.
(Logique de l'analyseur) metadata.event_type Défini sur "NETWORK_CONNECTION" si le principal et la cible sont 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 la valeur sur "Passerelle Azure".
(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 même entrée de journal.