방법: Windows Communication Foundation 보안 이벤트 감사
WCF(Windows Communication Foundation)를 사용하면 Windows 이벤트 뷰어를 사용하여 볼 수 있는 Windows 이벤트 로그에 보안 이벤트를 로그할 수 있습니다. 이 항목에서는 보안 이벤트를 기록하도록 애플리케이션을 설정하는 방법에 대해 설명합니다. WCF 감사에 대한 자세한 내용은 감사를 참조하세요.
코드에서 보안 이벤트를 감사하려면
감사 로그 위치를 지정합니다. 이렇게 하려면 다음 코드와 같이 AuditLogLocation 클래스의 ServiceSecurityAuditBehavior 속성을 AuditLogLocation 열거형 값 중 하나로 설정합니다.
// 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
AuditLogLocation 열거형에는
Application
,Security
또는Default
의 세 개 값이 있습니다. 이 값은 이벤트 뷰어에서 볼 수 있는 로그(보안 로그 또는 애플리케이션 로그) 중 하나를 지정합니다.Default
값을 사용하는 경우 실제 로그는 애플리케이션을 실행하는 운영 체제에 따라 달라집니다. 감사를 사용하지만 로그 위치가 지정되지 않은 경우 기본값은 보안 로그에 쓰기를 지원하는 플랫폼의Security
로그입니다. 그렇지 않으면Application
로그에 씁니다. Windows Server 2003 및 Windows Vista만 기본적으로 보안 로그에 쓰기를 지원합니다.감사할 이벤트 형식을 설정합니다. 서비스 수준 이벤트나 메시지 수준 권한 부여 이벤트를 동시에 감사할 수 있습니다. 이렇게 하려면 다음 코드와 같이 ServiceAuthorizationAuditLevel 속성이나 MessageAuthenticationAuditLevel 속성을 AuditLevel 열거형 값 중 하나로 설정합니다.
// 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
로그 감사 이벤트에 대해 오류를 애플리케이션에 노출할지 또는 표시하지 않을지 지정합니다. 다음 코드와 같이 SuppressAuditFailure 속성을
true
또는false
로 설정합니다.// 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
기본
SuppressAuditFailure
속성이true
이므로 감사하지 못해도 애플리케이션에 영향을 주지 않습니다. 그러지 않으면 예외가 throw됩니다. 성공한 모든 감사에 대해 자세한 추적이 기록됩니다. 감사하지 못하면 오류 수준에서 추적이 기록됩니다.ServiceSecurityAuditBehavior의 설명에 있는 동작 컬렉션에서 기존 ServiceHost를 삭제합니다. 동작 컬렉션은 Behaviors 컬렉션에서 액세스되는 Description 속성으로 액세스됩니다. 다음 코드와 같이 동일한 컬렉션에 새 ServiceSecurityAuditBehavior를 추가합니다.
// 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)
구성에서 감사를 설정하려면
구성에서 감사를 설정하려면 web.config 파일의 <behaviors> 섹션에 <behavior> 요소를 추가합니다. 그런 후 다음 예와 같이 <serviceSecurityAudit> 요소를 추가하고 다양한 특성을 설정합니다.
<behaviors> <behavior name="myAuditBehavior"> <serviceSecurityAudit auditLogLocation="Application" suppressAuditFailure="false" serviceAuthorizationAuditLevel="None" messageAuthenticationAuditLevel="SuccessOrFailure" /> </behavior> </behaviors>
다음 예제와 같이 서비스의 동작을 지정해야 합니다.
<services> <service type="WCS.Samples.Service.Echo" behaviorConfiguration=" myAuditBehavior"> <endpoint address="" binding="wsHttpBinding" bindingConfiguration="CertificateDefault" contract="WCS.Samples.Service.IEcho" /> </service> </services>
예시
다음 코드는 ServiceHost 클래스의 인스턴스를 만들고 해당 동작 컬렉션에 새 ServiceSecurityAuditBehavior를 추가합니다.
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 보안
SuppressAuditFailure 속성을 true
로 설정하면 보안 감사 생성 오류가 표시되지 않습니다. false
로 설정하면 예외가 throw됩니다. 그러나 다음 Windows 로컬 보안 설정 속성을 사용하면 감사 이벤트를 생성하지 못할 경우 Windows가 즉시 종료됩니다.
감사: 보안 감사를 로그할 수 없는 경우 즉시 시스템 종료
속성을 설정하려면 로컬 보안 설정 대화 상자를 엽니다. 보안 설정에서 로컬 정책을 클릭합니다. 그런 다음 보안 옵션을 클릭합니다.
AuditLogLocation 속성이 Security로 설정되어 있지만 개체 액세스 감사가 로컬 보안 정책에 설정되지 않은 경우 감사 이벤트는 보안 로그에 기록되지 않습니다. 오류가 반환되지는 않지만 감사 항목이 보안 로그에 기록되지 않습니다.