サーバーデバイスでサービスとしてRemote Actionsを実行する(Windowsのみ)

リモート アクションがサービスと対話するために特定の Windows 資格情報を必要とする場合、Nexthink は特別に構成されたサービスのコンテキスト内でそれを実行できる専用機能を提供します。

Nexthink Library には、この機能を活用するリモート アクションが含まれています。具体的には:

  • Active Directory グループへのユーザーの追加/削除。

  • Active Directory グループへのデバイスの追加/削除。

これらのリモート アクションは、さまざまなユースケースのワークフローで使用されています。

サービスとして実行するリモート アクションは、オンプレミスのサーバーと安全に対話するためのバスティオンデバイスである Windows Server デバイスでの使用を想定しています。 サービス リモート アクションを設定および操作する前に、Windows サービス デバイスで追加のセットアップ作業を行う必要があります。

リモートアクションのセキュリティ上の重要性から、その使用を制限するためにNexthinkの機能を活用することをお勧めします。

  • もしあれば、リモートアクションを実行することが許可されているユーザーのみに選択的に共有します。

  • バスティオンサーバー用の専用エンティティを設定し、このデバイス上でリモートアクションを実行できる役割を制限します。

ターゲット Windows サーバーを設定する

要件

Nexthink では、Windows Server 2019を使用することをお勧めします。

標準のプロセスを使用して、デバイスに Collector (バージョン 24.5以降)を展開および設定します。

サービス内でスクリプトを実行するためのユーザーアカウント(通常はサービスアカウント)を作成します。

  1. 計画されたリモートアクションを正常に実行するために必要な権限がアカウントにあることを確認します。 そのサービス アカウントに、できるだけ少ない権限を付与することで、安全性のベスト プラクティスを適用していることを確認します。 ベストプラクティスの例:

  2. 該当する場合は、関連する PowerShell モジュールがインストールされていることを確認します。 たとえば、Nexthink Library リモートアクションが ActiveDirectory と対話するには、次の PowerShell コマンド ラインを使用して ActiveDirectory モジュールをインストールする必要があります: Install-WindowsFeature RSAT-AD-PowerShell

  3. 以下のフォルダへの書き込み権限がアカウントにあることを確認します。そのフォルダにはログが保存されます: c:\ProgramData\Nexthink\Logs\User\ c:\ProgramData\Nexthink\RemoteActions\Scripts\Service

  4. 次のフォルダーから PowerShell スクリプトを実行する権限がアカウントにあることを確認します: c:\ProgramData\Nexthink\RemoteActions\Scripts\Service

  5. アカウントがローカルセキュリティポリシーに基づいて、コンピュータ上でサービスとしてログオンできることを確認します。 ローカル ユーザーの場合、ローカル コンピューター ポリシー マネージャーで次の手順を実行します: [コンピューターの構成] > [Windowsの設定] > [セキュリティの設定] > [ローカル ポリシー] > [ユーザー権利の割り当て] に移動し、ユーザーまたはユーザーが属するグループが [サービスとしてログオン] ポリシーに含まれているかどうかを確認します。\

    image-20240404-130808.png

サーバーをさらに保護し、デバイス上で実行可能なスクリプトを正確に制御するためのベストプラクティスを以下に示します。

  • リモートアクションのためにCollector実行ポリシーをトラスト済みに設定します。

  • Windows サーバー デバイスで実行されるべきリモート アクションのために専用のコード署名証明書を使用し、使用する予定のコード署名証明書をローカル コンピューター > 信頼された発行者証明書ストアに展開します。 Windowsでのリモートアクションのためのスクリプト作成 ドキュメントを参照してください。

サービスのインストール、作成、および実行

リモート アクションを実行するためのサービスを構成するために、次の手順に従ってください:

  1. サービスを登録します。 ローカル管理者として次のコマンドを実行します: sc create "nxtcod_service" binpath= "\"C:\Program Files\Nexthink\Collector\Coordinator\nxtcod.exe\" --service-name \"nxtcod_service\" --queue-size 512 --max-concurrent-script-executions 4" DisplayName= "Nexthink RA Execution as a Service" start= autosc description "nxtcod_service" "Run Nexthink remote actions in a dedicated service account context"

    注意:

    1. パラメータ --service-name は必須で、その値 nxtcod_service はリモート アクションを構成する際に使用されなければなりません。 Nexthinkは、サービス自体と同じ値を使用することを推奨します。 値は、文字、数字、および _ のみで構成され、最大長は50文字です。 この引数を指定しない、あるいは無効な値を指定すると、サービスが開始されません。

    2. サービスは、--queue-size および --max-concurrent-script-executions というパラメータによって、受け入れられる負荷を制御する追加のパラメータをサポートしています。 詳細については、以下のセクションを参照してください。

  2. サービス設定を完了します。 管理コンソールを使用します:

    1. サービス管理コンソール services.msc を開きます。

    2. 手順1で作成したサービス Nexthink RA Execution as a Service を見つけて、ダブルクリックしてそのプロパティを編集します。

    3. [ログオン] タブで、アカウント名とそのパスワードを入力して、サービスに使用するアカウントを構成します。 このアカウントには、使用予定のリモート アクション スクリプトに必要な操作を実行するための必要な権限がなければなりません。

      image-20240405-075205.png
    4. [回復] タブで、サービスが失敗した場合に再起動するように回復オプションを設定します。 Nexthink は、次のパラメータを使用して、サービスが失敗するたびに再起動することを推奨します:

      image-20240405-075125.png
  3. サービスの開始: サービスの[全般] タブで[開始] をクリックするか、ローカル管理者として次のコマンドを実行します: sc start "nxtcod_service"

