第8章 承認
承認は、保護したいコンポーネントがあるレイヤではなく、そのタイプと関連しています。
セキュリティドメインは明示的には承認ポリシーは必要ありません。承認ポリシーが指定されていない場合は、
jboss-as/server/$PROFILE/deploy/security/security-policies-jboss-beans.xml
で設定されたデフォルトの jboss-web-policy
と jboss-ejb-policy
承認が使用されます。
承認ポリシーを指定すること、または有効な承認ポリシーでカスタムのデプロイメント記述子ファイルを作成することを選択した場合は、これらの設定は
security-policies-jboss-beans.xml
のデフォルト設定を無効にします。
ユーザーはカスタム動作を実装する承認ポリシーを提供することができます。カスタム動作を設定することで、承認コントロールスタックが特定のコンポーネントに対してプラグ可能になり、(EJB では)
jboss.xml
および (WAR では) jboss-web.xml
に含まれているデフォルトの承認を上書きします。
仕様動作を実装するデフォルトモジュールの他に、EJB または Web コンポーネントに対するデフォルトの承認の上書きが Java Authorization Contract for Containers (JACC) と Extensible Access Control Markup Language (XACML) に対して行われます。
<authorization> 要素スキーマに関する情報は、「<authorization>」 を参照してください。
手順8.1 すべての EJB および WAR コンポーネントに承認ポリシーを設定
すべての EJB および Web コンポーネント、または特定のコンポーネントに対し承認を上書きすることができます。
この手順ではすべての EJB および WAR コンポーネントに対する JACC 承認制御の定義方法を説明しています。例では、Web および EJB アプリケーションに対しアプリケーションポリシーのモジュール
jboss-web-policy
と jboss-ejb-policy
を定義します。
セキュリティポリシー Bean を開きます
$JBOSS_HOME/server/$PROFILE/deploy/security
に移動します。security-policies-jboss-beans.xml
ファイルを開きます。デフォルトでsecurity-policies-jboss-beans.xml
ファイルには 例8.1「security-policies-jboss-beans.xml」 の設定が含まれています。例8.1 security-policies-jboss-beans.xml
<?xml version="1.0" encoding="UTF-8"?> <deployment xmlns="urn:jboss:bean-deployer:2.0"> <application-policy xmlns="urn:jboss:security-beans:1.0" name="jboss-web-policy" extends="other"> <authorization> <policy-module code="org.jboss.security.authorization.modules.DelegatingAuthorizationModule" flag="required"/> </authorization> </application-policy> <application-policy xmlns="urn:jboss:security-beans:1.0" name="jboss-ejb-policy" extends="other"> <authorization> <policy-module code="org.jboss.security.authorization.modules.DelegatingAuthorizationModule" flag="required"/> </authorization> </application-policy> </deployment>
application-policy 定義を変更します
JACC を使用して、各コンポーネントの単一の承認ポリシーを設定するには、JACC 承認モジュールの名前が付いた各<policy-module>
code
属性を修正します。<?xml version="1.0" encoding="UTF-8"?> <deployment xmlns="urn:jboss:bean-deployer:2.0"> <application-policy xmlns="urn:jboss:security-beans:1.0" name="jboss-web-policy" extends="other"> <authorization> <policy-module code="org.jboss.security.authorization.modules.JACCAuthorizationModule" flag="required"/> </authorization> </application-policy> <application-policy xmlns="urn:jboss:security-beans:1.0" name="jboss-ejb-policy" extends="other"> <authorization> <policy-module code="org.jboss.security.authorization.modules.JACCAuthorizationModule" flag="required"/> </authorization> </application-policy> <application-policy xmlns="urn:jboss:security-beans:1.0" name="jacc-test" extends="other"> <authorization> <policy-module code="org.jboss.security.authorization.modules.JACCAuthorizationModule" flag="required"/> </authorization> </application-policy> </deployment>
サーバーを再起動します
これで、各アプリケーションポリシーに対して JACC 承認を有効にしたsecurity-policy-jboss-beans.xml
ファイルを設定できました。サーバーを再起動して、新しいセキュリティポリシーが有効であることを確認してください。
特定の EJB および WEB コンポーネントに対する承認の設定
アプリケーションにさらに粒度の細かいセキュリティポリシーが必要な場合は、各アプリケーションポリシーに対して複数の承認セキュリティポリシーを宣言することができます。新しいセキュリティドメインは、別のセキュリティドメインからの基本設定を引き継ぎ、承認ポリシーモジュールなど特定の設定を上書きすることができます。
手順8.2 特定のセキュリティドメインに対する承認ポリシーの設定
特定のコンポーネントに承認を上書きすることができます。
この手順では、他のセキュリティドメインの定義から設定を引き継ぐ方法、セキュリティドメインごとに異なる承認ポリシーを指定する方法を説明しています。
この手順では、セキュリティドメインは 2 つ定義されています。
test-domain
セキュリティドメインは UsersRolesLoginModule
ログインモジュールを使用し、JACC 承認を使用します。test-domain-inherited
セキュリティドメインは test-domain
からのログインモジュール情報を引き継ぎ、XACML 承認を使用する必要があると指定しています。
セキュリティポリシーを開きます
jboss-as/server/$PROFILE/conf/login-config.xml
ファイルでセキュリティドメインの設定を指定するか、または設定を含むデプロイメント記述子ファイルを作成することができます。ご使用のアプリケーションでセキュリティドメインの設定をパッケージ化したい場合は、デプロイメント記述子を選択します。login-config.xml を検索し、開きます
使用しているサーバープロファイルのlogin-config.xml
ファイルに移動し、編集するファイルを開きます。$JBOSS_HOME/jboss-as/server/$PROFILE/conf/login-config.xml
jboss-beans.xml 記述子を作成します
[prefix]-jboss-beans.xml
記述子を作成し、[prefix] を有効な名前と置換します (test-war-jboss-beans.xml
など)。設定しているサーバープロファイルの/deploy
ディレクトリにこのファイルを保存します。jboss-as/server/$PROFILE/deploy/[prefix]-jboss-beans.xml
test-domain セキュリティドメインを指定します
ステップ 1 で選択した目的のファイルで、test-domain
セキュリティドメインを指定します。このドメインには、<login-module> 定義や JACC 承認ポリシーモジュールの定義などの認証情報が含まれています。<?xml version="1.0" encoding="UTF-8"?> <deployment xmlns="urn:jboss:bean-deployer:2.0"> <application-policy xmlns="urn:jboss:security-beans:1.0" name="test-domain"> <authentication> <login-module code = "org.jboss.security.auth.spi.UsersRolesLoginModule" flag = "required"> <module-option name = "unauthenticatedIdentity">anonymous</module-option> <module-option name="usersProperties">u.properties</module-option> <module-option name="rolesProperties">r.properties</module-option> </login-module> </authentication> <authorization> <policy-module code="org.jboss.security.authorization.modules.JACCAuthorizationModule" flag="required"/> </authorization> </application-policy> </deployment>
test-domain-inherited セキュリティドメインを追加します
test-domain
アプリケーションポリシーの後に、test-domain-inherited
アプリケーションポリシーの定義を追加します。extends
属性をother
に設定します。これでログインモジュール情報が引き継がれます。<policy-module>
要素の XACML 承認モジュールを指定します。<?xml version="1.0" encoding="UTF-8"?> <deployment xmlns="urn:jboss:bean-deployer:2.0"> <application-policy xmlns="urn:jboss:security-beans:1.0" name="test-domain"> <authentication> <login-module code = "org.jboss.security.auth.spi.UsersRolesLoginModule" flag = "required"> <module-option name = "unauthenticatedIdentity">anonymous</module-option> <module-option name="usersProperties">u.properties</module-option> <module-option name="rolesProperties">r.properties</module-option> </login-module> </authentication> <authorization> <policy-module code="org.jboss.security.authorization.modules.JACCAuthorizationModule" flag="required"/> </authorization> </application-policy> <application-policy xmlns="urn:jboss:security-beans:1.0" name="test-domain-inherited" extends="other"> <authorization> <policy-module code="org.jboss.security.authorization.modules.XACMLAuthorizationModule" flag="required"/> </authorization> </application-policy> </deployment>
サーバーを再起動します
これで、異なる承認メソッドを使用する 2 つのセキュリティドメインを持つ目的のファイルを設定できました。サーバーを再起動して、新しいセキュリティポリシーが有効であることを確認してください。
8.1. 委譲されるモジュール
手順8.1「すべての EJB および WAR コンポーネントに承認ポリシーを設定」 と 手順8.2「特定のセキュリティドメインに対する承認ポリシーの設定」 では、セキュリティドメインでの基本認証の設定方法について示した簡略化した例を説明します。
承認は保護したいコンポーネントの (レイヤではなく) タイプに関係しているため、デプロイメント記述子 (
*-jboss-beans.xml
) 内で承認モジュールを委譲することができ、実装内の標準認証から異なる承認ポリシーを指定することができます。
org.jboss.security.authorization.modules.AuthorizationModuleDelegate
クラスは、委譲されるモジュールの実装を可能にする多くのサブクラスを提供します。
AbstractJACCModuleDelegate
WebPolicyModuleDelegate
EJBPolicyModuleDelegate
WebXACMLPolicyModuleDelegate
WebJACCPolicyModuleDelegate
EJBXACMLPolicyModuleDelegate
EJBJACCPolicyModuleDelegate
モジュールが
org.jboss.security.authorization.modules.AuthorizationModuleDelegate
クラスを拡張する場合は、委譲された承認モジュールを作成できます。
委譲されたモジュールを実装するには、<authorization> ポリシーの <module-option> 要素内でモジュールの委譲を宣言します。各モジュールにはプレフィックスとして 例8.2「モジュールの委譲の宣言」 のとおり関係するコンポーネントが付いています。
例8.2 モジュールの委譲の宣言
<application-policy xmlns="urn:jboss:security-beans:1.0" name="test-domain" extends="other"> <authorization> <policy-module code="xxx.yyy.MyAuthorizationModule" flag="required"> <module-option name="delegateMap">web=xxx.yyy.mywebauthorizationdelegate,ejb=xxx.yyy.myejbauthorizationdelegate</module-option> </policy-module> </authorization> </application-policy>