ヘッダーをスキップ
Oracle Fusion Middlewareセキュリティ・ガイド
11gリリース1(11.1.1)
B56235-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

3 ユーザーおよびロールについて

この章では、Oracle Platform Security Services(OPSS)のユーザーとロール、匿名ロール、認証ロールおよびロール・マッピングについて説明します。また、このガイド全体で使用する用語の定義と、ユーザーおよびロールAPIフレームワークの概要についても説明します。

OPSSでは、WebLogic管理コンソールで管理するOracle WebLogic Server認証プロバイダに認証を委任します。

この章の内容は次のとおりです。

ユーザーとロールのプログラムによる管理の詳細は、第19章「ユーザーおよびロールAPIを使用した開発」を参照してください。

3.1 用語

この項では、一般的な用語とOPSS固有の用語の定義について説明します。これらの用語のいくつかは前の章で説明しており、他のいくつかの用語については後の章で説明します。

ユーザー

ユーザーまたはエンタープライズ・ユーザーとは、サービスにアクセスするエンド・ユーザーです。ユーザー情報は、一般にWebLogic Server DefaultAuthenticatorでインスタンス化するドメイン・アイデンティティ・ストアに格納されます。認証されたユーザーとは、資格証明が検証されているユーザーです。

匿名ユーザーとは、資格証明が検証されていない(したがって認証されていない)ユーザーのことであり、保護されていないリソースにのみアクセスを許可されます。匿名ユーザーはOPSS固有のユーザーで、アプリケーション側でその使用を有効化または無効化できます。匿名ユーザーのサポートの詳細は、第3.4項「匿名ユーザーとロール」を参照してください。

ロール

エンタープライズ・グループまたはグループとは、ユーザーまたは他のグループで構成するロールです。アプリケーション・デプロイメント・ディスクリプタ(web.xmlejb-jar.xmlなど)で定義できるほか、コード内で注釈を使用して定義することもできます。

JavaEE論理ロールとは、JavaEEアプリケーションで宣言的またはプログラム的に指定するロールです。アプリケーション・デプロイメント・ディスクリプタで定義され、通常、アプリケーション・コード内で使用されます。

OPSSアプリケーション・ロールとは、ユーザー、グループおよびアプリケーション・ロールの集合で、階層構造にできます。これはアプリケーション固有であり、アプリケーション・ポリシーによって定義され、JavaEEコンテナが認識するとはかぎりません。アプリケーション・ロールは、アプリケーションの実行中にのみ参照可能であるため、有効範囲が限定されています。このロールは、同じアプリケーション・スコープで定義されている他のアプリケーション・ロール(およびエンタープライズ・ユーザーまたはグループ)にマップでき、認可の判断に使用します。

匿名ロールの詳細は、第3.4項「匿名ユーザーとロール」を参照してください。認証ロールの詳細は、第3.3項「認証ロール」を参照してください。

プリンシパル

プリンシパルとは、認証プロセスによって要求元エンティティ(ユーザーなど)に割り当てられる識別情報です。

OPSSサブジェクト

OPSSサブジェクトとは、プリンシパルの集合です。多くの場合は、パスワードや暗号キーなどのユーザー資格証明です。WebLogic認証では、サブジェクトにユーザーおよびグループを移入した後、サブジェクトにアプリケーション・ロールを追加します。匿名データの処理方法の詳細は、第3.4.1項「匿名サポートとサブジェクト」を参照してください。

セキュリティ・ストア

アイデンティティ・ストアとは、エンタープライズ・ユーザーおよびグループのリポジトリです。特別な設定をしていない場合、アイデンティティ・ストアはWebLogic DefaultAuthenticatorです。他のアイデンティティ・ストアとして、LDAP、RDBMS、カスタムなどがあります。このストアは、WebLogic管理コンソールで管理します。

ポリシー・ストアとは、アプリケーション・ポリシーおよびシステム・ポリシーのリポジトリです。このストアは、Oracle Enterprise Manager Fusion Middleware Controlで管理します。