異なるユーザーを使用するための追加のサービス インスタンスの実行

同じデバイスで異なる資格情報でリモート アクションを実行するために、追加のサービス インスタンスを作成します。

追加サービスを構成するには、上記の手順に従い、次の調整を行います:

  1. 最初のサービスと同様のコマンドラインを使用して追加のサービス インスタンスを作成しますが、異なるサービス名と表示名を使用します。 コマンドライン パラメーターを調整します: sc create "nxtcod_service_bis" binpath= "\"C:\Program Files\Nexthink\Collector\Coordinator\nxtcod.exe\" --service-name \"nxtcod_service_bis\" --queue-size 512 --max-concurrent-script-executions 4" DisplayName= "Nexthink RA Execution as a Service (2)" start= auto sc description "nxtcod_service_bis" "Run Nexthink remote actions in a dedicated service account context (2)"

  2. 前の手順を使用してサービスを構成および開始します。

サービスの更新とアンインストール

Collector を更新する場合、サービスの実行可能ファイルも更新されます。 Collector の更新後、最新バージョンを使用していることを確認するためにサービスを再起動してください。

Collector をアンインストールする前に、サービスの全インスタンスを停止します。 そうしないと、アンインストール時にエラーが発生します。

予期される負荷のモニタリング

典型的なワークフロー シナリオでは、同じサーバーが多くのリモート アクションを処理し、各ユーザーまたはデバイスに必要な処理を行います。 サーバーはリクエストをキューに入れ、指定された数のスレッドが並行して作業することで順次処理します。

バスティオン サーバー上でのリモート アクションの実行に期待されるスループットに合わせて、コマンド ライン パラメーターを使用して構成します:

  • キューの長さ: パラメーター --queue-size、デフォルト: 128、推奨値: 1024、最大: 100000。

  • サービス内で実行される並列リモート アクションの数: パラメーター --max-concurrent-script-executions、デフォルト: 2、推奨値: 4、最大推奨値: サーバーのコア数。

Collector で収集されたデータを活用して、制限を超えないようにしてください。

  • サーバーのCPU使用率とメモリ使用率の平均をチェックし、それらが使用し尽くされていないことを確認します。

    device_performance.events past 24h
    | where device.name == "<proxy-device-name>"
    | summarize avg_cpu_usage = cpu_usage.avg() / number_of_logical_processors.avg(), avg_free_memory = free_memory.avg() by 1h
    | where avg_cpu_usage >= 80 or avg_free_memory <= 1GB
  • 次のNQLクエリを実行して、リモートアクションの実行が失敗していないか、タイムアウトしていないか確認します。

    remote_action.executions past 7d
    | where remote_action.name in ["<service-remote-action-names>"]
    | summarize total_executions = count(), in_progress = countif(status == in_progress), expired = countif(status == expired), success = countif(status == success), failure = countif(status == failure) by 1d, device.name
    • 保留中の数が最大キューサイズを超えている場合、--queue-size パラメータの値を増やすことを検討してください。

    • 期限切れの数が増えている場合は、--max-concurrent-script-executions パラメータの値を増やすことを検討してください。

エラーのトラブルシューティング

症状
トラブルシューティング

サービスを開始する際のエラー:<Local コンピューターのサービス名> サービスが開始された後に停止しました。

関連するエラーメッセージを探すために Windows イベント ログを確認してください:

共通の原因は、必須のコマンドライン引数 --service-name が不足していることです。

次の手順を使用して問題を確認し、修正します:

  • サービス管理コンソールからサービスを編集します。

  • 実行可能ファイルへのパス の値が正しく--service-name "somevalue" コマンドラインに含まれており、somevalue には文字、数字、または_のみが含まれていて、長さが 50 文字以内であることを確認します。

  • ローカル管理者としてこのコマンドを実行して、実行可能ファイルとそのパラメータを修正するには、コマンドライン引数を修正します: sc config "nxtcod_service" binpath= ""C:\Program Files\Nexthink\Collector\Coordinator\nxtcod.exe" --service-name "service_1" --queue-size 512 --max-concurrent-script-executions 4"

リモートアクションの実行中のエラー: サービスが見つかりません。

リモートアクションのスクリプト タブで構成されたサービス名の値 (例:service_1) が、サービスのセットアップに使用される --service-name 引数と一致していることを確認します:

  • サービス管理コンソールからサービスを編集します。

  • 実行可能ファイルへのパス にリモート アクション構成で使用される値に一致する引数 --service-name "service_1" があることを確認します。

  • 同じ指示に従ってコマンドラインを修正します。

Last updated

Was this helpful?