14.1 보안 서브시스템
보안은 모든 엔터프라이즈 애플리케이션의 필수 요소 중 하나이다. 애플리케이션에 접근할 수 있는 권한을 가진 사용자만 사용할 수 있도록 제한하는 기능도 필요하며, 사용자의 역할에 따라 사용할 수 있는 기능을 제한하는 기능도 필요하다. Java EE 표준에서는 EJB나 웹 애플리케이션에 대한 접근 권한을 역할 기반 보안 모델(role-based security model)로 정의하고 있다. JAAS(Java Authentication and Authorization Service) 표준을 기반으로 하고 있다.
JBoss EAP 6에서는 JBoss의 PicketBox와 PicketLink Framework으로 보안 서브시스템을 사용하고 있다. PicketBox는 가장 기본이 되는 보안 프레임워크로 인증(Authentication), 인가(Authorization), 감사(Audit)와 Java 애플리케이션과 맵핑하는 기능을 제공하는 프레임워크이다. PicketBox와 비슷한 이름의 PicketLink는 애플리케이션 보안 프레임워크로 사용자 인증, 애 플리케이션의 비즈니스 메서드에 대한 인가 및 사용자, 그룹, 역할, 권한을 관리하는 기능을 제공한다.
JBoss EAP 6의 보안은 도메인이나 보안 영역의 개념을 도입하였고, 설정 파일이 통합되어 이전 버전보다 사용하기 편리해졌다. 이번 장에서는 EAP 6의 보안 서브시스템, 보안 도메인, 보안 영역의 설정 방법에 대해 설명한다.
보안 서브시스템은 다음과 같은 4개 항목으로 구성된다.
| 파라미터 | 설명 |
|---|---|
| security-domains | 보안 도메인은 인증, 보안 감사, 보안 맵핑을 제어하기 위해 애플리케이션이 사용하는 JAAS(Java Authentication and Authorization Service) 보안 설정들의 집합이다. 여러 개의 보안 도메인을 설정할 수 있다. 보안 도메인에 인증, 권한 부여, 맵핑, 감사 모듈 및 JASPI 인증, JSSE 구성 정보를 포함할 수 있다. 애플리케이션에서 보안 도메인의 이름을 지정하여 보안 설정을 한다. |
| security-management | 보안의 동작이나 클래스를 설정한다. 이것을 설정하면 보안 서브시스템의 실행방법이 바뀐다. 이 설정을 변경하는 일은 거의 없다. |
| subject-factory | 서브젝트 팩토리는 서브젝트(주체) 인스턴스 생성을 제어한다. 서브젝트 팩토리는 주로 JCA 구성요소에 사용된다. 이 설정을 변경하는 일은 거의 없다. |
| security-properties | java.security.Security 클래스에 사용할 프로퍼티의 이름과 값을 설정한다. |
표 1. 보안 서브시스템의 주요 설정 항목
<subsystem xmlns="urn:jboss:domain:security:1.2">
<security-management>
…
</security-management>
<subject-factory>
…
</subject-factory>
<security-domains>
<security-domain name="other" cache-type="default">
<authentication>
<login-module code="Remoting" flag="optional">
<module-option name="password-stacking" value="useFirstPass"/>
<login-module code="RealmDirect" flag="required">
</login-module>
<module-option name="password-stacking" value="useFirstPass"/>
</login-module>
</authentication>
</security-domain>
<security-domain name="jboss-web-policy" cache-type="default">
<authorization>
<policy-module code="Delegating" flag="required"/>
</authorization>
</security-domain>
<security-domain name="jboss-ejb-policy" cache-type="default">
<authorization>
<policy-module code="Delegating" flag="required"/>
</authorization>
</security-domain>
</security-domains>
<security-properties>
…
</security-properties>
</subsystem>