第8章 承認

承認は、保護したいコンポーネントがあるレイヤではなく、そのタイプと関連しています。
セキュリティドメインは明示的には承認ポリシーは必要ありません。承認ポリシーが指定されていない場合は、 jboss-as/server/$PROFILE/deploy/security/security-policies-jboss-beans.xml で設定されたデフォルトの jboss-web-policyjboss-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-policyjboss-ejb-policy を定義します。
  1. セキュリティポリシー 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>
    
  2. 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>
    
  3. サーバーを再起動します

    これで、各アプリケーションポリシーに対して JACC 承認を有効にした security-policy-jboss-beans.xml ファイルを設定できました。
    サーバーを再起動して、新しいセキュリティポリシーが有効であることを確認してください。
特定の EJB および WEB コンポーネントに対する承認の設定

アプリケーションにさらに粒度の細かいセキュリティポリシーが必要な場合は、各アプリケーションポリシーに対して複数の承認セキュリティポリシーを宣言することができます。新しいセキュリティドメインは、別のセキュリティドメインからの基本設定を引き継ぎ、承認ポリシーモジュールなど特定の設定を上書きすることができます。

手順8.2 特定のセキュリティドメインに対する承認ポリシーの設定

特定のコンポーネントに承認を上書きすることができます。
この手順では、他のセキュリティドメインの定義から設定を引き継ぐ方法、セキュリティドメインごとに異なる承認ポリシーを指定する方法を説明しています。
この手順では、セキュリティドメインは 2 つ定義されています。test-domain セキュリティドメインは UsersRolesLoginModule ログインモジュールを使用し、JACC 承認を使用します。test-domain-inherited セキュリティドメインは test-domain からのログインモジュール情報を引き継ぎ、XACML 承認を使用する必要があると指定しています。
  1. セキュリティポリシーを開きます

    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
  2. 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>
    
  3. 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>
    
  4. サーバーを再起動します

    これで、異なる承認メソッドを使用する 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>