다음을 통해 공유


이벤트를 안전하게 제공

권한이 없는 사용자가 액세스 권한이 없어야 하는 이벤트를 수신하지 못하도록 방지할 수 있습니다. System Registry ProviderRegistryKeyChangeEvent같은 클래스를 제공하는 것처럼 이벤트 공급자는 자체 이벤트 클래스의 인스턴스를 제공할 수 있습니다. 이벤트 공급자는 __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 이벤트 보안 확보