Postupy: Auditování událostí zabezpečení služby Windows Communication Foundation

Windows Communication Foundation (WCF) umožňuje protokolovat události zabezpečení do protokolu událostí Systému Windows, který lze zobrazit pomocí windows Prohlížeč událostí. Toto téma vysvětluje, jak nastavit aplikaci tak, aby protokolovat události zabezpečení. Další informace o auditování WCF naleznete v tématu Auditování.

Auditování událostí zabezpečení v kódu

  1. Zadejte umístění protokolu auditu. Chcete-li to provést, nastavte AuditLogLocation vlastnost ServiceSecurityAuditBehavior třídy na jednu z AuditLogLocation hodnot výčtu, jak je znázorněno v následujícím kódu.

    // Create a new auditing behavior and set the log location.
    ServiceSecurityAuditBehavior newAudit =
        new ServiceSecurityAuditBehavior();
    newAudit.AuditLogLocation =
        AuditLogLocation.Application;
    
    ' Create a new auditing behavior and set the log location.
    Dim newAudit As New ServiceSecurityAuditBehavior()
    newAudit.AuditLogLocation = AuditLogLocation.Application
    

    Výčet AuditLogLocation má tři hodnoty: Application, Securitynebo Default. Hodnota určuje jeden z protokolů viditelných v Prohlížeč událostí, a to buď v protokolu zabezpečení, nebo v protokolu aplikace. Pokud použijete Default hodnotu, skutečný protokol bude záviset na operačním systému, na kterém aplikace běží. Pokud je auditování povolené a umístění protokolu není zadané, výchozí je Security protokol pro platformy, které podporují zápis do protokolu zabezpečení. Jinak se do protokolu zapíše Application . Zápis do protokolu zabezpečení ve výchozím nastavení podporují pouze Systémy Windows Server 2003 a Windows Vista.

  2. Nastavte typy událostí, které chcete auditovat. Události na úrovni služby nebo události autorizace na úrovni zpráv můžete auditovat současně. Uděláte to tak, že ServiceAuthorizationAuditLevel vlastnost nebo MessageAuthenticationAuditLevel vlastnost nastavíte na jednu z AuditLevel hodnot výčtu, jak je znázorněno v následujícím kódu.

    // Create a new auditing behavior and set the log location.
    ServiceSecurityAuditBehavior newAudit =
        new ServiceSecurityAuditBehavior();
    newAudit.AuditLogLocation =
        AuditLogLocation.Application;
    newAudit.MessageAuthenticationAuditLevel =
        AuditLevel.SuccessOrFailure;
    newAudit.ServiceAuthorizationAuditLevel =
        AuditLevel.SuccessOrFailure;
    
    newAudit.MessageAuthenticationAuditLevel = _
        AuditLevel.SuccessOrFailure
    newAudit.ServiceAuthorizationAuditLevel = _
        AuditLevel.SuccessOrFailure
    
  3. Určete, jestli se mají potlačit nebo zveřejnit selhání aplikace týkající se událostí auditu protokolu. SuppressAuditFailure Nastavte vlastnost buď nebo truefalse, jak je znázorněno v následujícím kódu.

    // Create a new auditing behavior and set the log location.
    ServiceSecurityAuditBehavior newAudit =
        new ServiceSecurityAuditBehavior();
    newAudit.AuditLogLocation =
        AuditLogLocation.Application;
    newAudit.MessageAuthenticationAuditLevel =
        AuditLevel.SuccessOrFailure;
    newAudit.ServiceAuthorizationAuditLevel =
        AuditLevel.SuccessOrFailure;
    newAudit.SuppressAuditFailure = false;
    
    newAudit.SuppressAuditFailure = False
    

    Výchozí SuppressAuditFailure vlastnost je true, aby selhání auditování nemá vliv na aplikaci. V opačném případě je vyvolána výjimka. V případě úspěšného auditu se zapíše podrobné trasování. V případě selhání auditu se trasování zapíše na úrovni chyby.

  4. Odstraňte existující ServiceSecurityAuditBehavior z kolekce chování nalezených ServiceHostv popisu . Ke kolekci chování přistupuje Behaviors vlastnost, ke které se zase přistupuje z Description vlastnosti. Potom přidejte nový ServiceSecurityAuditBehavior do stejné kolekce, jak je znázorněno v následujícím kódu.

    // Remove the old behavior and add the new.
    serviceHost.Description.
        Behaviors.Remove<ServiceSecurityAuditBehavior>();
    serviceHost.Description.Behaviors.Add(newAudit);
    
    ' Remove the old behavior and add the new.
    serviceHost.Description.Behaviors.Remove(Of ServiceSecurityAuditBehavior)
    serviceHost.Description.Behaviors.Add(newAudit)
    