資格証明ストアとは、ドメイン資格証明のリポジトリです。OPSSでは、1つの論理ストアを使用してポリシーと資格証明の両方を格納します。このストアは、Fusion Middleware Controlで管理します。

ストアの詳細は、第4章「アイデンティティ、ポリシーおよび資格証明について」を参照してください。

その他の用語

システム・コンポーネントとは、WebLogicコンポーネント以外の管理可能なプロセスです。たとえば、Oracle Internet Directory、WebCache、JavaSEコンポーネントなどがあります。

Javaコンポーネントとは、システム・コンポーネントの一種ですが、その管理はアプリケーション・サーバー・コンテナで行います。通常は、ドメイン拡張テンプレートと1対1の関係にある、アプリケーションおよびリソースの集合を表します。たとえば、Oracle SOAアプリケーションやOracle WebCenter Spaceなどがあります。

3.2 ロール・マッピング

OPSSでは、採用しているドメイン・ポリシー・リポジトリの種類がファイルベースであるか、LDAPベースであるかに関係なく、ドメイン・ポリシー・ストアでアプリケーション・ロールをエンタープライズ・グループにマッピングできます。このメカニズムにより、アプリケーション・ロールでの指定に従って、エンタープライズ・グループのユーザーにアプリケーション・リソースへのアクセスを許可できます。このマッピングでは、多対多が可能です。


注意:

Oracle JDeveloperでは、アプリケーションの開発中にこのマッピングを指定できます。また、第8.4.1.2項「アプリケーション・ロールの管理」で説明するように、アプリケーションのデプロイ後にWLSTまたはFusion Middleware Controlを使用してマッピングを指定することもできます。

エンタープライズ・グループにアプリケーション・ロールをマッピングすると、そのエンタープライズ・グループの権限は、その権限とそれにマッピングされたアプリケーション・ロールの権限を結合したものに書き換えられます。したがって、エンタープライズ・グループの権限が増加することはあっても減少することはありません。


3.2.1 パーミッションの継承とロールの階層

OPSSアプリケーション・ロールは、「所属メンバー」という関係を使用して階層構造にできます。つまり、ロールは、ユーザーまたは他のロールをメンバーとして持つことができます。


重要:

ロール階層を構築するときは、望ましくない動作を防止するために、循環依存を使用しないでください。たとえば、ロールAをロールBのメンバーに設定し、ロールBをロールAのメンバーに設定すると、このような循環依存が生成されます。

ロール階層では、ロールのメンバーは親ロールからパーミッションを継承します。つまり、ロールAがロールBのメンバーである場合、ロールBに付与されているすべてのパーミッションがロールAにも付与されます。当然のことながら、ロールAは、それ自体の特定のパーミッションを持っていますが、ロールBのメンバーとなることにより、ロールBに付与されているすべてのパーミッションを継承します。

次の例は、ネストしたアプリケーション・ユーザーとロールで構成したロール階層によるアプリケーション・ロールの管理です。

  • ロールdeveloperAppRoleは次のメンバーを持っています。

    developer
    developer_group
    managerAppRole
    directorAppRole
    
  • また、ロールdirectorAppRoleは次のメンバーを持っています。

    developer
    developer_group
    

ファイルjazn-data.xmlの中で、前述の階層を記述した部分を次に示します。

<policy-store>
  <applications>
    <application>
      <name>MyApp</name>
      <app-roles>
        <app-role>
          <name>developerAppRole</name>
          <class>oracle.security.jps.service.policystore.ApplicationRole</class>
          <display-name>Application developer role</display-name>
          <description>Application developer role</description>
          <guid>61FD29C0D47E11DABF9BA765378CF9F5</guid>
          <members>
            <member>
                      <class>weblogic.security.principal.WLSUserImpl</class>
                      <name>developer</name>
            </member>
            <member>
                      <class>weblogic.security.principal.WLSGroupImpl</class>
                      <name>developer_group</name>
            </membe>
            <member>
              <class>
