이벤트를 안전하게 제공
권한이 없는 사용자가 액세스 권한이 없어야 하는 이벤트를 수신하지 못하도록 방지할 수 있습니다. 시스템 레지스트리 공급자가 RegistryKeyChangeEvent와 같은 클래스를 제공하는 것처럼 이벤트 공급자는 자체 이벤트 클래스의 인스턴스를 제공할 수 있습니다. 이벤트 공급자는 __InstanceCreationEvent 같은 기본 이벤트도 제공할 수 있습니다. 자세한 내용은 이벤트 공급자 작성을 참조하세요.
이벤트 공급자는 다음과 같은 방법으로 이벤트 수신자에 대한 액세스를 제어할 수 있습니다.
IWbemEventProviderSecurity::AccessCheck를 구현하여 액세스 제어를 사용하는 것이 가장 효율적인 방법입니다.
공급자는 소비자가 요청된 이벤트를 받을 수 있는 권한이 있는지 여부를 결정합니다. 소비자가 등록할 수 있는 충분한 권한이 없는 경우 WMI가 액세스 거부 오류를 반환합니다. 공급자가 이벤트를 받을 수 있는 사용자를 결정할 수 있는 경우에 이 모드를 사용합니다. 예를 들어, 공급자가 보안 관련 이벤트를 제공할 수 있는데 소비자에게 SeSecurityPrivilege 권한이 사용하도록 설정된 관리자 권한이 있어야 할 수 있습니다.
이벤트를 발생시키는 데 사용되는 싱크에서 IWbemEventSink::SetSinkSecurity를 구현하면 통과하는 모든 이벤트에 대해 싱크에서 SD(보안 설명자)를 설정할 수 있습니다.
WMI는 SD를 기반으로 액세스 검사를 수행합니다. 공급자가 이벤트를 사용할 수 있는 사용자를 결정할 수 없지만 특정 싱크에 대한 SD는 결정할 수 있는 경우에 이 모드를 사용합니다. 예를 들어, 이벤트 공급자가 가 IWbemEventSink::GetRestrictedSink를 호출하여 여러 싱크를 가져왔는데 각 싱크에 대한 보안 설명자가 필요한 경우 IWbemEventSink::SetSinkSecurity 를 사용합니다.
이벤트의 SECURITY_DESCRIPTOR 속성을 설정하면 각 이벤트에 대해 SD를 설정할 수 있습니다.
싱크에 전달된 각 이벤트의 보안 설명자가 서로 다를 수 있을 때 이 방법을 사용합니다. 이 방법을 사용하려면 공급자가 정의한 외부 이벤트 클래스를 __Event 또는 __ExtrinsicEvent에서 파생시켜 SECURITY_DESCRIPTOR 속성이 클래스에 포함시킵니다. 예를 들어, 이벤트 공급자가 싱크를 통해 보안 이벤트와 일반 이벤트를 모두 게시할 수 있습니다. 이 경우 보안 이벤트에는 Administrators 계정 보안 설명자를 사용하고, 누구나 수신할 수 있는 일반 이벤트에는 NULL 보안 설명자를 사용합니다.
분리된 이벤트 공급자에 의한 이벤트 보안
분리된 이벤트 공급자는 WMI에 등록하는 방식에서 분리되지 않은 이벤트 공급자와 다릅니다. 분리된 공급자의 이벤트는 IWbemEventProviderSecurity::AccessCheck를 호출해도 클라이언트 액세스 토큰이 전파되지 않습니다. WMI는 분리되지 않은 이벤트 공급자와 동일한 방식으로 액세스 제어를 처리합니다. 분리된 공급자를 작성하는 방법에 관한 자세한 내용은 애플리케이션에서 공급자 통합을 참조하세요.
제어판의 WMI 컨트롤에 FULL_WRITE 권한이 설정된 관리자만 네임스페이스에 대한 이벤트를 발생시킬 수 있습니다. 자세한 내용은 WMI 컨트롤을 사용하여 네임스페이스 보안 설정을 참조하세요.
관련 항목