이벤트를 안전하게 제공

권한이 없는 사용자가 액세스 권한이 없어야 하는 이벤트를 수신하지 못하도록 방지할 수 있습니다. 시스템 레지스트리 공급자가 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 컨트롤을 사용하여 네임스페이스 보안 설정을 참조하세요.

WMI 이벤트 보안