WMI での委任

リモート システムからデータを取得するローカル システムでスクリプトを実行する際、WMI はリモート システム上のデータのプロバイダーに資格情報を提供します。 この場合、必要なネットワーク ホップは 1 つだけなので、必要となるのは偽装レベルを Impersonate にすることだけです。 ただし、スクリプトがリモート システム上の WMI に接続し、追加のリモート システムでログ ファイルを開こうとした場合は、偽装レベルが Delegate でなとスクリプトが失敗します。 複数のネットワーク ホップが発生する操作では、Delegate 偽装レベルが必要となります。 WMI での DCOM セキュリティの詳細については、「クライアント アプリケーション プロセスのセキュリティの設定」を参照してください。 2 台のコンピューター間での 1 ネットワーク ホップ接続について詳しくは、「リモート コンピューター上の WMI への接続」を参照してください。

委任を使用して別のコンピューター経由でコンピューターに接続するには

  1. ドメイン コントローラーで、Active Directory での委任を有効にします ([コントロール パネル][管理タスク][Active Directory ユーザーとコンピューター])。 リモート システム上のアカウントは、[委任に対して信頼されました] としてマークする必要があります。ローカル システム上のアカウントは、[アカウントは重要なので委任できない] としてマークしないでください。 ローカル システム、リモート システム、およびドメイン コントローラーは、同じドメインまたは信頼されたドメインのメンバーである必要があります。

    委任を使用すると、直接の制御下にないプロセスが資格情報を使用できるようになるので、セキュリティ上のリスクが発生します。

  2. コードを次のように変更して、委任を使用する意思を示します。

    PowerShell

    WMI コマンドレットの -Impersonation パラメーターを Delegate に設定します。

    VBScript

    モニカー文字列の SWbemLocator.ConnectServer または Delegate の呼び出しで、impersonationLevel パラメーターを Delegate に設定します。 SWbemSecurity オブジェクトで偽装を設定することもできます。

    C++

    CoInitializeSecurity または CoSetProxyBlanket の呼び出しで、偽装レベル パラメーターを RPC_C_IMP_LEVEL_DELEGATE に設定します。 これらの呼び出しをいつ行うかについて詳しくは、「WMI アプリケーション用の COM の初期化」を参照してください。

    C++ でリモート COM サーバーにクライアント ID を渡すには、CoSetProxyBlanket の呼び出しでクローキングを設定します。 詳細については、「クローキング」を参照してください。

次のコード例は、偽装を Delegate に設定するモニカー文字列を示したものです。 権限を Kerberos に設定する必要があることに注意してください。

set objWMIServices = Getobject("winmgmts:{impersonationLevel=Delegate,authority=kerberos:MyDomain\Computer_B}!\\ComputerB\Root\CIMv2")

次のコード例は、SWbemLocator.ConnectServer を使用して、偽装を Delegate (値 4) に設定する方法を示したものです。

Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objLocator.ConnectServer(Computer_B, _
                                             "Root\CIMv2", _
                                             AdminAccount, _
                                             MyPassword, _
                                             "kerberos:Domain\Computer_B")
objWMIService.Security_.ImpersonationLevel = 4

リモート WMI 接続のセキュリティ保護

WMI を使用したリモートでのプロセスの作成