Microsoft Network Policy Server(NPS)のログを収集する

以下でサポートされています。

このドキュメントでは、Google Cloud Storage V2 を使用して Microsoft Network Policy Server(NPS)ログを Google Security Operations に取り込む方法について説明します。

Microsoft Network Policy Server(NPS)は、RADIUS 認証、認可、アカウンティングを提供する Windows Server ロールです。NPS を使用すると、ワイヤレス デバイス、VPN 接続、スイッチ、リモート アクセスのネットワーク アクセス ポリシーを一元管理できます。NPS にはネイティブのクラウド エクスポート機能や API がないため、サードパーティの転送ツールを使用してログを収集する必要があります。

始める前に

次の前提条件を満たしていることを確認します。

  • Google SecOps インスタンス
  • Cloud Storage API が有効になっている GCP プロジェクト
  • GCS バケットを作成および管理する権限
  • GCS バケットの IAM ポリシーを管理する権限
  • NPS を実行している Windows Server への特権アクセス
  • NPS サーバーに NXLog をインストールするための管理者アクセス権

NPS ロギングを構成する

NPS アカウンティング ログを有効にする

  1. NPS を実行している Windows Server で、サーバー マネージャーを開きます。
  2. [ツール] > [ネットワーク ポリシー サーバー] に移動します。
  3. NPS コンソールの左側のナビゲーションで、[Accounting] を開きます。
  4. [Accounting] を右クリックし、[Configure Accounting] を選択します。
  5. [会計設定] ウィザードで、[次へ] をクリックします。
  6. [ローカル コンピュータのテキスト ファイルにログを記録する] を選択し、[次へ] をクリックします。
  7. [ログファイル プロパティの構成] ページで、次のように構成します。
    • ディレクトリ: デフォルト(%systemroot%\System32\LogFiles)のままにするか、カスタムパスを指定します。
    • 形式: [DTS 準拠] を選択します(構造化 XML 形式の場合、Microsoft が推奨)
    • 新しいログファイルを作成する: ログの量に応じて [毎日] または [毎週] を選択します。
  8. [次へ] をクリックします。
  9. 概要を確認して [Finish] をクリックします。

NPS 監査ロギングを有効にする

  1. NPS サーバーで管理者としてコマンド プロンプトを開きます。
  2. 次のコマンドを実行して、NPS 監査ロギングを有効にします。

    auditpol /set /subcategory:"Network Policy Server" /success:enable /failure:enable
    
  3. 監査ポリシーが有効になっていることを確認します。

    auditpol /get /subcategory:"Network Policy Server"
    

NPS サーバーに NXLog をインストールして構成する

NXLog をダウンロードしてインストールする

  1. NPS サーバーで、NXLog ウェブサイトから NXLog Enterprise Edition をダウンロードします。
  2. インストーラを実行し、インストール ウィザードに沿って操作します。
  3. デフォルトのインストール パス(C:\Program Files\nxlog)をそのまま使用するか、カスタム パスを指定します。
  4. インストールを完了します。

NPS ログを収集するように NXLog を構成する

  1. NPS サーバーで、NXLog 構成ディレクトリに移動します。
    • デフォルトのパス: C:\Program Files\nxlog\conf
  2. 管理者権限でテキスト エディタ(メモ帳など)で nxlog.conf ファイルを開きます。
  3. nxlog.conf の内容全体を次の構成に置き換えます。

    ## 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>
    
  4. 構成ファイルの、各プレースホルダは次のように置き換えます。

    • your-gcs-bucket-name: GCS バケット名(次のセクションで作成)
    • LOGDIR パスが NPS ログファイルの場所と一致していることを確認する
  5. ファイルを保存します。

Google Cloud Storage バケットを作成する

  1. Google Cloud コンソールに移動します。
  2. プロジェクトを選択するか、新しいプロジェクトを作成します。
  3. ナビゲーション メニューで、[Cloud Storage > バケット] に移動します。
  4. [バケットを作成] をクリックします。
  5. 次の構成情報を提供してください。

    設定 値
    バケットに名前を付ける グローバルに一意の名前(nps-logs-chronicle など)を入力します。
    ロケーション タイプ ニーズに応じて選択します(リージョン、デュアルリージョン、マルチリージョン)。
    ロケーション 場所を選択します(例: us-central1)。
    ストレージ クラス Standard(アクセス頻度の高いログにおすすめ)
    アクセス制御 均一(推奨)
    保護ツール 省略可: オブジェクトのバージョニングまたは保持ポリシーを有効にする
  6. [作成] をクリックします。

NXLog 用の GCS サービス アカウントを作成する

サービス アカウントの作成

  1. GCP コンソールで、[IAM と管理>サービス アカウント] に移動します。
  2. [サービス アカウントを作成] をクリックします。
  3. 次の構成情報を指定します。
    • サービス アカウント名: nxlog-nps-uploader(例)と入力します。
    • サービス アカウントの説明: Service account for NXLog to upload NPS logs to GCS と入力します。
  4. [作成して続行] をクリックします。
  5. [このサービス アカウントにプロジェクトへのアクセスを許可する] セクションで、次のロールを追加します。
    1. [ロールを選択] をクリックします。
    2. [Storage オブジェクト作成者] を検索して選択します。
  6. [続行] をクリックします。
  7. [完了] をクリックします。

