Avitek Medical Record 開発チュートリアル

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

 


プロダクションへの移行

 


チュートリアル 18 : Administration Console を使用したエンタープライズ JavaBean (EJB) リソースの保護

このチュートリアルでは、Administration Console を使用してエンタープライズ JavaBean (EJB) リソースを保護する方法を説明します。EJB リソース階層のさまざまなレベルでスコープ指定ロールとセキュリティ ポリシーを作成する方法についても、手順を追って説明します。

警告 : このチュートリアルでは、用意されている MedRec アプリケーションのセキュリティ コンフィグレーションを模倣することはしません。代わりに、EJB のさまざまなレベルを保護する一連の手順を紹介します。各手順の後に、EJB リソースへアクセスを試行して、セキュリティ ポリシーの実装の効果を確認します。必ずしも実際のシナリオを反映しているわけではなく、手順は単に機能を紹介するためのものです。チュートリアルの最後で、作成したセキュリティ ポリシーを削除して、アプリケーションを正しいセキュリティ コンフィグレーションに戻すことを検討してください。コンフィグレーションされるセキュリティ ポリシーは、実際には、MedRec アプリケーションの正しい機能の妨げとなります。

このチュートリアルは、以下の節で構成されています。

 


前提条件

このチュートリアルを始める前に、以下のことを行ってください。

 


手順

Administration Console を使用してエンタープライズ JavaBean (EJB) リソースを保護するには、次の手順に従います。

手順 1 : スコープ指定ロールを作成してグループにスコープ指定ロールを付与する

  1. Administration Console の左の [ドメイン構造] ペインで、[MedRecDomain|デプロイメント] をクリックします。
  2. 左ペインの [デプロイメント] テーブルで、[medrecEar] を展開します。
  3. [モジュール] カテゴリの下で、[sessionEjbs] EJB モジュールをクリックします。
  4. [セキュリティ|ロール] タブを選択します。
  5. このページには、WebLogic ロール マッピング プロバイダのデータベースで現在定義されているすべてのスコープ指定ロールが表示されます。

    このオプションを選択すると、この EJB JAR を対象とするセキュリティ ロールを作成できます。それ以降、そのスコープ指定ロールはこの EJB JAR のセキュリティ ポリシーで使用されます。

  6. [新規作成] をクリックします。
  7. [名前] フィールドに MedRecSessionEJBPatient と入力します。
  8. [プロバイダ名] フィールドのデフォルト値は変更しないでください。
  9. [OK] をクリックします。
  10. [EJB モジュールのロール] テーブルで、[MedRecSessionEJBPatient] をクリックします。
  11. [ロール条件] セクションで、[条件の追加] をクリックします。
  12. [述部リスト] ドロップダウン リスト ボックスで、[グループ] を選択します。
  13. [次へ] をクリックします。
  14. [ロール引数名] フィールドに MedRecPatients と入力します。
  15. 注意 : MedRecPatients グループは、「チュートリアル 16 : ユーザ、グループ、およびグローバル セキュリティ ロールの作成」で作成しました。このグループに所属するユーザは larry@bball.com だけです。
  16. [追加] をクリックします。
  17. [完了] をクリックします。
  18. [保存] をクリックします。
  19. [ロール条件] セクションには、「グループ MedRecPatients」というエントリが表示されます。

  20. 手順 1 ~ 16 を繰り返して MedRecSessionEJBAdmin という名前のスコープ指定ロールを作成し、このスコープ指定ロールを MedRecAdmins グループに付与します。
  21. 注意 : MedRecAdmins グループは、「チュートリアル 16 : ユーザ、グループ、およびグローバル セキュリティ ロールの作成」で作成しました。このグループに所属するユーザは admin@avitek.com だけです。

手順 2 : sessionEjbs JAR を保護する

  1. Administration Console の左の [ドメイン構造] ペインで、[MedRecDomain|デプロイメント] をクリックします。
  2. 左ペインの [デプロイメント] テーブルで、[medrecEar] を展開します。
  3. [モジュール] カテゴリの下で、[sessionEjbs] EJB モジュールをクリックします。
  4. [セキュリティ|ポリシー] タブを選択します。
  5. このページから、EJB JAR レベルでセキュリティ ポリシーを作成できます。このレベルには、JAR 内のすべての EJB とその EJB 内のすべてのメソッドが含まれます。

  6. [条件の追加] をクリックします。
  7. [述部リスト] ドロップダウン リストで、[ロール] を選択します。
  8. [次へ] をクリックします。
  9. [ロール引数名] フィールドに MedRecSessionEJBPatient と入力します。
  10. [追加] をクリックします。
  11. [完了] をクリックします。
  12. [保存] をクリックします。
  13. [ポリシー条件] セクションには、「ロール MedRecSessionEJBPatient」というエントリが表示されます。

    [オーバーライドされるポリシー] セクションには、「グループ everyone」というエントリが表示されます。

    sessionEjbs JAR に対してこのセキュリティ ポリシーを定義すると、EJB リソース タイプに対してすでに定義されているセキュリティ ポリシーがオーバーライドされます。たとえば、medrecEar アプリケーション全体に MedRecAdmin ロールのみがアクセスできることを以前に指定した場合は、[オーバーライドされるポリシー] セクションに「ロール MedRecAdmin」というテキストが表示されます。

    ただし、この場合は、デフォルトのセキュリティ ポリシー (グループ everyone) のみがオーバーライドされます。

    デフォルトのセキュリティ ポリシーの詳細については、『ロールおよびポリシーによる WebLogic リソースの保護』の「デフォルトのルート レベルのセキュリティ ポリシー」を参照してください。