oracle.security.jps.service.policystore.ApplicationRole</class>
              <name>managerAppRole</name>
            </member>
          </members>
        </app-role>
        <app-role>
                          <name>directorAppRole</name>
                          <class>oracle.security.jps.service.policystore.ApplicationRole</class>
                          <display-name>Application director role </display-name>
                          <description>Application director role</description>
                          <guid>61FD29C0D47E11DABF9BA765378CF9F8</guid>
                          <members>
            <member>
                                      <class>weblogic.security.principal.WLSUserImpl</class>
                                      <name>developer</name>
            </member>
            <member>
                                        <class>weblogic.security.principal.WLSGroupImpl</class>
                                        <name>developer_group</name>
            </member>
                                   </members>
         </app-role> ...
       </app-roles>

      <jazn-policy>
        <grant>
          <grantee>
             <principals>
                <principal>
                   <class>
           oracle.security.jps.service.policystore.ApplicationRole</class>
                   <name>developerAppRole</name>
                </principal>
             </principals>
          </grantee>
          <permissions>
            <permission>
              <class>java.io.FilePermission</class>
              <name>/tmp/oracle.txt</name>
              <actions>write</actions>
             </permission>
           </permissions>
         </grant>

         <grant>
           <grantee>
             <principals>
               <principal>
                 <class>
           oracle.security.jps.service.policystore.ApplicationRole</class>
                 <name>managerAppRole</name>
               </principal>
             </principals>
           </grantee>
           <permissions>
             <permission>
               <class>java.util.PropertyPermission</class>
               <name>myProperty</name>
               <actions>read</actions>
             </permission>
            </permissions>

           </grant>
           <grant>
             <grantee>
               <principals>
                 <principal>
                   <class>
oracle.security.jps.service.policystore.ApplicationRole</class>
                   <name>directorAppRole</name>
                 </principal>
               </principals>
             </grantee>
             <permissions>
               <permission>
                 <class>foo.CustomPermission</class>
                 <name>myProperty</name>
                 <actions>*</actions>
               </permission>
             </permissions>
           </grant>
         </jazn-policy>
       </policy-store>

表3-1は、継承ルールに従って、前述の階層の5つのユーザーとロールそれぞれが取得するパーミッションをまとめたものです。

表3-1 付与されるパーミッションと継承されるパーミッション

ロール 付与されるパーミッション 実際のパーミッション

developerAppRole

P1=java.io.FilePermission

P1

managerAppRole

P2= java.util.PropertyPermission

P2および(継承される)P1

directorAppRole

P3=foo.CustomPermission

P3および(継承される)P1

developer


P1およびP3(どちらも継承される)

developer_group


P1およびP3(どちらも継承される)


3.3 認証ロール

OPSSでは、特別なロールである認証ロールの使用がサポートされています。このロールには次の特性があります。

認証ロールに付与するパーミッションは、明示的に指定する必要はなく、所属先のエンタープライズ・グループおよびアプリケーション・ロールから暗黙的に派生します。

認証ロールの一般的な用途は、共通のアプリケーション・リソース、つまり認証されたユーザーが利用できるリソースへのアクセスを、認証されたユーザーに許可することです。

認証されたロールの使用をアプリケーション側で手動で構成する方法の詳細は、第15.1項「サーブレット・フィルタとEJBインターセプタの構成」を参照してください。

3.4 匿名ユーザーとロール

OPSSでは、匿名ユーザーと匿名ロールという、2つの特殊なエンティティを使用できます。認証ロールと同様に、これらのエンティティを宣言する必要はなく、アプリケーションによってJpsFilterまたはJpsInterceptorでその使用が構成されます。これらのどのエンティティも、アプリケーションのロール階層内でアプリケーションによって使用できます。

