Collecter les journaux Microsoft IIS

Compatible avec :

Ce guide explique comment ingérer des journaux Microsoft Internet Information Services (IIS) dans Google Security Operations à l'aide de Bindplane.

Avant de commencer

Assurez-vous de remplir les conditions suivantes :

  • Une instance Google SecOps
  • Windows Server 2016 ou version ultérieure avec IIS installé
  • Accès administrateur au serveur IIS
  • Si vous exécutez l'agent derrière un proxy, assurez-vous que les ports de pare-feu sont ouverts conformément aux exigences de l'agent Bindplane.

Obtenir le fichier d'authentification d'ingestion Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres du SIEM > Agents de collecte.
  3. Téléchargez le fichier d'authentification d'ingestion. Enregistrez le fichier de manière sécurisée sur le système sur lequel Bindplane sera installé.

Obtenir l'ID client Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres SIEM> Profil.
  3. Copiez et enregistrez le numéro client de la section Informations sur l'organisation.

Configurer la journalisation étendue W3C IIS

Ouvrir le Gestionnaire IIS

  1. Cliquez sur Démarrer.
  2. Saisissez inetmgr et appuyez sur Entrée.
  3. La fenêtre Internet Information Services (IIS) Manager s'ouvre.

Autre méthode :

  1. Appuyez sur la touche Windows+R.
  2. Saisissez inetmgr et appuyez sur Entrée.
  1. Dans le volet Connexions, développez le nom de votre serveur.
  2. Pour configurer la journalisation à l'échelle du serveur (recommandé) :
    • Cliquez sur le nom du serveur au niveau racine.
  3. Pour configurer la journalisation spécifique à un site :
    • Développez Sites, puis cliquez sur le site concerné (par exemple, Site Web par défaut).
  4. Dans la vue Fonctionnalités, double-cliquez sur Logging.

Sélectionnez le format de journal étendu W3C.

  1. Sur la page Logging, dans la section Log File (Fichier journal) :
    • Dans le menu déroulant Format, sélectionnez W3C.
  2. Cliquez sur le bouton Sélectionner des champs.

Configurer les champs de journalisation W3C

Dans la boîte de dialogue Champs de journalisation W3C, sélectionnez les champs selon l'un des modèles suivants :

Utilisez ce modèle lorsque vous avez besoin du contexte complet de la requête, y compris les chaînes de requête et de provenance, pour l'analyse de la sécurité et que vous hébergez plusieurs sites sur un même serveur.

Activez ces champs exactement dans l'ordre suivant :

  1. Date (date)
  2. Heure (heure)
  3. Nom du service (s-sitename)
  4. Adresse IP du serveur (s-ip)
  5. Méthode (cs-method)
  6. URI Stem (cs-uri-stem)
  7. Requête URI (cs-uri-query)
  8. Port du serveur (s-port)
  9. Nom d'utilisateur (cs-username)
  10. Adresse IP du client (c-ip)
  11. User-agent (cs(User-Agent))
  12. URL de provenance (cs(Referer))
  13. État du protocole (sc-status)
  14. Octets envoyés (sc-bytes)
  15. Octets reçus (cs-bytes)

Modèle 2 : De base avec sous-état et performances

Utilisez ce modèle lorsque vous avez besoin de codes d'erreur détaillés (sous-état, état Win32) et de timing des requêtes pour le dépannage.

Activez ces champs dans cet ordre précis :

  1. Date (date)
  2. Heure (heure)
  3. Adresse IP du serveur (s-ip)
  4. Méthode (cs-method)
  5. URI Stem (cs-uri-stem)
  6. Port du serveur (s-port)
  7. Nom d'utilisateur (cs-username)
  8. Adresse IP du client (c-ip)
  9. User-agent (cs(User-Agent))
  10. URL de provenance (cs(Referer))
  11. État du protocole (sc-status)
  12. Sous-état du protocole (sc-substatus)
  13. État Win32 (sc-win32-status)
  14. Durée (time-taken)