手順 3 : SessionEJB JAR の EJB へのアクセスを試行する

  1. Web ブラウザを開いて、http://host:7101/admin と入力します。hostMedRecServer をホストするコンピュータを指します。ブラウザが同じコンピュータにある場合は、http://localhost:7101/admin という URL を使用できます。
  2. [ユーザ名] フィールドに admin@avitek.com、[パスワード] フィールドに weblogic と入力して、[ログイン] をクリックします。
  3. チュートリアル 17 : Administration Console を使用した URL (Web) リソースの保護」では、MedRecAdmin ロールに、admin Web アプリケーションにアクセスするパーミッションを付与しました。admin@avitek.com には (MedRecAdmins グループを通じて) MedRecAdmin ロールが付与されているので、admin@avitek.com ユーザは admin Web アプリケーションへのログインを許可されます。

  4. [管理タスク] ページで、[保留中のリクエストを表示] リンクをクリックします。
  5. ブラウザには次のようなエラーが表示されます。

    [EJB:010160]Security Violation: User: 'admin@avitek.com' has insufficient permission to access EJB: type=<ejb>, application=medrecEar, module=sessionEjbs, ejb=AdminSessionEJB, method=findNewUsers, methodInterface=Remote, signature={}.

    保留中のリクエストを表示するには、すでに保護されている sessionEjbs JAR 内の EJB である AdminSessionEJBfindNewUsers() メソッドにアクセスする必要があるため、エラーが表示されます。ユーザ admin@avitek.com は、セキュリティ ポリシーの作成に使用した MedRecSessionEJBPatient スコープ指定ロールを付与されていないため、アクセスを許可されません。

手順 4 : AdminSessionEJB を保護する

  1. Administration Console の左の [ドメイン構造] ペインで、[MedRecDomain|デプロイメント] をクリックします。
  2. 左ペインの [デプロイメント] テーブルで、[medrecEar] を展開します。
  3. [EJB] カテゴリの下で、[AdminSessionEJB] EJB モジュールをクリックします。
  4. [セキュリティ|ポリシー] タブを選択します。
  5. このページから、指定された EJB のセキュリティ ポリシーを、EJB レベルで (セキュリティ ポリシーが EJB 内のすべてのメソッドに適用される)、または EJB 内の特定のメソッドに対して作成できます。

  6. [EJB コンポーネントのメソッド] ドロップダウン リストで、デフォルトの [すべて] が選択されていることを確認します。
  7. [条件の追加] をクリックします。
  8. [述部リスト] ドロップダウン リストで、[ロール] を選択します。
  9. [次へ] をクリックします。
  10. [ロール引数名] フィールドに MedRecSessionEJBAdmin と入力します。
  11. [追加] をクリックします。
  12. [完了] をクリックします。
  13. [保存] をクリックします。
  14. [ポリシー条件] セクションには、「ロール MedRecSessionEJBAdmin」というエントリが表示されます。

    [オーバーライドされるポリシー] セクションには、「ロール MedRecSessionEJBPatient」というエントリが表示されます。

    AdminSessionEJB のセキュリティ ポリシーを定義すると、「手順 2 : sessionEjbs JAR を保護する」で EJB JAR に対して定義したセキュリティ ポリシーがオーバーライドされます。具体的には、継承されたポリシー文の「ロール MedRecSessionEJBPatient」がオーバーライドされます。

手順 5 : AdminSessionEJB へのアクセスを試行する

手順 3 : SessionEJB JAR の EJB へのアクセスを試行する」の手順 1 ~ 3 を繰り返します。

今回は、エラー ページが表示される代わりに、ブラウザには保留中のリクエストのリストが表示されます。

ユーザ admin@avitek.comMedRecEJBSessionAdmin スコープ指定ロールを付与されているため、このような結果になります。このスコープ指定ロールは、AdminSessionEJB (保留中のリクエストを表示するために必要な findNewUsers() メソッドを含む EJB) のセキュリティ ポリシーを作成するときに使用したものです。