この匿名のエンティティを有効にしておくと、認証されていないユーザーが非保護リソースにアクセスするとき、そのユーザーは匿名ユーザーと匿名ロールのみが移入されたサブジェクトで表されます。そのサブジェクトが保護されたリソースにアクセスを試みた場合、認可過程でサブジェクトは「匿名サポートとサブジェクト」の説明のように処理されます。

匿名ユーザーおよびロールに付与するパーミッションは、明示的に指定する必要はなく、所属先のエンタープライズ・グループおよびアプリケーション・ロールから暗黙的に派生します。

匿名ユーザーおよびロールの一般的な用途は、認証されていないユーザーにパブリックな非保護リソースへのアクセスを許可することです。

匿名ユーザーおよびロールの使用をアプリケーションで手動で構成する方法の詳細は、第15.1項「サーブレット・フィルタとEJBインターセプタの構成」を参照してください。

3.4.1 匿名サポートとサブジェクト

この項では、全体を通じて匿名ユーザーおよび匿名ロールの使用が有効になっていることを前提とします。

エンドユーザーが初めて非保護リソースにアクセスした場合、サブジェクトが作成され、そのサブジェクトに匿名ユーザーと匿名ロールに対応した2つのプリンシパルが移入されます。非保護リソースに関するかぎり、そのサブジェクトは変更されず認証は行われません。

保護されたリソースにそのサブジェクトがアクセスすると認証が始まり、この時点までは匿名ロールのみを持っていたサブジェクトが、認証プロセスの結果に応じて次のように変更されます。

認証に成功した場合は次のようになります。

  1. 匿名ユーザーがサブジェクトから削除され、必要に応じて、認証されたユーザーに置換されます。

  2. 匿名ロールは削除され、認証ロールが追加されます。

  3. その他のロールが、必要に応じてサブジェクトに追加されます。

認証に成功すると、サブジェクトには、非匿名ユーザーに対応した1つのプリンシパル、認証ロールに対応した1つのプリンシパル、および場合によってはエンタープライズ・ロールまたはアプリケーション・ロールに対応した他のプリンシパルが含まれるようになります。

認証が成功しなかった場合は、匿名ユーザーが保持されます。匿名ロールは、アプリケーションによるJpsFilterまたはJpsInterceptorの構成に応じて削除または保持されます。他のプリンシパルは追加されません。デフォルトでは、匿名ロールはサブジェクトから削除されます。

3.5 管理ユーザーとロール

(WebLogic)管理者は、グループAdministratorsのユーザー・メンバーであり、このグループにはセキュリティ・レルムに存在している任意のユーザーを追加できます。

セキュリティ・レルムに存在するデフォルト・グループの詳細は、『Oracle Fusion Middleware Securing Resources Using Roles and Policies for Oracle WebLogic Server』のユーザー、グループおよびセキュリティ・ロールに関する項を参照してください。

通常、管理者にはデフォルト名はありません。唯一の例外は実行例をインストールした場合で、その際はサンプル・ドメインの管理者のデフォルト・ユーザー名とパスワードが提供されます。ただし、これらの例は本番環境では使用しないでください。

詳細は、『Oracle Fusion Middleware Securing a Production Environment for Oracle WebLogic Server』のセキュアな方法によるWebLogic Serverのインストールに関する項を参照してください。

ドメインを構成すると、Administratorsグループのメンバーは、セキュリティ・レルムに作成されたユーザーを、いつでもAdministratorsグループに追加したりグループから削除することができます。これらのアカウントを管理するための2つの基本ツールが、Oracle WebLogic管理コンソールとOracle WebLogic Scripting Tool(WLST)です。

詳細は、Oracle Fusion Middleware Oracle WebLogic Server管理コンソールのヘルプのグループへのユーザーの追加に関する項および『Oracle Fusion Middleware Oracle WebLogic Scripting Tool』のWebLogic Scripting Toolの使用に関する項を参照してください。

3.6 ユーザー・アカウントの管理

この項では、ユーザー・アカウントの作成とこれらのパスワードの保護に関する情報へのリンクをいくつか紹介します。