Utilisez ce modèle lorsque vous avez besoin d'une journalisation complète avec identification du site, erreurs détaillées, métriques de bande passante et données de performances.

Activez ces champs exactement dans l'ordre suivant :

  1. Date (date)
  2. Heure (heure)
  3. Nom du service (s-sitename)
  4. Adresse IP du serveur (s-ip)
  5. Méthode (cs-method)
  6. URI Stem (cs-uri-stem)
  7. Requête URI (cs-uri-query)
  8. Port du serveur (s-port)
  9. Nom d'utilisateur (cs-username)
  10. Adresse IP du client (c-ip)
  11. User-agent (cs(User-Agent))
  12. État du protocole (sc-status)
  13. Sous-état du protocole (sc-substatus)
  14. État Win32 (sc-win32-status)
  15. Octets envoyés (sc-bytes)
  16. Octets reçus (cs-bytes)
  17. Durée (time-taken)

Schéma 4 : Multisite avec contexte complet

Ce modèle est fonctionnellement identique au modèle 3.

Utilisez ce modèle si vous avez plusieurs sites et que vous avez besoin d'une observabilité complète.

Activez ces champs exactement dans l'ordre suivant :

  1. Date (date)
  2. Heure (heure)
  3. Nom du service (s-sitename)
  4. Adresse IP du serveur (s-ip)
  5. Méthode (cs-method)
  6. URI Stem (cs-uri-stem)
  7. Requête URI (cs-uri-query)
  8. Port du serveur (s-port)
  9. Nom d'utilisateur (cs-username)
  10. Adresse IP du client (c-ip)
  11. User-agent (cs(User-Agent))
  12. État du protocole (sc-status)
  13. Sous-état du protocole (sc-substatus)
  14. État Win32 (sc-win32-status)
  15. Octets envoyés (sc-bytes)
  16. Octets reçus (cs-bytes)
  17. Durée (time-taken)

Scénario 5 : Contexte du site avec métriques complètes (autre)

Ce modèle est fonctionnellement identique aux modèles 3 et 4.

Activez ces champs exactement dans l'ordre suivant :

  1. Date (date)
  2. Heure (heure)
  3. Nom du service (s-sitename)
  4. Adresse IP du serveur (s-ip)
  5. Méthode (cs-method)
  6. URI Stem (cs-uri-stem)
  7. Requête URI (cs-uri-query)
  8. Port du serveur (s-port)
  9. Nom d'utilisateur (cs-username)
  10. Adresse IP du client (c-ip)
  11. User-agent (cs(User-Agent))
  12. État du protocole (sc-status)
  13. Sous-état du protocole (sc-substatus)
  14. État Win32 (sc-win32-status)
  15. Octets envoyés (sc-bytes)
  16. Octets reçus (cs-bytes)
  17. Durée (time-taken)

Modèle 6 : Compatibilité avec TLS, sous-état et performances

Utilisez ce modèle lorsque vous devez suivre les versions du protocole HTTP/HTTPS (HTTP/1.1, HTTP/2, HTTP/3) pour l'analyse de la sécurité ou le dépannage de TLS.

Activez ces champs exactement dans l'ordre suivant :

  1. Date (date)
  2. Heure (heure)
  3. Adresse IP du serveur (s-ip)
  4. Méthode (cs-method)
  5. URI Stem (cs-uri-stem)
  6. Requête URI (cs-uri-query)
  7. Port du serveur (s-port)
  8. Nom d'utilisateur (cs-username)
  9. Adresse IP du client (c-ip)
  10. Version du protocole (cs-version)
  11. User-agent (cs(User-Agent))
  12. URL de provenance (cs(Referer))
  13. État du protocole (sc-status)
  14. Sous-état du protocole (sc-substatus)
  15. État Win32 (sc-win32-status)
  16. Durée (time-taken)

