Aracılığıyla paylaş


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

  1. 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, veya Default. 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ız Default 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ır Security ; aksi takdirde günlüğe Application yazar. Varsayılan olarak Yalnızca Windows Server 2003 ve Windows Vista Güvenlik günlüğüne yazmayı destekler.

  2. 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
    
  3. 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ğinitrue, aşağıdaki kodda gösterildiği gibi veya falseolarak 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 şeklindedir true. 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.

  4. 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

  1. 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>  
    
  2. 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 SuppressAuditFailuretrueayarlandığında, güvenlik denetimleri oluşturulamaması engellenir (olarak ayarlanırsa falsebir ö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.

Ayrıca bkz.