2009年 2月 20日 金曜日
【設定編】J2EE Agent 3.0 を用いて Weblogic に配備したサンプルアプリケーションをプロテクトする
今回は、OpenSSO Enterprise 8.0 と J2EE Agent 3.0 を使用して、
Weblogic サーバー上に配備したサンプルアプリケーションをプロテクトする手順について
スナップショットともにデモ形式で紹介しようと思います。
使用するソフトウェア
前提条件
- OpenSSO, J2EE Agent およびサンプルアプリケーションは同じホスト my.test.domain.com 上にインストールする。
- OpenSSO は、Glassfish 上に配備済み。
- URL: http://my.test.domain.com:48080/opensso80
- データストアには組み込みの OpenDS を使用。ルートサフィックスはデフォルトの dc=opensso,dc=java,dc=net とする。
- Weblogic は、/opt/bea 以下にインストールし、
J2EE Agent とサンプルアプリケーションの配備用にポート 7023 で、domain2 を作成済み。
- エージェントのインストール用にパスワードファイル /export/passwd.txt は作成済み。(パスワードは password とする。)
では、始めてみましょう。
1. エージェントのプロファイルを作成する
まず最初に、OpenSSO コンソール上でエージェントのプロファイルを作成します。
- http://my.test.domain.com:48080/opensso80 にアクセスして、amadmin でログインします。
- デフォルトでは「共通タスク」のページが表示されるので、「アクセス制御」タブをクリックします。
- レルムの一覧ページが表示されますので、"/ (最上位のレルム)" をクリックします。
- レルムのプロパティーページが表示されるので、「エージェント」タブをクリックします。
- エージェントのページが表示されるので、「J2EE」タブをクリックします。
- エージェントセクションで「新規」ボタンをクリックします。
- エージェントのプロファイルを作成します。ここでは、次のように入力します。
- 名前:weblogic
- パスワード: password
- 設定: 集中を選択(デフォルトのまま)
- サーバー URL: http://my.test.domain.com:48080/opensso80
- エージェント URL: http://my.test.domain.com:7023/agentapp
- 入力が終わったら、「作成」ボタンをクリックして、プロファイルを作成します。
2. J2EE Agent 3.0 をインストールする
- ダウンロードした weblogic_v10_agent_3.zip を解凍し、
j2ee_agents/weblogic_v10_agent/bin ディレクトリに移動します。
- agentadmin を実行可能にします。
# chmod a+x agentadmin
- agentadmin --install を実行してインストールを開始します。
ここでは、以下のように入力します。
# ./agentadmin --install
Please read the following License Agreement carefully:
[Press to continue...] or [Enter n To Finish]
n
Do you completely agree with all the terms and conditions of this License
Agreement (yes/no): [no]: yes
Enter the path to the location of the script used to start the WebLogic domain.
Please ensure that the agent is first installed on the admin server instance
before installing on any managed server instance.
[ ? : Help, ! : Exit ]
Enter the Startup script location
[/usr/local/bea/user_projects/domains/base_domain/startWebLogic.sh]: /opt/bea/user_projects/domains/domain2/startWebLogic.sh
Enter the WebLogic home directory
[ ? : Help, < : Back, ! : Exit ]
Enter the WebLogic home directory [/usr/local/bea/wlserver_10.0]: /opt/bea/wlserver_10.3
Enter the URL where the OpenSSO server is running. Please include the
deployment URI also as shown below:
(http://opensso.sample.com:58080/opensso)
[ ? : Help, < : Back, ! : Exit ]
OpenSSO server URL: http://my.test.domain.com:48080/opensso80
Enter the Agent URL. Please include the deployment URI also as shown below:
(http://agent1.sample.com:1234/agentapp)
[ ? : Help, < : Back, ! : Exit ]
Agent URL: http://my.test.domain.com:7023/agentapp
Enter the Agent profile name
[ ? : Help, < : Back, ! : Exit ]
Enter the Agent Profile name: weblogic
Enter the path to a file that contains the password to be used for identifying
the Agent.
[ ? : Help, < : Back, ! : Exit ]
Enter the path to the password file: /export/passwd.txt
- インストールが成功したことを確認したら、次のステップに進みます。
3. startWebLogic.sh を編集する。
J2EE Agent のインストールが完了すると、/opt/bea/user_projects/domains/domain2 ディレクトリに、setAgentEnv_AdminServer.sh が作られています。
このファイルには、J2EE Agent を使用するのに必要な CLASSPATH や JAVA_OPTIONS が定義されているので、
Weblogic の起動時に、このファイルを読み込むように、startWebLogic.sh
を編集する必要があります。
- /opt/bea/user_projects/domains/domain2/bin ディレクトリに移動し、テキストエディタで startWebLogic.sh を開きます。
- ". ${DOMAIN_HOME}/bin/setDomainEnv.sh $*" という行がファイルの中程にあるので、
この行のすぐ下に、". /opt/bea/user_projects/domains/domain2/setAgentEnv_AdminServer.sh" という行を追加します。
追加後のファイルは、以下のようになります。(赤字が追加した行)
# Call setDomainEnv here.
DOMAIN_HOME="/opt/bea/user_projects/domains/domain2"
. ${DOMAIN_HOME}/bin/setDomainEnv.sh $*
. /opt/bea/user_projects/domains/domain2/setAgentEnv_AdminServer.sh
SAVE_JAVA_OPTIONS="${JAVA_OPTIONS}"
SAVE_CLASSPATH="${CLASSPATH}"
# Start PointBase
- ファイルを保存して、Weblogic を再起動します。
4. エージェントアプリケーション(agentapp.war) を配備する
次に、Weblogic の console (http://my.test.domain.com:7023/console) に管理者 ID(ここでは、weblogic としてます。) でアクセスして、
j2ee_agents/weblogic_v10_agent/etc ディレクトリにある agentapp.war を配備します。
agentapp.war の配備が完了したら次のステップに進みます。
5. Agent Authentication Provider を設定する
引き続き、Weblogic のコンソール画面で、次の手順を実行します。
- 左の区画で、Security Realms をクリックします。
- 右の区画で、myrealm をクリックします。
- 右の区画で、Providers タブをクリックします。
- 右の区画で、New ボタンをクリックします。
- Name フィールドに適当な名前を入力します。ここでは、agenttest とします。
Type のリストから、AgentAuthenticator を選び、「OK」ボタンをクリックします。
- Authentication Providers の一覧から DefaultAuthenticator をクリックします。
- Control Flag の値を OPTIONAL に変更し、「Save」ボタンをクリックします。
- Weblogic サーバーを再起動して、変更内容を反映させます。
6. バイパス主体リストに weblogic の管理者を追加する
次に、OpenSSO コンソールに amadmin でログインして、先ほど作成したエージェントのプロファイルを編集し、バイパス主体リストに weblogic の管理者 ID を追加します。
- ログイン後、「アクセス制御」タブをクリックします。
- レルムの一覧ページから "/ (最上位のレルム)" をクリックします。
- レルムのプロパティーページで、「エージェント」タブをクリックします。
- エージェントのページが表示されるので、「J2EE」タブをクリックします。
- 先ほど作成したプロファイル weblogic をクリックします。
- プロファイルの編集画面で、「その他」タブをクリックします。
- バイパス主体リストの新しい値フィールドに、weblogic (ここでは、これが管理者ID となっています。) と入力し、「追加」ボタンをクリックします。
- 「保存」ボタンをクリックして、変更内容を反映させます。
7. サンプルアプリケーションを配備する
次に J2EE Agent に付属されてるサンプルアプリケーションを配備します。
アプリケーションは、j2ee_agents/weblogic_v10_agent/sampleapp/dist ディレクトリにある
agentsample.ear です。
これを、weblogic の管理コンソールで配備します。
配備したら、http://my.test.domain.com:7023/agentsample にアクセスしてみます。
ここまでの設定が正しく行えていれば、次のように OpenSSO のログイン画面へリダイレクトされるはずです。
いったん、ブラウザを再起動して次のステップに進みます。
8. エージェントプロファイルを編集する
次に、先ほど配備したサンプルアプリケーションのプロテクトが正しく行えるように、
エージェントのプロファイルにいくつかプロパティーを設定します。
- エージェントのプロファイル weblogic をクリックして、編集ページを表示します。
- 「アプリケーション」タブをクリックします。
- 「ログイン処理」のセクションで、「ログインフォーム URI」の新しい値に /agentsample/authentication/login.html を入力し、「追加」ボタンをクリックします。
- 「ログアウト処理」のセクションで、「アプリケーションログアウト URI」の新しい値のマップキーに、agentsample を、
対応するマップ値に、/agentsample/logout を入力し、「追加」ボタンをクリックします。
- 「アクセス拒否 URI 処理」のセクションで、「リソースアクセス拒否 URI」の新しい値の
マップキーに、agentsample を、
対応するマップ値に、/agentsample/authentication/accessdenied.html を入力し、「追加」ボタンをクリックします。
- 「適用されない URI 処理」のセクションで、「適用されない URI」の新しい値に
次の URI を 1 つずつ入力し、その都度「追加」ボタンをクリックします。
- /agentsample/public/*
- /agentsample/images/*
- /agentsample/styles/*
- /agentsample/index.html
- /agentsample
- 「特権属性処理」セクションで、「特権属性マッピング」の「マップキー」と「対応するマップ値」に
次の値を入力し、その都度「追加」ボタンをクリックします。
これにより、あとで OpenSSO 上で作成するグループの UUID とアプリケーション側であらかじめ設定されているロールのマッピングが行われます。
| マップキー |
対応するマップ値 |
| id=employee,ou=group,dc=opensso,dc=java,dc=net |
am_employee_role |
| id=manager,ou=group,dc=opensso,dc=java,dc=net |
am_manager_role |
- 入力が終わったら、編集内容を反映させるために「保存」ボタンをクリックします。
-
保存が完了したら、「メインページに戻る」ボタンをクリックして、エージェントの一覧ページに戻ります。
9. 検証用に使うユーザーとグループを作成する
今回配備したサンプルアプリケーションは、アプリケーション側で事前に設定してあるポリシーと、
あとで OpenSSO 上で作成する URL ポリシーの両方のポリシーによって
以下のリンクへのアクセスの可否を次のようにコントロールすることを想定しています。
| リンク |
アクセスを許可する対象 |
| http://my.test.domain.com:7023/agentsample/protectedservlet |
manager グループのメンバー |
| http://my.test.domain.com:7023/agentsample/unprotectedservlet |
employee グループのメンバー |
http://my.test.domain.com:7023/agentsample/securityawareservlet
http://my.test.domain.com:7023/agentsample/invokerservlet |
OpenSSO の認証をパスしたユーザー |
| http://my.test.domain.com:7023/agentsample/urlpolicyservlet |
customer グループのメンバー |
ここでは、検証用に次の 7 人のユーザーを作成します。
* ユーザーID/パスワード
* andy/andy
* bob/bob
* chris/chris
* dave/dave
* ellen/ellen
* frank/frank
* gina/gina
簡単化のため、各ユーザーの名は省略。姓とフルネームは、ID と同じにする。
次に、manager、employee、everyone、customer と 4 つのグループを作成し、
上の各ユーザーを次のようにグループ分けします。
| グループ |
ユーザー |
| employee |
andy, bob, chris, dave, ellen, frank |
| manager |
andy, bob, chris |
| everyone |
andy, bob, chris, dave, ellen, frank, gina |
| customer |
chris, ellen |
例えば、manager グループを作成して、andy、bob、chris の 3 人をグループのメンバーにするには、次の手順で行います。
- 「対象」をクリックし、「グループ」タブをクリックします。
- 「新規」ボタンをクリックし、新しいグループページで、ID フィールドに manager と記入し、「了解」ボタンをクリックします。
- グループの一覧ページに戻るので、manager のリンクをクリックします。
- 「ユーザー」タブをクリックして、「選択可能」ボックスから、andy、bob、chris の 3 人を選択して、「追加」ボタンをクリックします。
- 「保存」をクリックします。
この手順を他のグループについても同様に行います。
10. URL ポリシーを作成する
ここでは、次の 2 つのポリシーを作成します。
- policy1
- リソース
- http://my.test.domain.com:7023/agentsample/jsp/*
- http://my.test.domain.com:7023/agentsample/invokerservlet
- http://my.test.domain.com:7023/agentsample/protectedservlet
- http://my.test.domain.com:7023/agentsample/securityawareservlet
- http://my.test.domain.com:7023/agentsample/unprotectedservlet
- 対象: 認証済みユーザー
- policy2
- リソース
- http://my.test.domain.com:7023/agentsample/urlpolicyservlet
- 対象: customer グループのメンバー
1 つめのポリシーによって、リソースで定義された各 URL にアクセスするには
少なくとも、OpenSSO での認証をパスすることが必要となります。
その上で、アプリケーション側で設定されたポリシーに基づき、
ユーザーがどのグループに属するかによって最終的にアクセスの可否が決定されます。
また、2 つめのポリシーによって、customer グループのメンバーのみが、
http://my.test.domain.com:7023/agentsample/urlpolicyservlet へのアクセスを許可されます。
例えば、policy1 は次のような手順で作成します。
- "/ (最上位のレルム)" のリンクをクリックして、「ポリシー」タブをクリックします。
- 「新規ポリシー」ボタンをクリックします。
- 新規ポリシーページで、名前の欄に適当な値を入力します。ここでは、policy1 とします。
注: OpenSSO Enterprise 8.0 では、ポリシー名に日本語を使うとポリシーがうまく動作しません。
この問題は、課題4440で登録されていて、2009/02/14 の時点で修正されたため、それ以降にビルドされた OpenSSO では、ポリシー名に日本語を使えます。
- 次にルールセクションで、「新規」ボタンをクリックします。
- 「ルールのサービスタイプを選択」ページでは、「サービスタイプ」として「URL ポリシーエージェント」がデフォルトで選択されているので、そのままの状態で「次へ」をクリックします。
- 新規ルールのステップ 2 のページで、保護したい URL に関するルールを定義します。
- まず、名前を入力しますが、これはどのような名前でも構いません。ここでは、「JSP ページ」と入力します。
- 次に、プロテクトする URL のパターンを入力します。
「リソース名」フィールドに、http://my.test.domain.com:7023/agentsample/jsp/*
と入力します。
- 「アクション」のところで、GET と POST の両方のチェックボックスをクリックします。
- 「終了」ボタンをクリックします。
- 他の 4 つの URL についても手順 4 〜 9 を繰り返します。
- 5 つの URL についてルールの作成を終えたら、これらの URL パターンに対してアクセスを許可する対象を定義する必要があります。
対象セクションで、「新規」ボタンをクリックします。
- 「ステップ 1/2: 対象タイプを選択」ページで、「認証済みユーザー」を選択し、「次へ」ボタンをクリックします。
- 「ステップ 2/2: 対象タイプを選択」ページで、 名前フィールドに「認証済みユーザー」と入力し、「終了」ボタンをクリックします。
- これで、policy1 の設定が完了したので、最後に新規ポリシーページで「了解」ボタンをクリックします。
policy2 についても policy1 と概ね同じ手順で行いますが、以下の箇所については異なります。
- 新規ルールのステップ 2 のページで、「リソース名」フィールドに http://my.test.domain.com:7023/agentsample/urlpolicyservlet と入力します。
- 「ステップ 1/2: 対象タイプを選択」ページで、「OpenSSO アイデンティティー対象」を選択し、「次へ」ボタンをクリックします。
- 「ステップ 2/2: 新規対象 - OpenSSO アイデンティティー対象」ページで、名前フィールドに適当な値を入れます。
- フィルタで、「グループ」を選択し、その横の「検索」ボタンをクリックします。
- 「選択可能」ボックスに、既存のグループが表示されるので、customer を選んで、「追加」ボタンをクリックします。
2 つの URL ポリシーの作成が完了すると、次のような画面になっているはずです。
これで、必要な設定がすべて完了しました。
設定通りにポリシーが動作するかどうか、次のステップで検証してみます。
(長くなりましたので、別のページに書きます。)
Posted by hanaki
( 2月 20日 2009年, 11:39:54 午前 JST )
Permalink
Trackback URL: http://blogs.sun.com/hanaki/entry/j2ee_agent_3_0_%E3%82%92%E7%94%A8%E3%81%84%E3%81%A6