본문 바로가기

IT 살이/03. 관리 - 보안 관리

[연재] 6. 보안 정책 설정 예

6. 보안 정책 설정 예

다음은 관리툴을 사용해서 보안 정책을 배포하는 예제를 보겠다. 이 보안 정책에서는 부모와 자식, 2 계층 구조의 코드 그룹을 생성해서 권한 집합을 확대하는 방법을 보이겠다. 그리고 앞에서 생략한 사용자가 직접 권한 집합을 만드는 예도 더불어 본다.

■ 권한 집합 생성

먼저 코드그룹에서 사용할 권한 집합을 "SCPermissionSet'이라는 이름으로 미리 하나 만들어두자. 집합을 새로 생성하려면 권한에 대한 자세한 내용을 알고 있어야 한다. 그러나 현실적으로 엔터프라이즈 애플리케이션을 개발하는 개발자들이 권한 집합을 생성하거나 편집하면서 개발할 시간은 거의 없다. 따라서 개발자시에는 주로 이미 만들어진 FullTrust 권한 집합을 사용하는 것이 보통이다.

권한 집합 생성 #1

생성할 권한 집합의 이름을 입력한다. 다음을 클릭하면 권한 집합에 포함될 수 있는 가능한 모든 권한이 출력된다.

권한 집합 생성 #2

기본적으로 출력되는 권한들 외에도 다음 인터페이스를 구현해서 사용자가 직접 정의해서 추가할 수도 있다.

namespace System.Security
{
  public interface IPermission
  {
   IPermission Union(IPermission rhs);
   IPermission Intersect(IPermission rhs);
   bool        IsSubsetOf(IPermission rhs);
   IPermission Copy();
   void        Demand();
  }
}

그러나 달봉이는 아직 권한을 확장해 본 경험이 없다. 자세한 내용은 다른 문서를 참고하라.

사용 가능한 권한을 선택해서 추가를 하면 상세 권한을 설정하는 창이 뜨는데, 적당히 선택하고 나면 그림처럼 선택한 권한이 권한 집합에 할당된 것으로 나타난다. 마침을 클릭하면 새로운 권한 집합이 생성된다.

권한 집합 생성 #3

■ 코드 그룹 생성

이제 이 권한 집합을 부여할 코드 그룹을 생성한다. 새로운 코드 그룹에 대한 속성은 다음과 같다.

정책 레벨 : 컴퓨터 정책
부모 그룹 : All_Code
코드그룹명 : SmartClientCodeGroup
멤버조건 : URL = "http://dalbong2.net/*"
권한집합 : SCPermissionSet

생성된 권한 집합 부여

코드 그룹에 권한 집합을 부여할 때 기존의 권한 집합 목록을 보면 앞에서 생성한 권한 집합 "SCPermissionSet"도 포함되어 있다. 이것을 선택하면 된다.

부모 코드 그룹 추가 완료

■ 자식 코드 그룹 생성

이제 "SmartClientCodeGroup" 코드그룹의 자식 그룹을 하나 더 생성하자.

부모 그룹 : SmartClientCodeGroup
코드그룹명 : "SmartClientStrongNamed"
멤버조건 : 강력한 이름 = "공개키값"
권한집합 : FullTrust

다음은 자식 코드 그룹까지 생성한 모습이다.

공개키 조건값 입력

계층 구조의 코드 그룹

코드 그룹의 계층 구조는 어셈블리에 새로운 권한을 부여할 수 있는 방법이라고 앞에서 말했다. 만약 어떤 어셈블리의 CODEBASE URL이 "http://dalbong2.net/"를 포함하고 있다면 "SmartClientCodeGroup"그룹으로 분류되어 일단 권한 집합 "SCPermissionSet"에 포함되어 있는 권한들을 부여받게 된다. 그리고 "SmartClientCodeGroup"에 포함되는 어셈블리들 중에서 공개키가 "SmartClientStrongNamed" 그룹의 조건 값과 일치한다면 "FullTrust" 권한 집합에 매핑이 되어 모든 권한을 부여받게 된다. 이렇게 코드 그룹의 계층 구조를 통해서 좀 더 세밀한 권한 구조를 만들 수도 있다.