手順 6 : findNewUsers() EJB メソッドを保護する

  1. Administration Console の左の [ドメイン構造] ペインで、[MedRecDomain|デプロイメント] をクリックします。
  2. 左ペインの [デプロイメント] テーブルで、[medrecEar] を展開します。
  3. [EJB] カテゴリの下で、[AdminSessionEJB] EJB モジュールをクリックします。
  4. [セキュリティ|ポリシー] タブを選択します。
  5. このページから、指定された EJB のセキュリティ ポリシーを、EJB レベルで (セキュリティ ポリシーが EJB 内のすべてのメソッドに適用される)、または EJB 内の特定のメソッドに対して作成できます。

  6. [EJB コンポーネントのメソッド] ドロップダウン リストで、[findNewUsers() - REMOTE] を選択します。
  7. [条件の追加] をクリックします。
  8. [述部リスト] ドロップダウン リストで、[ロール] を選択します。
  9. [次へ] をクリックします。
  10. [ロール引数名] フィールドに MedRecSessionEJBPatient と入力します。
  11. このスコープ指定ロールは SessionEJB に対して定義したものですが、findNewUsers() メソッドは AdminSessionEJB のコンポーネントであるため (AdminSessionEJB 自体は SessionEJB のコンポーネント)、ここでもこのスコープ指定ロールを使用できます。

  12. [追加] をクリックします。
  13. [完了] をクリックします。
  14. [保存] をクリックします。
  15. [ポリシー条件] セクションには、「ロール MedRecSessionEJBPatient」というエントリが表示されます。

    [オーバーライドされるポリシー] セクションには、「ロール MedRecSessionEJBAdmin」というエントリが表示されます。

    findNewUsers() のセキュリティ ポリシーを定義すると、「手順 4 : AdminSessionEJB を保護する」で AdminSessionEJB に対して定義したセキュリティ ポリシーがオーバーライドされます。具体的には、継承されたポリシー文の「ロール MedRecSessionEJBAdmin」がオーバーライドされます。このポリシー文は、[EJB コンポーネントのメソッド] ドロップダウン リストから [すべて] を選択したときに表示されます。

手順 7 : findNewUsers() EJB メソッドへのアクセスを試行する

手順 3 : SessionEJB JAR の EJB へのアクセスを試行する」の手順 1 ~ 3 を繰り返します。

ブラウザにはエラー ページが表示されます。保留中のリクエストを表示するために必要な findNewUsers() メソッドにアクセスできるのは、MedRecSessionEJBPatient スコープ指定ロールが付与されているユーザだけであるため、このような結果になります。ユーザ admin@avitek.com は、セキュリティ ポリシーの作成に使用したスコープ指定ロールを付与されていないため、アクセスできません。

手順 8 : 必要に応じて、EJB セキュリティ ポリシーを削除する

このチュートリアルでコンフィグレーションしたセキュリティ ポリシーは、用意されている MedRec アプリケーションのセキュリティ コンフィグレーションを模倣したものではなく、単に、ユーザが自分のアプリケーションで行えるように、EJB ポリシーを保護する方法を例として示したものです。コンフィグレーションされたセキュリティ ポリシーは、実際には、MedRec アプリケーションの正しい機能の妨げとなるため、アプリケーションを問題なく実行するには、次の手順に従ってセキュリティ ポリシーを削除する必要があります。

  1. Administration Console の左の [ドメイン構造] ペインで、[MedRecDomain|デプロイメント] をクリックします。
  2. 左ペインの [デプロイメント] テーブルで、[medrecEar] を展開します。
  3. [モジュール] カテゴリの下で、[sessionEjbs] EJB モジュールをクリックします。
  4. [セキュリティ|ポリシー] タブを選択します。
  5. [ポリシー条件] テーブルで、[ロール MedRecSessionEJBPatient] をチェックします。
  6. [削除] をクリックします。
  7. [保存] をクリックします。
  8. 左ペインで、[MedRecDomain|デプロイメント] をクリックします。
  9. 右ペインの [デプロイメント] テーブルで、medrecEar アプリケーションの AdminSessionEJB EJB モジュールに移動します。
  10. [セキュリティ|ポリシー] タブを選択します。
  11. [EJB コンポーネントのメソッド] ドロップダウン リストで、[すべて] を選択します。
  12. [ポリシー条件] テーブルで、[ロール MedRecSessionAdmin] をチェックします。
  13. [削除] をクリックします。
  14. [保存] をクリックします。
  15. [EJB コンポーネントのメソッド] ドロップダウン リストで、[findNewUsers() - REMOTE] を選択します。
  16. [ポリシー条件] テーブルで、[ロール MedRecSessionEJBPatient] をチェックします。
  17. [削除] をクリックします。
  18. [保存] をクリックします。

 


ベスト プラクティス

 


全体像

このチュートリアルでは、アプリケーションとさまざまなエンタープライズ JavaBean (EJB) リソースを保護する方法を説明しています。ここで示された例は、用意されている MedRec アプリケーションのセキュリティ コンフィグレーションを反映したものではありません。ただし、完全な MedRec アプリケーションでも同じプリンシパル (およびプログラムによるセキュリティ) を使用して MedRec の管理者と患者の両方の EJB リソースを保護します。

 


関連情報


ページの先頭       前  次