Share via


WMI를 사용하여 위임

원격 시스템에서 데이터를 가져오는 로컬 시스템에서 스크립트를 실행하는 경우, WMI는 원격 시스템의 데이터 공급자에게 사용자 자격 증명을 제공합니다. 네트워크 홉이 하나만 필요하기 때문에 가장 수준만 필요합니다. 그러나 스크립트가 원격 시스템의 WMI에 연결하고 추가 원격 시스템에서 로그 파일을 열려고 하면, 가장 수준이 위임이 아닌 이상 스크립트가 실패하게 됩니다. 위임 가장 수준은 둘 이상의 네트워크 홉이 동반되는 모든 작업에 필요합니다. WMI의 DCOM 보안에 대한 자세한 내용은 클라이언트 애플리케이션 프로세스 보안 설정을 참조하세요. 두 컴퓨터 간의 단일 네트워크 홉 연결에 대한 자세한 내용은 원격 컴퓨터에서 WMI에 연결을 참조하세요.

위임을 사용하여 다른 컴퓨터를 통해 컴퓨터에 연결하는 방법

  1. 도메인 컨트롤러에서 Active Directory의 위임을 활성화합니다(제어판관리자 작업Active Directory 사용자 및 컴퓨터). 원격 시스템의 계정은 위임을 위해 신뢰할 수 있음으로 표시되어야 하며, 로컬 시스템의 계정은 계정이 민감하며 위임할 수 없음으로 표시되어선 안 됩니다. 로컬 시스템, 원격 시스템 및 도메인 컨트롤러는 동일한 도메인의 멤버이거나 신뢰할 수 있는 도메인에 있어야 합니다.

    참고 위임을 사용하면 직접 제어할 수 없는 프로세스에서 자격 증명을 사용할 수 있기 때문에 보안 위험이 발생합니다.

  2. 다음과 같은 방식으로 코드를 수정하여 위임 사용 의사를 표현해야 합니다.

    PowerShell

    WMI cmdlet의 -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를 사용하여 가장을 위임(값 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를 사용하여 원격으로 프로세스 만들기