Scénario 7 : Connaissance de TLS sans métriques de performances

Utilisez ce modèle lorsque : comme pour le modèle 6, mais vous n'avez pas besoin de métriques sur le temps écoulé.

Activez ces champs exactement dans l'ordre suivant :

  1. Date (date)
  2. Heure (heure)
  3. Adresse IP du serveur (s-ip)
  4. Méthode (cs-method)
  5. URI Stem (cs-uri-stem)
  6. Requête URI (cs-uri-query)
  7. Port du serveur (s-port)
  8. Nom d'utilisateur (cs-username)
  9. Adresse IP du client (c-ip)
  10. Version du protocole (cs-version)
  11. User-agent (cs(User-Agent))
  12. URL de provenance (cs(Referer))
  13. État du protocole (sc-status)
  14. Sous-état du protocole (sc-substatus)
  15. État Win32 (sc-win32-status)

Modèle 8 : Minimal avec performances

Utilisez ce modèle lorsque vous avez besoin d'une journalisation minimale avec des métriques de performances, mais que vous ne vous souciez pas des chaînes de requête, des URL de provenance ni des versions de protocole.

Activez ces champs exactement dans l'ordre suivant :

  1. Date (date)
  2. Heure (heure)
  3. Adresse IP du serveur (s-ip)
  4. Méthode (cs-method)
  5. URI Stem (cs-uri-stem)
  6. Port du serveur (s-port)
  7. Nom d'utilisateur (cs-username)
  8. Adresse IP du client (c-ip)
  9. User-agent (cs(User-Agent))
  10. État du protocole (sc-status)
  11. Sous-état du protocole (sc-substatus)
  12. État Win32 (sc-win32-status)
  13. Durée (time-taken)

Conseils pour la sélection de schémas

Pour la plupart des déploiements, utilisez le modèle 1 ou le modèle 3.

  • Schéma 1 : idéal pour les déploiements axés sur la sécurité avec plusieurs sites (inclut le nom du site, la chaîne de requête et le referrer).
  • Schéma 3 : idéal pour les environnements de production nécessitant des métriques complètes (y compris le sous-état, les erreurs Win32, la bande passante, le timing et le nom du site).
  • Schéma 6/7 : à utiliser si vous devez suivre les versions du protocole HTTP (adoption de HTTP/2, dépannage de TLS).
  • Modèle 2/8 : à utiliser pour une journalisation minimale avec des détails sur les erreurs.

