Collecter les journaux Microsoft IIS
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
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres du SIEM > Agents de collecte.
- 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
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres SIEM> Profil.
- Copiez et enregistrez le numéro client de la section Informations sur l'organisation.
Configurer la journalisation étendue W3C IIS
Ouvrir le Gestionnaire IIS
- Cliquez sur Démarrer.
- Saisissez
inetmgret appuyez sur Entrée. - La fenêtre Internet Information Services (IIS) Manager s'ouvre.
Autre méthode :
- Appuyez sur la touche Windows+R.
- Saisissez
inetmgret appuyez sur Entrée.
Accéder à la configuration de la journalisation
- Dans le volet Connexions, développez le nom de votre serveur.
- Pour configurer la journalisation à l'échelle du serveur (recommandé) :
- Cliquez sur le nom du serveur au niveau racine.
- Pour configurer la journalisation spécifique à un site :
- Développez Sites, puis cliquez sur le site concerné (par exemple, Site Web par défaut).
- Dans la vue Fonctionnalités, double-cliquez sur Logging.
Sélectionnez le format de journal étendu W3C.
- Sur la page Logging, dans la section Log File (Fichier journal) :
- Dans le menu déroulant Format, sélectionnez W3C.
- 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 :
Schéma 1 : Contexte complet du site avec chaîne de requête (recommandé pour la plupart des déploiements)
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 :
- Date (date)
- Heure (heure)
- Nom du service (s-sitename)
- Adresse IP du serveur (s-ip)
- Méthode (cs-method)
- URI Stem (cs-uri-stem)
- Requête URI (cs-uri-query)
- Port du serveur (s-port)
- Nom d'utilisateur (cs-username)
- Adresse IP du client (c-ip)
- User-agent (cs(User-Agent))
- URL de provenance (cs(Referer))
- État du protocole (sc-status)
- Octets envoyés (sc-bytes)
- 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 :
- Date (date)
- Heure (heure)
- Adresse IP du serveur (s-ip)
- Méthode (cs-method)
- URI Stem (cs-uri-stem)
- Port du serveur (s-port)
- Nom d'utilisateur (cs-username)
- Adresse IP du client (c-ip)
- User-agent (cs(User-Agent))
- URL de provenance (cs(Referer))
- État du protocole (sc-status)
- Sous-état du protocole (sc-substatus)
- État Win32 (sc-win32-status)
- Durée (time-taken)
Schéma 3 : Contexte du site avec métriques complètes (recommandé pour la production)
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 :
- Date (date)
- Heure (heure)
- Nom du service (s-sitename)
- Adresse IP du serveur (s-ip)
- Méthode (cs-method)
- URI Stem (cs-uri-stem)
- Requête URI (cs-uri-query)
- Port du serveur (s-port)
- Nom d'utilisateur (cs-username)
- Adresse IP du client (c-ip)
- User-agent (cs(User-Agent))
- État du protocole (sc-status)
- Sous-état du protocole (sc-substatus)
- État Win32 (sc-win32-status)
- Octets envoyés (sc-bytes)
- Octets reçus (cs-bytes)
- 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 :
- Date (date)
- Heure (heure)
- Nom du service (s-sitename)
- Adresse IP du serveur (s-ip)
- Méthode (cs-method)
- URI Stem (cs-uri-stem)
- Requête URI (cs-uri-query)
- Port du serveur (s-port)
- Nom d'utilisateur (cs-username)
- Adresse IP du client (c-ip)
- User-agent (cs(User-Agent))
- État du protocole (sc-status)
- Sous-état du protocole (sc-substatus)
- État Win32 (sc-win32-status)
- Octets envoyés (sc-bytes)
- Octets reçus (cs-bytes)
- 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 :
- Date (date)
- Heure (heure)
- Nom du service (s-sitename)
- Adresse IP du serveur (s-ip)
- Méthode (cs-method)
- URI Stem (cs-uri-stem)
- Requête URI (cs-uri-query)
- Port du serveur (s-port)
- Nom d'utilisateur (cs-username)
- Adresse IP du client (c-ip)
- User-agent (cs(User-Agent))
- État du protocole (sc-status)
- Sous-état du protocole (sc-substatus)
- État Win32 (sc-win32-status)
- Octets envoyés (sc-bytes)
- Octets reçus (cs-bytes)
- 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 :
- Date (date)
- Heure (heure)
- Adresse IP du serveur (s-ip)
- Méthode (cs-method)
- URI Stem (cs-uri-stem)
- Requête URI (cs-uri-query)
- Port du serveur (s-port)
- Nom d'utilisateur (cs-username)
- Adresse IP du client (c-ip)
- Version du protocole (cs-version)
- User-agent (cs(User-Agent))
- URL de provenance (cs(Referer))
- État du protocole (sc-status)
- Sous-état du protocole (sc-substatus)
- État Win32 (sc-win32-status)
- 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 :
- Date (date)
- Heure (heure)
- Adresse IP du serveur (s-ip)
- Méthode (cs-method)
- URI Stem (cs-uri-stem)
- Requête URI (cs-uri-query)
- Port du serveur (s-port)
- Nom d'utilisateur (cs-username)
- Adresse IP du client (c-ip)
- Version du protocole (cs-version)
- User-agent (cs(User-Agent))
- URL de provenance (cs(Referer))
- État du protocole (sc-status)
- Sous-état du protocole (sc-substatus)
- É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 :
- Date (date)
- Heure (heure)
- Adresse IP du serveur (s-ip)
- Méthode (cs-method)
- URI Stem (cs-uri-stem)
- Port du serveur (s-port)
- Nom d'utilisateur (cs-username)
- Adresse IP du client (c-ip)
- User-agent (cs(User-Agent))
- État du protocole (sc-status)
- Sous-état du protocole (sc-substatus)
- État Win32 (sc-win32-status)
- 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
- Cliquez sur OK pour fermer la boîte de dialogue Champs de journalisation W3C.
- Vérifiez le chemin d'accès au répertoire dans lequel les journaux seront écrits.
- Valeur par défaut :
%SystemDrive%\inetpub\logs\LogFiles
- Valeur par défaut :
- Sous Log File Rollover (Rotation des fichiers journaux), sélectionnez Daily (Quotidien) (recommandé pour l'ingestion Google SecOps).
- Cliquez sur Appliquer dans le volet Actions.
Vérifier la journalisation IIS
- Générez du trafic de test vers votre site IIS en ouvrant une page Web dans un navigateur.
- Accédez au répertoire des journaux :
C:\inetpub\logs\LogFiles\W3SVC1\ - Ouvrez le fichier journal le plus récent (par exemple,
u_ex251020.log) dans le Bloc-notes. 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-takenExemple 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
- Ouvrez l'invite de commandes ou PowerShell en tant qu'administrateur.
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
- Pour plus d'options d'installation, consultez ce guide 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
- Recherchez le fichier
config.yaml.- Chemin par défaut :
C:\Program Files\observIQ OpenTelemetry Collector\config.yaml
- Chemin par défaut :
- Ouvrez le fichier à l'aide d'un éditeur de texte (par exemple, Bloc-notes, VS Code ou Notepad++) en tant qu'administrateur.
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.
- Remplacez les espaces réservés suivants :
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.