サービス アカウント キーをダウンロード

  1. [サービス アカウント] ページで、作成したサービス アカウント(nxlog-nps-uploader)をクリックします。
  2. [キー] タブに移動します。
  3. [鍵を追加>新しい鍵を作成] をクリックします。
  4. キーのタイプとして [JSON] を選択します。
  5. [作成] をクリックします。
  6. JSON キーファイルがパソコンにダウンロードされます。
  7. JSON キーファイルを次の場所にある NPS サーバーにコピーします。
    • C:\nxlog-credentials\gcs-service-account.json
  8. ディレクトリ C:\nxlog-credentials が存在しない場合は作成します。

GCS への自動アップロードを構成する

PowerShell アップロード スクリプトを作成する

  1. NPS サーバーで、新しいディレクトリを作成します。
    • C:\nxlog-scripts
  2. ディレクトリに upload-to-gcs.ps1 という名前の新しいファイルを作成します。
  3. テキスト エディタでファイルを開き、次の PowerShell スクリプトを貼り付けます。

    # 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"
    
  4. スクリプトで次の値を置き換えます。

    • $GcsBucket: GCS バケットの URI(例: gs://nps-logs-chronicle/nps-logs/)
  5. ファイルを保存します。

Google Cloud SDK をインストールする

  1. NPS サーバーで、Google Cloud SDK から Google Cloud SDK インストーラをダウンロードします。
  2. インストーラを実行し、インストール ウィザードに沿って操作します。
  3. インストール時に、Python がまだインストールされていない場合は、[バンドル版 Python をインストールする] を選択します。
  4. インストールを完了します。
  5. 新しいコマンド プロンプトを開き、インストールを確認します。

    gsutil version
    

自動アップロードのスケジュール設定されたタスクを作成する

  1. NPS サーバーで、タスク スケジューラを開きます。
  2. 右側のパネルで、[タスクを作成] をクリックします。
  3. [全般] タブで、次の項目を構成します。
    • 名前: 「NXLog GCS Upload」と入力します。
    • 説明: 「Upload NPS logs to Google Cloud Storage」と入力します。
    • セキュリティ オプション: [ユーザーがログインしているかどうかに関係なく実行する] を選択します。
    • セキュリティ オプション: [最も高い権限で実行する] をオンにします。
    • [構成対象]: [Windows Server 2016] またはサーバーのバージョンを選択します。
  4. [トリガー] タブで、次の操作を行います。
    1. [New] をクリックします。
    2. Begin the task: [On a schedule] を選択します。
    3. 設定: [毎日] を選択します。
    4. 繰り返しの間隔: 1 日と入力します。
    5. タスクを繰り返す間隔: [15 分] を選択します。
    6. の期間: [無期限] を選択します。
    7. [OK] をクリックします。
  5. [アクション] タブで、次の操作を行います。
    1. [New] をクリックします。
    2. アクション: [プログラムの開始] を選択します。
    3. プログラム/スクリプト: 「powershell.exe」と入力します。
    4. 引数を追加: 「-ExecutionPolicy Bypass -File "C:\nxlog-scripts\upload-to-gcs.ps1"」と入力します。
    5. [OK] をクリックします。
  6. [条件] タブで、次の操作を行います。
    • [パソコンが AC 電源に接続されている場合にのみタスクを開始する] のチェックを外します。
  7. [設定] タブで次の操作を行います。
    • [スケジュールされた開始を逃した場合は、できるだけ早くタスクを実行する] をオンにします。
    • [タスクが失敗した場合は、次の間隔で再起動する] をオンにして、5 minutes を入力します。
  8. [OK] をクリックします。
  9. タスクを実行するアカウントの認証情報を入力します(管理者権限が必要です)。
  10. [OK] をクリックします。

アップロード プロセスをテストする

  1. NPS サーバーで、タスク スケジューラを開きます。
  2. 左側のパネルで、[タスク スケジューラ ライブラリ] を展開します。
  3. タスク [NXLog GCS Upload] を右クリックし、[実行] を選択します。
  4. タスクが完了するまで数秒待ちます。
  5. C:\nxlog-scripts\upload.log にあるログファイルを開き、アップロードが成功したことを確認します。
  6. GCP Console > Cloud Storage > バケットに移動します。
  7. バケット名(nps-logs-chronicle)をクリックします。
  8. nps-logs/ フォルダに移動します。
  9. NPS ログを含む JSON ファイルが存在することを確認します。

NXLog サービスを開始する

  1. NPS サーバーで、[サービス] を開きます(services.msc を実行します)。
  2. リストで nxlog サービスを見つけます。
  3. nxlog サービスを右クリックして、[開始] を選択します。
  4. サービス ステータスが [実行中] であることを確認します。
  5. NXLog がログを収集していることを確認するには、NXLog ログファイルを確認します。
    • C:\Program Files\nxlog\data\nxlog.log
  6. ログ収集が成功したことを示すメッセージを探します。

    INFO im_file: monitoring file 'C:\Windows\System32\LogFiles\IN250315.log'
    

Google SecOps サービス アカウントを取得する

Google SecOps は、一意のサービス アカウントを使用して GCS バケットからデータを読み取ります。このサービス アカウントにバケットへのアクセス権を付与する必要があります。

サービス アカウントのメールアドレスを取得する

  1. [SIEM 設定] > [フィード] に移動します。
  2. [Add New Feed] をクリックします。
  3. [単一フィードを設定] をクリックします。
  4. [フィード名] フィールドに、フィードの名前を入力します(例: Microsoft NPS Logs)。
  5. [ソースタイプ] として [Google Cloud Storage V2] を選択します。
  6. [ログタイプ] として [MICROSOFT_NPS] を選択します。
  7. [サービス アカウントを取得する] をクリックします。一意のサービス アカウントのメールアドレスが表示されます(例:)。

    ```none
    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    ```
    
  8. このメールアドレスをコピーして、次のステップで使用します。

  9. [次へ] をクリックします。

  10. 次の入力パラメータの値を指定します。

    • ストレージ バケットの URL: 接頭辞パスを含む GCS バケット URI を入力します。

      gs://nps-logs-chronicle/nps-logs/
      
      • 次のように置き換えます。
        • nps-logs-chronicle: GCS バケット名。
        • nps-logs/: ログが保存される接頭辞/フォルダパス。
    • Source deletion option: 必要に応じて削除オプションを選択します。
      • なし: 転送後にファイルを削除しません(テストにおすすめ)。
      • 転送されたファイルを削除する: 転送が完了した後にファイルを削除します。
      • 転送されたファイルと空のディレクトリを削除する: 転送が完了した後にファイルと空のディレクトリを削除します。
    • ファイルの最大経過日数: 過去の日数以内に変更されたファイルを含めます(デフォルトは 180 日)。
    • アセットの名前空間: アセットの名前空間
    • Ingestion labels: このフィードのイベントに適用されるラベル
  11. [次へ] をクリックします。

  12. [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。

Google SecOps サービス アカウントに IAM 権限を付与する

  • Google SecOps サービス アカウントには、GCS バケットに対する Storage オブジェクト閲覧者のロールが必要です。
  1. [Cloud Storage] > [バケット] に移動します。
  2. バケット名(nps-logs-chronicle)をクリックします。
  3. [権限] タブに移動します。
  4. [アクセス権を付与] をクリックします。
  5. 次の構成情報を指定します。
    • プリンシパルを追加: Google SecOps サービス アカウントのメールアドレスを貼り付けます。
    • ロールを割り当てる: [Storage オブジェクト閲覧者] を選択します。
  6. [保存] をクリックします。

UDM マッピング テーブル

ログフィールド UDM マッピング ロジック
バージョン additional.fields 空でない場合は、対応するオブジェクトと統合されます
チャネル additional.fields
キーワード additional.fields
オペコード additional.fields
タスク additional.fields
ThreadID additional.fields
EventData.%1 additional.fields
EventData.%2 additional.fields
チャネル channel.value.string_value 値を直接コピーする
EventData.%1 event_data_p1.value.string_value 値を直接コピーする
EventData.%2 event_data_p2.value.string_value 値を直接コピーする
キーワード keywords.value.string_value 値を直接コピーする
TimeCreated metadata.event_timestamp UNIX_MS からタイムスタンプに変換
EventId metadata.event_type EventId == '4400' の場合は STATUS_UNCATEGORIZED、EventId == '13' の場合は STATUS_UPDATE、それ以外の場合は GENERIC_EVENT に設定します。
EventId metadata.product_event_type 値を直接コピーする
オペコード opcode.value.string_value 値を直接コピーする
パソコン principal.asset.hostname principal.hostname からコピーされた値
パソコン principal.hostname 値を直接コピーする
ProcessID principal.process.pid 値が空でない場合はコピーされます
UserId principal.user.windows_sid 正規表現を使用して抽出され、Windows SID を取得します
EventId security_result.rule_name 「EventID: 」+ EventId に設定
レベル security_result.severity 変換後: INFO/Informational/Information/Normal/NOTICE は INFORMATIONAL に、ERROR/Error は ERROR に、WARNING/Warning は INFORMATIONAL に、DEBUG は INFORMATIONAL に、Critical は CRITICAL に変換されます。
タスク task.value.string_value 値を直接コピーする
ThreadID thread_id.value.string_value 値を直接コピーする
バージョン version.value.string_value 値を直接コピーする
metadata.vendor_name metadata.vendor_name 「Microsoft」に設定
ProviderName metadata.product_name 値を直接コピーする

変更ログ

このパーサーの変更ログを表示する

さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。