Nastavení auditování v konfiguraci

  1. Pokud chcete nastavit auditování v konfiguraci, přidejte <prvek chování> do< části chování> souboru web.config. Pak přidejte <serviceSecurityAudit> element a nastavte různé atributy, jak je znázorněno v následujícím příkladu.

    <behaviors>  
       <behavior name="myAuditBehavior">  
          <serviceSecurityAudit auditLogLocation="Application"  
                suppressAuditFailure="false"
                serviceAuthorizationAuditLevel="None"
                messageAuthenticationAuditLevel="SuccessOrFailure" />  
          </behavior>  
    </behaviors>  
    
  2. Musíte zadat chování služby, jak je znázorněno v následujícím příkladu.

    <services>  
        <service type="WCS.Samples.Service.Echo"
        behaviorConfiguration=" myAuditBehavior">  
           <endpoint address=""  
                    binding="wsHttpBinding"  
                    bindingConfiguration="CertificateDefault"
                    contract="WCS.Samples.Service.IEcho" />  
        </service>  
    </services>  
    

Příklad

Následující kód vytvoří instanci ServiceHost třídy a přidá novou ServiceSecurityAuditBehavior kolekci chování.

public static void Main()
{
    // Get base address from appsettings in configuration.
    Uri baseAddress = new Uri(ConfigurationManager.
        AppSettings["baseAddress"]);

    // Create a ServiceHost for the CalculatorService type
    // and provide the base address.
    using (ServiceHost serviceHost = new
        ServiceHost(typeof(CalculatorService), baseAddress))
    {
        // Create a new auditing behavior and set the log location.
        ServiceSecurityAuditBehavior newAudit =
            new ServiceSecurityAuditBehavior();
        newAudit.AuditLogLocation =
            AuditLogLocation.Application;
        newAudit.MessageAuthenticationAuditLevel =
            AuditLevel.SuccessOrFailure;
        newAudit.ServiceAuthorizationAuditLevel =
            AuditLevel.SuccessOrFailure;
        newAudit.SuppressAuditFailure = false;
        // Remove the old behavior and add the new.
        serviceHost.Description.
            Behaviors.Remove<ServiceSecurityAuditBehavior>();
        serviceHost.Description.Behaviors.Add(newAudit);
        // Open the ServiceHostBase to create listeners
        // and start listening for messages.
        serviceHost.Open();

        // The service can now be accessed.
        Console.WriteLine("The service is ready.");
        Console.WriteLine("Press <ENTER> to terminate service.");
        Console.WriteLine();
        Console.ReadLine();

        // Close the ServiceHostBase to shutdown the service.
        serviceHost.Close();
    }
}
Public Shared Sub Main()
    ' Get base address from appsettings in configuration.
    Dim baseAddress As New Uri(ConfigurationManager.AppSettings("baseAddress"))

    ' Create a ServiceHost for the CalculatorService type 
    ' and provide the base address.
    Dim serviceHost As New ServiceHost(GetType(CalculatorService), baseAddress)
    Try
        ' Create a new auditing behavior and set the log location.
        Dim newAudit As New ServiceSecurityAuditBehavior()
        newAudit.AuditLogLocation = AuditLogLocation.Application
        newAudit.MessageAuthenticationAuditLevel = _
            AuditLevel.SuccessOrFailure
        newAudit.ServiceAuthorizationAuditLevel = _
            AuditLevel.SuccessOrFailure
        newAudit.SuppressAuditFailure = False
        ' Remove the old behavior and add the new.
        serviceHost.Description.Behaviors.Remove(Of ServiceSecurityAuditBehavior)
        serviceHost.Description.Behaviors.Add(newAudit)
        ' Open the ServiceHostBase to create listeners 
        ' and start listening for messages.
        serviceHost.Open()

        ' The service can now be accessed.
        Console.WriteLine("The service is ready.")
        Console.WriteLine("Press <ENTER> to terminate service.")
        Console.WriteLine()
        Console.ReadLine()

        ' Close the ServiceHostBase to shutdown the service.
        serviceHost.Close()
    Finally
    End Try

End Sub

Zabezpečení rozhraní .NET Framework

SuppressAuditFailure Nastavení vlastnosti na true, potlačuje případné selhání generování auditů zabezpečení (pokud je nastaveno na false, vyvolá se výjimka). Pokud však povolíte následující vlastnost Nastavení místního zabezpečení systému Windows, selhání generování událostí auditu způsobí okamžité vypnutí systému Windows:

Audit: Okamžitě vypněte systém, pokud nejde protokolovat audity zabezpečení.

Chcete-li nastavit vlastnost, otevřete dialogové okno Místní zabezpečení Nastavení. V části Nastavení zabezpečení klikněte na místní zásady. Potom klikněte na Možnosti zabezpečení.

Pokud je vlastnost nastavena AuditLogLocation na Security a Audit Objekt Access není nastaven v místních zásadách zabezpečení, události auditu nebudou zapsány do protokolu zabezpečení. Všimněte si, že se nevrátí žádná chyba, ale položky auditu nejsou zapsány do protokolu zabezpečení.

Viz také