Appliquer la configuration

  1. Cliquez sur OK pour fermer la boîte de dialogue Champs de journalisation W3C.
  2. Vérifiez le chemin d'accès au répertoire dans lequel les journaux seront écrits.
    • Valeur par défaut : %SystemDrive%\inetpub\logs\LogFiles
  3. Sous Log File Rollover (Rotation des fichiers journaux), sélectionnez Daily (Quotidien) (recommandé pour l'ingestion Google SecOps).
  4. Cliquez sur Appliquer dans le volet Actions.

Vérifier la journalisation IIS

  1. Générez du trafic de test vers votre site IIS en ouvrant une page Web dans un navigateur.
  2. Accédez au répertoire des journaux : C:\inetpub\logs\LogFiles\W3SVC1\
  3. Ouvrez le fichier journal le plus récent (par exemple, u_ex251020.log) dans le Bloc-notes.
  4. Vérifiez que la ligne #Fields: contient tous les champs que vous avez activés.

    • Exemple de ligne #Fields: :

      #Fields: date time s-sitename s-computername s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status sc-bytes cs-bytes time-taken
      
    • Exemple d'entrée de journal :

      2025-10-20 14:23:15 Default_Web_Site SERVER01 192.168.1.10 GET /index.html - 80 - 203.0.113.45 Mozilla/5.0+(Windows+NT+10.0) - 200 0 0 1234 567 125
      

Installer l'agent Bindplane

Installez l'agent Bindplane sur votre serveur Windows en suivant les instructions ci-dessous.

Installation de fenêtres

  1. Ouvrez l'invite de commandes ou PowerShell en tant qu'administrateur.
  2. Exécutez la commande suivante :

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Autres ressources d'installation

Configurer l'agent Bindplane pour ingérer les journaux IIS et les envoyer à Google SecOps

Arrêter le service Bindplane

  • Avant de modifier le fichier de configuration, arrêtez le service :

    Stop-Service "observIQ OpenTelemetry Collector"
    

Modifiez le fichier de configuration

  1. Recherchez le fichier config.yaml.
    • Chemin par défaut : C:\Program Files\observIQ OpenTelemetry Collector\config.yaml
  2. Ouvrez le fichier à l'aide d'un éditeur de texte (par exemple, Bloc-notes, VS Code ou Notepad++) en tant qu'administrateur.
  3. Remplacez l'intégralité du contenu par la configuration suivante :

    receivers:
      iis:
        collection_interval: 60s
    
    processors:
      resourcedetection:
        detectors: ["system"]
        system:
          hostname_sources: ["os"]
      normalizesums:
      batch:
    
    exporters:
      chronicle/iis:
        endpoint: malachiteingestion-pa.googleapis.com
        creds: 'C:\SecOps\ingestion-auth.json'
        log_type: 'IIS'
        override_log_type: false
        raw_log_field: body
        customer_id: '<CUSTOMER_ID>'
        compression: gzip
    
    service:
      pipelines:
        logs/iis:
          receivers:
            - iis
          processors:
            - resourcedetection
            - normalizesums
            - batch
          exporters:
            - chronicle/iis
    
    • Remplacez les espaces réservés suivants :
      • creds: : chemin d'accès à votre fichier d'authentification pour l'ingestion (par exemple, C:\SecOps\ingestion-auth.json).
      • customer_id: : votre ID client Google SecOps réel, que vous trouverez dans la section Obtenir l'ID client Google SecOps.

Redémarrez l'agent Bindplane pour appliquer les modifications.

  • Après avoir enregistré le fichier config.yaml, redémarrez le service Bindplane :

    Start-Service "observIQ OpenTelemetry Collector"
    
  • Vérifiez que le service est en cours d'exécution :

    Get-Service "observIQ OpenTelemetry Collector"
    
  • Résultat attendu :

    Status   Name                               DisplayName
    ------   ----                               -----------
    Running  observiq-otel-collector            observIQ OpenTelemetry Collector
    

Table de mappage UDM

Champ du journal Mappage UDM Logique
@timestamp metadata.event_timestamp Code temporel de l'événement tel qu'il est enregistré dans le journal brut.
@version metadata.product_version Version du serveur IIS.
AgentDevice additional.fields.AgentDevice.value.string_value Appareil ayant généré le journal.
AgentLogFile additional.fields.AgentLogFile.value.string_value Nom du fichier journal.
ASP.NET_SessionId network.session_id ID de session de l'utilisateur.
c-ip principal.ip Adresse IP du client.
Canal security_result.about.resource.attribute.labels.Channel.value Canal dans lequel l'événement a été consigné.
ChannelID security_result.about.resource.attribute.labels.ChannelID.value ID du canal dans lequel l'événement a été enregistré.
Ordinateur target.hostname Nom d'hôte de la machine cible.
cs-bytes network.received_bytes Nombre d'octets reçus du client.
cs-host principal.hostname, principal.asset.hostname Nom d'hôte du client.
cs-method network.http.method Méthode HTTP utilisée par le client.
cs-uri-query target.url Chaîne de requête de l'URL demandée par le client.
cs-uri-stem target.url Chemin de l'URL demandée par le client.
cs-username principal.user.user_display_name Nom d'utilisateur du client.
cs-version network.tls.version_protocol Version HTTP utilisée par le client.
cs(Cookie) Permet d'extraire des informations sur les cookies.
cs(Referer) network.http.referral_url URL qui a redirigé le client vers la page actuelle.
cs(User-Agent) network.http.user_agent User-agent du client.
csbyte network.received_bytes Nombre d'octets reçus du client.
cshost principal.hostname, principal.asset.hostname Nom d'hôte du client.
csip principal.ip, principal.asset.ip Adresse IP du client.
csmethod network.http.method Méthode HTTP utilisée par le client.
csreferer network.http.referral_url URL qui a redirigé le client vers la page actuelle.
csuseragent network.http.user_agent User-agent du client.
csusername principal.user.user_display_name Nom d'utilisateur du client.
csversion network.tls.version_protocol Version HTTP utilisée par le client.
date Utilisé pour construire le code temporel de l'événement si le code temporel du journal brut n'est pas valide.
description security_result.description Description de l'événement.
devicename target.hostname Nom d'hôte de la machine cible.
dst_ip target.ip, target.asset.ip Adresse IP de la machine cible.
dst_port target.port Numéro de port de la machine cible.
duration Durée de la requête en millisecondes.
EventEnqueuedUtcTime additional.fields.EventEnqueuedUtcTime.value.string_value Heure à laquelle l'événement a été mis en file d'attente en UTC.
EventID metadata.product_log_id ID de l'événement.
EventProcessedUtcTime additional.fields.EventProcessedUtcTime.value.string_value Heure à laquelle l'événement a été traité en UTC.
EventTime metadata.event_timestamp Horodatage de l'événement.
EventType metadata.product_event_type Le type d'événement.
file_path target.file.full_path Chemin d'accès complet du fichier concerné par l'événement.
FilterId security_result.about.resource.attribute.labels.FilterId.value ID du filtre.
FilterKey security_result.about.resource.attribute.labels.FilterKey.value Clé du filtre.
FilterName security_result.about.resource.attribute.labels.FilterName.value Nom du filtre.
FilterType security_result.about.resource.attribute.labels.FilterType.value Type de filtre.
hôte target.hostname Nom d'hôte de la machine cible.
host.architecture principal.asset.hardware.cpu_platform Architecture de la machine hôte.
host.geo.name additional.fields.geo_name.value.string_value Emplacement géographique de la machine hôte.
host.hostname target.hostname, target.asset.hostname Nom d'hôte de la machine hôte.
host.id observer.asset_id ID de la machine hôte.
host.ip principal.ip, principal.asset.ip Adresse IP de la machine hôte.
host.mac principal.mac Adresse MAC de la machine hôte.
host.os.build additional.fields.os_build.value.string_value Numéro de build du système d'exploitation sur la machine hôte.
host.os.kernel principal.platform_patch_level Version du noyau du système d'exploitation sur la machine hôte.
host.os.name additional.fields.os_name.value.string_value Nom du système d'exploitation sur la machine hôte.
host.os.platform principal.platform Plate-forme du système d'exploitation sur la machine hôte.
host.os.version principal.platform_version Version du système d'exploitation sur la machine hôte.
http_method network.http.method Méthode HTTP utilisée par le client.
http_response network.http.response_code Code de réponse HTTP.
http_status_code network.http.response_code Code d'état HTTP de la réponse.
http_substatus additional.fields.sc_substatus.value.string_value Code de sous-état HTTP de la réponse.
instance additional.fields.instance.value.string_value ID d'instance de la tâche.
intermediary_devicename intermediary.hostname, intermediary.asset.hostname Nom d'hôte de l'appareil intermédiaire.
json_message Message de journal brut au format JSON.
kv_fields Permet d'extraire des paires clé/valeur du message de journal brut.
LayerKey security_result.about.resource.attribute.labels.LayerKey.value Clé du calque.
LayerName security_result.about.resource.attribute.labels.LayerName.value Nom du calque.
LayerId security_result.about.resource.attribute.labels.LayerId.value ID du calque.
log.file.path target.file.full_path Chemin d'accès complet au fichier journal.
log.offset metadata.product_log_id Décalage de l'événement dans le fichier journal.
logstash.collect.host observer.hostname Nom d'hôte de la machine qui a collecté le journal.
logstash.process.host intermediary.hostname Nom d'hôte de la machine qui a traité le journal.
logstash_json_message Message de journal brut au format JSON.
message security_result.description Message de journal brut.
ministère additional.fields.ministry.value.string_value Ministère associé à l'événement.
nom Nom de l'entité.
NewValue additional.fields.NewValue.value.string_value Nouvelle valeur du paramètre de configuration.
OldValue additional.fields.OldValue.value.string_value Ancienne valeur du paramètre de configuration.
port principal.port Numéro de port du client.
priority_code Code de priorité du message syslog.
ProcessID principal.process.pid ID du processus ayant généré l'événement.
ProviderGuid security_result.about.resource.attribute.labels.ProviderGuid.value GUID du fournisseur.
ProviderKey security_result.about.resource.attribute.labels.ProviderKey.value Clé du fournisseur.
ProviderName security_result.about.resource.attribute.labels.ProviderName.value Nom du fournisseur.
referrer_url network.http.referral_url URL qui a redirigé le client vers la page actuelle.
request_url target.url URL demandée par le client.
s-computername target.hostname Nom d'hôte de la machine cible.
s-ip target.ip, target.asset.ip Adresse IP de la machine cible.
s-port target.port Numéro de port de la machine cible.
s-sitename additional.fields.sitename.value.string_value Nom du site.
sc-bytes network.sent_bytes Nombre d'octets envoyés au client.
sc-status network.http.response_code Code d'état HTTP de la réponse.
sc-substatus additional.fields.sc_substatus.value.string_value Code de sous-état HTTP de la réponse.
sc-win32-status Code d'état Windows de la réponse.
scbyte network.sent_bytes Nombre d'octets envoyés au client.
scstatus network.http.response_code Code d'état HTTP de la réponse.
de gravité, security_result.severity Gravité de l'événement.
service.type additional.fields.service_type.value.string_value Type de service.
sIP principal.ip, principal.asset.ip Adresse IP du client.
sPort principal.port Numéro de port du client.
sSiteName additional.fields.sitename.value.string_value Nom du site.
src_ip principal.ip, principal.asset.ip, observer.ip Adresse IP du client.
src_port principal.port Numéro de port du client.
sysdate Date et heure du message syslog.
syslog_facility security_result.severity_details Installation du message syslog.
syslog_pri Priorité du message syslog.
syslog_severity security_result.severity_details Gravité du message syslog.
syslog_severity_code Code de gravité du message syslog.
tags security_result.rule_name Tags associés à l'événement.
opération additional.fields.task.value.string_value Le nom de la tâche.
heure Utilisé pour construire le code temporel de l'événement si le code temporel du journal brut n'est pas valide.
time-taken Durée de la requête en millisecondes.
uri_query target.url Chaîne de requête de l'URL demandée par le client.
user_agent network.http.user_agent User-agent du client.
Nom d'utilisateur target.user.userid Le nom d'utilisateur de l'utilisateur.
UserSid target.user.windows_sid SID Windows de l'utilisateur.
Pondération security_result.about.resource.attribute.labels.Weight.value Pondération du filtre.
win32_status Code d'état Windows de la réponse.
xforwardedfor En-tête X-Forwarded-For contenant une liste d'adresses IP séparées par une virgule.
metadata.log_type "IIS"
network.direction "INBOUND"
metadata.vendor_name "Microsoft"
metadata.product_name "Internet Information Server"
metadata.event_type "NETWORK_HTTP", "USER_UNCATEGORIZED", "GENERIC_EVENT", "STATUS_UPDATE", "USER_LOGOUT", "USER_LOGIN"
extensions.auth.type "MACHINE"

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