Nasıl yapılır: Windows Communication Foundation Güvenlik Olaylarını Denetleme
Windows Communication Foundation (WCF), güvenlik olaylarını Windows olay günlüğüne kaydetmenize olanak tanır. Bu günlük Windows Olay Görüntüleyicisi kullanılarak görüntülenebilir. Bu konuda, bir uygulamanın güvenlik olaylarını günlüğe kaydedecek şekilde nasıl ayarlanacağı açıklanmaktadır. WCF denetimi hakkında daha fazla bilgi için bkz . Denetim.
Koddaki güvenlik olaylarını denetlemek için
Denetim günlüğü konumunu belirtin. Bunu yapmak için, aşağıdaki kodda ServiceSecurityAuditBehavior gösterildiği gibi sınıfının özelliğini numaralandırma değerlerinden birine AuditLogLocation ayarlayınAuditLogLocation.
// 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
Sabit AuditLogLocation listesi üç değere sahiptir:
Application
,Security
, veyaDefault
. değeri, güvenlik günlüğü veya Uygulama günlüğü Olay Görüntüleyicisi görünür günlüklerden birini belirtir. Değerini kullanırsanızDefault
gerçek günlük, uygulamanın üzerinde çalıştığı işletim sistemine bağlıdır. Denetim etkinleştirilirse ve günlük konumu belirtilmezse, güvenlik günlüğüne yazmayı destekleyen platformlar için varsayılan günlük varsayılandırSecurity
; aksi takdirde günlüğeApplication
yazar. Varsayılan olarak Yalnızca Windows Server 2003 ve Windows Vista Güvenlik günlüğüne yazmayı destekler.Denetlenecek olay türlerini ayarlayın. Hizmet düzeyi olaylarını veya ileti düzeyi yetkilendirme olaylarını aynı anda denetleyebilirsiniz. Bunu yapmak için, aşağıdaki kodda ServiceAuthorizationAuditLevel gösterildiği gibi özelliğini veya MessageAuthenticationAuditLevel özelliğini numaralandırma değerlerinden birine AuditLevel ayarlayın.
// 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
Günlük denetimi olaylarıyla ilgili hataların uygulama tarafından gizlenip gizlenmeyeceğini veya kullanıma açılıp gösterilmeyeceğini belirtin. SuppressAuditFailure Özelliğini
true
, aşağıdaki kodda gösterildiği gibi veyafalse
olarak ayarlayın.// 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
Varsayılan
SuppressAuditFailure
özellik, denetim hatasının uygulamayı etkilememesi için şeklindedirtrue
. Aksi takdirde, bir özel durum oluşturulur. Başarılı bir denetim için ayrıntılı bir izleme yazılır. Herhangi bir denetim hatası için izleme Hata düzeyinde yazılır.açıklamasında ServiceHostbulunan davranış koleksiyonundan mevcut ServiceSecurityAuditBehavior olanı silin. Davranış koleksiyonuna Behaviors özelliği tarafından erişilir ve bu da özelliğinden Description erişilir. Ardından, aşağıdaki kodda gösterildiği gibi yeniyi ServiceSecurityAuditBehavior aynı koleksiyona ekleyin.
// 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)
Yapılandırmada denetimi ayarlamak için
Yapılandırmada denetimi ayarlamak için web.config dosyasının <behaviors> bölümüne bir <behavior> öğesi ekleyin. Ardından bir <serviceSecurityAudit> öğesi ekleyin ve aşağıdaki örnekte gösterildiği gibi çeşitli öznitelikleri ayarlayın.
<behaviors> <behavior name="myAuditBehavior"> <serviceSecurityAudit auditLogLocation="Application" suppressAuditFailure="false" serviceAuthorizationAuditLevel="None" messageAuthenticationAuditLevel="SuccessOrFailure" /> </behavior> </behaviors>
Aşağıdaki örnekte gösterildiği gibi hizmetin davranışını belirtmeniz gerekir.
<services> <service type="WCS.Samples.Service.Echo" behaviorConfiguration=" myAuditBehavior"> <endpoint address="" binding="wsHttpBinding" bindingConfiguration="CertificateDefault" contract="WCS.Samples.Service.IEcho" /> </service> </services>
Örnek
Aşağıdaki kod sınıfın bir örneğini ServiceHost oluşturur ve davranış koleksiyonuna yeni ServiceSecurityAuditBehavior bir ekler.
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
.NET Framework Güvenliği
özelliği olarak SuppressAuditFailuretrue
ayarlandığında, güvenlik denetimleri oluşturulamaması engellenir (olarak ayarlanırsa false
bir özel durum oluşturulur). Ancak, aşağıdaki Windows Yerel Güvenlik Ayarı özelliğini etkinleştirirseniz, denetim olaylarının oluşturulamaması Windows'un hemen kapanmasına neden olur:
Denetim: Güvenlik denetimlerini günlüğe kaydedemezse sistemi hemen kapatın
Özelliğini ayarlamak için Yerel Güvenlik Ayarlar iletişim kutusunu açın. Güvenlik Ayarlar altında Yerel İlkeler'e tıklayın. Ardından Güvenlik Seçenekleri'ne tıklayın.
AuditLogLocation Özellik olarak Security ayarlanırsa ve Nesne Erişimini Denetle Yerel Güvenlik İlkesi'nde ayarlanmazsa, denetim olayları Güvenlik günlüğüne yazılmaz. Hata döndürülmediğini, ancak denetim girdilerinin Güvenlik günlüğüne yazılmadığını unutmayın.