Collecter les journaux du serveur NPS (Microsoft Network Policy Server)
Ce document explique comment ingérer des journaux Microsoft Network Policy Server (NPS) dans Google Security Operations à l'aide de Google Cloud Storage V2.
Le serveur NPS (Network Policy Server) de Microsoft est un rôle Windows Server qui fournit l'authentification, l'autorisation et la comptabilisation RADIUS. NPS permet de gérer de manière centralisée les règles d'accès au réseau pour les appareils sans fil, les connexions VPN, les commutateurs et l'accès à distance. NPS ne dispose pas de fonctionnalités d'exportation vers le cloud ni d'API natives. Les journaux doivent donc être collectés à l'aide d'un transmetteur tiers.
Avant de commencer
Assurez-vous de remplir les conditions préalables suivantes :
- Une instance Google SecOps
- Un projet GCP avec l'API Cloud Storage activée
- Autorisations permettant de créer et de gérer des buckets GCS
- Autorisations permettant de gérer les stratégies IAM sur les buckets GCS
- Accès privilégié au serveur Windows Server exécutant NPS
- Un accès administrateur pour installer NXLog sur le serveur NPS
Configurer la journalisation du NPS
Activer les journaux de comptabilité NPS
- Sur le serveur Windows exécutant NPS, ouvrez le Gestionnaire de serveur.
- Accédez à Outils > Serveur NPS (Network Policy Server).
- Dans la console NPS, développez Comptabilité dans le panneau de navigation de gauche.
- Effectuez un clic droit sur Comptabilité, puis sélectionnez Configurer la comptabilité.
- Dans l'assistant Configuration de la comptabilité, cliquez sur Suivant.
- Sélectionnez Enregistrer dans un fichier texte sur l'ordinateur local, puis cliquez sur Suivant.
- Sur la page Configurer les propriétés du fichier journal, configurez les éléments suivants :
- Répertoire : conservez la valeur par défaut (
%systemroot%\System32\LogFiles) ou spécifiez un chemin d'accès personnalisé. - Format : sélectionnez Conforme à DTS (recommandé par Microsoft pour le format XML structuré).
- Créer un fichier journal : sélectionnez Quotidien ou Hebdomadaire en fonction du volume de vos journaux.
- Répertoire : conservez la valeur par défaut (
- Cliquez sur Suivant.
- Vérifiez les éléments indiqués dans le récapitulatif, puis cliquez sur Finish (Terminer).
Activer la journalisation d'audit du NPS
- Ouvrez l'invite de commandes en tant qu'administrateur sur le serveur NPS.
Exécutez la commande suivante pour activer la journalisation d'audit du NPS :
auditpol /set /subcategory:"Network Policy Server" /success:enable /failure:enableVérifiez que la stratégie d'audit est activée :
auditpol /get /subcategory:"Network Policy Server"
Installer et configurer NXLog sur le serveur NPS
Télécharger et installer NXLog
- Sur le serveur NPS, téléchargez NXLog Enterprise Edition depuis le site Web de NXLog.
- Exécutez le programme d'installation et suivez l'assistant d'installation.
- Acceptez le chemin d'installation par défaut (
C:\Program Files\nxlog) ou spécifiez un chemin personnalisé. - Terminez l'installation.
Configurer NXLog pour collecter les journaux NPS
- Sur le serveur NPS, accédez au répertoire de configuration NXLog :
- Chemin par défaut :
C:\Program Files\nxlog\conf
- Chemin par défaut :
- Ouvrez le fichier
nxlog.confdans un éditeur de texte (par exemple, le Bloc-notes) avec des droits d'administrateur. Remplacez l'intégralité du contenu de
nxlog.confpar la configuration suivante :## NXLog configuration for Microsoft NPS log collection ## Collects NPS logs and forwards to Google Cloud Storage define ROOT C:\Program Files\nxlog define LOGDIR C:\Windows\System32\LogFiles define GCS_BUCKET your-gcs-bucket-name define GCS_PREFIX nps-logs define GCS_CREDENTIALS C:\nxlog-credentials\gcs-service-account.json Moduledir %ROOT%\modules CacheDir %ROOT%\data Pidfile %ROOT%\data\nxlog.pid SpoolDir %ROOT%\data LogFile %ROOT%\data\nxlog.log LogLevel INFO <Extension nps> Module xm_nps </Extension> <Extension json> Module xm_json </Extension> <Input nps_logs> Module im_file File '%LOGDIR%\IN*.log' SavePos TRUE ReadFromLast TRUE Recursive FALSE InputType nps <Exec> # Parse NPS logs (DTS Compliant format) # Add hostname for tracking $Hostname = hostname(); # Convert to JSON to_json(); </Exec> </Input> <Output gcs> Module om_file File '%ROOT%\data\gcs-upload\nps-' + strftime(now(), '%Y%m%d-%H%M%S') + '.json' <Exec> # Rotate output file every hour if (file_size(file_name()) > 100000000) file_cycle(); </Exec> </Output> <Route nps_to_gcs> Path nps_logs => gcs </Route>Dans le fichier de configuration, remplacez les espaces réservés suivants :
your-gcs-bucket-name: nom de votre bucket GCS (créé dans la section suivante)- Vérifiez que le chemin d'accès à
LOGDIRcorrespond à l'emplacement de votre fichier journal NPS.
Enregistrez le fichier.
Créer un bucket Google Cloud Storage
- Accédez à la console Google Cloud.
- Sélectionnez votre projet ou créez-en un.
- Dans le menu de navigation, accédez à Cloud Storage > Buckets.
- Cliquez sur Créer un bucket.
Fournissez les informations de configuration suivantes :
Paramètre Valeur Attribuez un nom au bucket Saisissez un nom unique (par exemple, nps-logs-chronicle).Type d'emplacement Choisissez en fonction de vos besoins (région, birégion, multirégion). Emplacement Sélectionnez l'emplacement (par exemple, us-central1).Classe de stockage Standard (recommandé pour les journaux auxquels vous accédez fréquemment) Access control (Contrôle des accès) Uniforme (recommandé) Outils de protection Facultatif : Activez la gestion des versions des objets ou la règle de conservation. Cliquez sur Créer.
Créer un compte de service GCS pour NXLog
Créer un compte de service
- Dans la console GCP, accédez à IAM et administration > Comptes de service.
- Cliquez sur Créer un compte de service.
- Fournissez les informations de configuration suivantes :
- Nom du compte de service : saisissez
nxlog-nps-uploader(par exemple). - Description du compte de service : saisissez
Service account for NXLog to upload NPS logs to GCS.
- Nom du compte de service : saisissez
- Cliquez sur Créer et continuer.
- Dans la section Autoriser ce compte de service à accéder au projet, ajoutez le rôle suivant :
- Cliquez sur Sélectionner un rôle.
- Recherchez et sélectionnez Créateur d'objets Storage.
- Cliquez sur Continuer.
- Cliquez sur OK.
Télécharger la clé de compte de service
- Sur la page Comptes de service, cliquez sur le compte de service que vous venez de créer (
nxlog-nps-uploader). - Accédez à l'onglet Clés.
- Cliquez sur Ajouter une clé > Créer une clé.
- Sélectionnez JSON comme type de clé.
- Cliquez sur Créer.
- Le fichier de clé JSON est téléchargé sur votre ordinateur.
- Copiez le fichier de clé JSON sur le serveur NPS à l'emplacement suivant :
C:\nxlog-credentials\gcs-service-account.json
- Créez le répertoire
C:\nxlog-credentialss'il n'existe pas.
Configurer l'importation automatique GCS
Créer un script d'importation PowerShell
- Sur le serveur NPS, créez un répertoire :
C:\nxlog-scripts
- Créez un fichier nommé
upload-to-gcs.ps1dans le répertoire. Ouvrez le fichier dans un éditeur de texte et collez le script PowerShell suivant :
# PowerShell script to upload NXLog output files to Google Cloud Storage # Uses gsutil command-line tool $ErrorActionPreference = "Stop" # Configuration $LocalLogDir = "C:\Program Files\nxlog\data\gcs-upload" $GcsBucket = "gs://nps-logs-chronicle/nps-logs/" $ArchiveDir = "C:\Program Files\nxlog\data\archive" $LogFile = "C:\nxlog-scripts\upload.log" # Function to write log messages function Write-Log { param([string]$Message) $Timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss" "$Timestamp - $Message" | Out-File -FilePath $LogFile -Append } Write-Log "Starting GCS upload process" # Check if gsutil is available try { $null = gsutil version } catch { Write-Log "ERROR: gsutil not found. Please install Google Cloud SDK." exit 1 } # Activate service account $ServiceAccountKey = "C:\nxlog-credentials\gcs-service-account.json" if (-not (Test-Path $ServiceAccountKey)) { Write-Log "ERROR: Service account key not found at $ServiceAccountKey" exit 1 } try { gcloud auth activate-service-account --key-file=$ServiceAccountKey 2>&1 | Out-Null Write-Log "Service account activated successfully" } catch { Write-Log "ERROR: Failed to activate service account: $_" exit 1 } # Create archive directory if it doesn't exist if (-not (Test-Path $ArchiveDir)) { New-Item -ItemType Directory -Path $ArchiveDir | Out-Null Write-Log "Created archive directory: $ArchiveDir" } # Get all JSON files in the local log directory $Files = Get-ChildItem -Path $LocalLogDir -Filter "*.json" -File if ($Files.Count -eq 0) { Write-Log "No files to upload" exit 0 } Write-Log "Found $($Files.Count) file(s) to upload" # Upload each file to GCS $SuccessCount = 0 $FailCount = 0 foreach ($File in $Files) { try { # Upload to GCS gsutil cp $File.FullName $GcsBucket 2>&1 | Out-Null # Move to archive on success Move-Item -Path $File.FullName -Destination $ArchiveDir -Force Write-Log "Uploaded and archived: $($File.Name)" $SuccessCount++ } catch { Write-Log "ERROR uploading $($File.Name): $_" $FailCount++ } } Write-Log "Upload complete. Success: $SuccessCount, Failed: $FailCount"Dans le script, remplacez les valeurs suivantes :
$GcsBucket: URI de votre bucket GCS (par exemple,gs://nps-logs-chronicle/nps-logs/)
Enregistrez le fichier.
Installez le SDK Google Cloud
- Sur le serveur NPS, téléchargez le programme d'installation du Google Cloud SDK depuis Google Cloud SDK.
- Exécutez le programme d'installation et suivez l'assistant d'installation.
- Pendant l'installation, sélectionnez Installer la version incluse de Python si Python n'est pas déjà installé.
- Terminez l'installation.
Ouvrez une nouvelle invite de commandes et vérifiez l'installation :
gsutil version
Créer une tâche programmée pour l'importation automatique
- Sur le serveur NPS, ouvrez le Planificateur de tâches.
- Dans le panneau de droite, cliquez sur Créer une tâche.
- Dans l'onglet Général, configurez les éléments suivants :
- Nom : saisissez
NXLog GCS Upload. - Description : saisissez
Upload NPS logs to Google Cloud Storage. - Options de sécurité : sélectionnez Exécuter que l'utilisateur soit connecté ou non.
- Options de sécurité : cochez Exécuter avec les privilèges les plus élevés.
- Configurer pour : sélectionnez Windows Server 2016 ou la version de votre serveur.
- Nom : saisissez
- Dans l'onglet Déclencheurs :
- Cliquez sur New (Nouveau).
- Commencer la tâche : sélectionnez Selon une planification.
- Paramètres : sélectionnez Tous les jours.
- A lieu tous les : saisissez
1jours. - Répéter la tâche toutes les : sélectionnez 15 minutes.
- pendant : sélectionnez Indéfiniment.
- Cliquez sur OK.
- Dans l'onglet Actions :
- Cliquez sur New (Nouveau).
- Action : sélectionnez Démarrer un programme.
- Programme/script : saisissez
powershell.exe. - Ajouter des arguments : saisissez
-ExecutionPolicy Bypass -File "C:\nxlog-scripts\upload-to-gcs.ps1". - Cliquez sur OK.
- Dans l'onglet Conditions :
- Décochez Démarrer la tâche uniquement si l'ordinateur est branché sur le secteur.
- Dans l'onglet Paramètres :
- Cochez Exécuter la tâche dès que possible si le démarrage planifié est manqué.
- Cochez Si la tâche échoue, redémarrer toutes les, puis saisissez
5 minutes.
- Cliquez sur OK.
- Saisissez les identifiants du compte qui exécutera la tâche (il doit disposer de droits d'administrateur).
- Cliquez sur OK.
Tester le processus d'importation
- Sur le serveur NPS, ouvrez le Planificateur de tâches.
- Dans le panneau de gauche, développez Bibliothèque du Planificateur de tâches.
- Effectuez un clic droit sur la tâche NXLog GCS Upload (Importation NXLog GCS), puis sélectionnez Run (Exécuter).
- Attendez quelques secondes que la tâche se termine.
- Ouvrez le fichier journal à l'adresse
C:\nxlog-scripts\upload.logpour vérifier que l'importation a réussi. - Accédez à la console GCP> Cloud Storage> Buckets.
- Cliquez sur le nom de votre bucket (
nps-logs-chronicle). - Accédez au dossier
nps-logs/. - Vérifiez que des fichiers JSON contenant des journaux NPS sont présents.
Démarrer le service NXLog
- Sur le serveur NPS, ouvrez Services (exécutez
services.msc). - Recherchez le service nxlog dans la liste.
- Effectuez un clic droit sur le service nxlog, puis sélectionnez Démarrer.
- Vérifiez que l'état du service est En cours d'exécution.
- Pour vérifier que NXLog collecte les journaux, consultez le fichier journal NXLog :
C:\Program Files\nxlog\data\nxlog.log
Recherchez les messages indiquant que la collecte de journaux a réussi :
INFO im_file: monitoring file 'C:\Windows\System32\LogFiles\IN250315.log'
Récupérer le compte de service Google SecOps
Google SecOps utilise un compte de service unique pour lire les données de votre bucket GCS. Vous devez accorder à ce compte de service l'accès à votre bucket.
Obtenir l'adresse e-mail du compte de service
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur Ajouter un flux.
- Cliquez sur Configurer un flux unique.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple,
Microsoft NPS Logs). - Sélectionnez Google Cloud Storage V2 comme Type de source.
- Sélectionnez MICROSOFT_NPS comme type de journal.
Cliquez sur Obtenir un compte de service. Une adresse e-mail de compte de service unique s'affiche, par exemple :
```none chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com ```Copiez cette adresse e-mail pour l'utiliser à l'étape suivante.
Cliquez sur Suivant.
Spécifiez les valeurs des paramètres d'entrée suivants :
URL du bucket de stockage : saisissez l'URI du bucket GCS avec le chemin d'accès au préfixe :
gs://nps-logs-chronicle/nps-logs/- Remplacez :
nps-logs-chronicle: nom de votre bucket GCS.nps-logs/: préfixe/chemin d'accès au dossier dans lequel les journaux sont stockés.
- Remplacez :
- Option de suppression de la source : sélectionnez l'option de suppression de votre choix :
- Jamais : ne supprime jamais aucun fichier après les transferts (recommandé pour les tests).
- Supprimer les fichiers transférés : supprime les fichiers une fois le transfert réussi.
- Supprimer les fichiers transférés et les répertoires vides : supprime les fichiers et les répertoires vides une fois le transfert réussi.
- Âge maximal du fichier : incluez les fichiers modifiés au cours des derniers jours (180 jours par défaut).
- 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
Cliquez sur Suivant.
Vérifiez la configuration de votre nouveau flux sur l'écran Finaliser, puis cliquez sur Envoyer.
Accorder des autorisations IAM au compte de service Google SecOps
- Le compte de service Google SecOps a besoin du rôle Lecteur des objets Storage sur votre bucket GCS.
- Accédez à Cloud Storage > Buckets.
- Cliquez sur le nom de votre bucket (
nps-logs-chronicle). - Accédez à l'onglet Autorisations.
- Cliquez sur Accorder l'accès.
- Fournissez les informations de configuration suivantes :
- Ajouter des comptes principaux : collez l'adresse e-mail du compte de service Google SecOps.
- Attribuer des rôles : sélectionnez Lecteur d'objets Storage.
Cliquez sur Enregistrer.
Table de mappage UDM
| Champ de journal | Mappage UDM | Logique |
|---|---|---|
| Version | additional.fields | Fusionné avec les objets correspondants s'il n'est pas vide |
| Canal | additional.fields | |
| Mots clés | additional.fields | |
| Code d'opération | additional.fields | |
| Tâche | additional.fields | |
| ThreadID | additional.fields | |
| EventData.%1 | additional.fields | |
| EventData.%2 | additional.fields | |
| Canal | channel.value.string_value | Valeur copiée directement |
| EventData.%1 | event_data_p1.value.string_value | Valeur copiée directement |
| EventData.%2 | event_data_p2.value.string_value | Valeur copiée directement |
| Mots clés | keywords.value.string_value | Valeur copiée directement |
| TimeCreated | metadata.event_timestamp | Converti de UNIX_MS en code temporel |
| EventId | metadata.event_type | Définissez sur STATUS_UNCATEGORIZED si EventId == '4400', sur STATUS_UPDATE si EventId == '13', sinon sur GENERIC_EVENT. |
| EventId | metadata.product_event_type | Valeur copiée directement |
| Code d'opération | opcode.value.string_value | Valeur copiée directement |
| Ordinateur | principal.asset.hostname | Valeur copiée à partir de principal.hostname |
| Ordinateur | principal.hostname | Valeur copiée directement |
| ProcessID | principal.process.pid | Valeur copiée si elle n'est pas vide |
| UserId | principal.user.windows_sid | Extrait à l'aide d'une expression régulière pour obtenir le SID Windows |
| EventId | security_result.rule_name | Défini sur "EventID: " + EventId |
| Niveau | security_result.severity | INFO/Informational/Information/Normal/NOTICE transformé en INFORMATIONAL, ERROR/Error transformé en ERROR, WARNING/Warning transformé en INFORMATIONAL, DEBUG transformé en INFORMATIONAL, Critical transformé en CRITICAL |
| Tâche | task.value.string_value | Valeur copiée directement |
| ThreadID | thread_id.value.string_value | Valeur copiée directement |
| Version | version.value.string_value | Valeur copiée directement |
| metadata.vendor_name | metadata.vendor_name | Défini sur "Microsoft" |
| ProviderName | metadata.product_name | Valeur copiée directement |
Journal des modifications
Afficher le journal des modifications pour ce parseur
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.