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
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
,Security
neboDefault
. 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žijeteDefault
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í jeSecurity
protokol pro platformy, které podporují zápis do protokolu zabezpečení. Jinak se do protokolu zapíšeApplication
. Zápis do protokolu zabezpečení ve výchozím nastavení podporují pouze Systémy Windows Server 2003 a Windows Vista.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
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
true
false
, 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 jetrue
, 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.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
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>
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í.