今日やること
今日は昨日セットアップを行ったOpenAMと別のサーバー上のApacheの間で認証連携をします。もちろん、ApacheにはOpenAMと連携する機能はありませんので、Policy Agentと呼ばれるモジュールをApacheにインストールし、これを実装します。
Policy Agentってなに?
Policy AgentはApacheやIISなどのWebサーバーにインストールすることで、OpenAMと認証連携をすることができるモジュールとなります。
大雑把な動きはOpenAM Web Policy Agent User's Guideにある図がわかりやすいです。
Policy AgentはWeb Client(ブラウザ)からのリクエストをフックして、OpenAMで認証済みかどうかを確認するような動きをします。OpenAMで認証済みかどうかの識別にはドメインクッキーを使用しています。
そのほかにも様々なポリシー情報を参照し、細かいアクセス制御を実装することができます。このあたりの方法については、後日取り扱います。(たぶん)
Policy Agentでできること
簡単にPolicy AgentをWebサーバーにインストールしてできることをピックアップしてみました。
- OpenAMで認証後、Webサーバー上のアプリケーションにアクセスできる(≒SSO)
- 認証したユーザーの属性情報の連携ができる
- 連携した情報を使って認証できたことにする
- 連携した情報を使ってアプリケーションを動かす
- WebサーバーのURL毎にアクセス制御ができる
- ユーザーの属性情報(所属とか役職とか)で制御する
- どんな認証を経たかで制御する
- コンディション(アクセス時間とか)で制御する
- など
- OpenAMで認証しなくてもアクセスできるURLの指定ができる
- Webサーバーの特定のリンクを踏むと、サインアウトできる
他にもありますが、実際に使うのはこのあたりだと思います。
Policy Agentの種類
サポートされているWebサーバーは以下のようなものがあります。
- Apache 2.2/2.4
- IIS 7/7.5/8
ApacheはWindows版でも動くみたいですね~。あんまり見たことないですが...
(参考:Supported Operating Systems & Web Servers)
Apacheの準備
それではやっていきましょう。
環境
OpenAMをセットアップしたサーバーとは別のサーバーを使用します。
- OS
- CentOS 6.8 (Vagrant)
- メモリ
- 512MB
- FQDN
- web.example.com
Apache のインストール
yumでApacheをインストールします。
$ sudo yum -y install httpd mod_ssl
hostsの設定
OpenAMとPolicy AgentはFQDNを使って通信をするみたいなので、双方で名前解決ができるようにする必要があります。昨日、セットアップを行ったOpenAMのサーバーでも忘れずにhostsの設定を行いましょう。
$ diff /etc/hosts{,.org}
3,4d2
< 192.168.33.10 iam.example.com
< 192.168.33.20 web.example.com
hostnameを設定
気持ち悪いので変えておきます。
$ sudo hostname web.example.com
設定の方も変えておきます。
$ sudo diff /etc/sysconfig/network{,.org}
2,3c2
< #HOSTNAME=localhost.localdomain
< HOSTNAME=web.example.com
---
> HOSTNAME=localhost.localdomain
Apache を起動して、確認する
Apacheを起動して、ブラウザからアクセスしてみます。
$ sudo service httpd start
おなじみの画面が表示されます。
Policy Agentのインストール
それでは、Policy Agentをインストールします。
決めごと
Policy Agentをインストールする前に以下のパラメータを決めておきます。
- Policy Agentの名前
- OpenAMがPolicy Agentを識別するためのIDみたいなもの
- 本記事では
WebPolicyAgentForApache22
とします
- Policy Agentのパスワード
- 上記のIDみたいなやつのパスワード
- 本記事では
password
とします
- OpenAMが動いているサイトのURL
- 本記事では
https://iam.example.com:443/openam
- 本記事では
- Apacheが動いているサイトのURL
- 本記事では
https://web.example.com:443
- 本記事では
OpenAM側にPolicy Agentの設定をつくる
まず、ブラウザを立ち上げて、OpenAM(https://iam.example.com/openam
)にアクセスし、管理者ユーザー(ユーザー名はamadmin
)でログインします。
ログイン後、Top Level Realmをクリックします。
ApplicationsからWeb Agentsをクリックします。
ちょっと、レガシーなUIに変わりましたね。
新規をクリックします。
先ほどの決めごとを入力し、作成をクリックします。
この時点で、Policy Agentの設定は完了です。
再びWeb Agentsの画面に戻りますので、先ほど作ったPolicy Agentの設定が作成されていることを確認し、クリックします。
画面の中段ぐらいにあるSSOのみモードというチェックボックスを有効にして、保存をクリックします。この設定はあまり気にしなくていいかと思いますが、簡単に言うと**「OpenAMが発行したCookieを持ってたらアクセスを許可するよ!」といった単純モード**みたいな感じです。適当ですみません。ただ、手っ取り早く試すにはこの設定がよいかと思います。
Policy Agentのダウンロード
なんだか最近になって、Forgerock CommunityからNightly Buildのダウンロードができなくなってるみたいですね~。今回は下記のURLからサブスクリプションが不要のバージョン(4.0.0)をダウンロードします。
ダウンロード後のファイルは下記のディレクトリに配置している状態からインストールをはじめます。
$ ls ~
Apache_v22_Linux_64bit_4.0.0.zip
Policy Agentの解凍
解凍します。
$ sudo unzip ~/Apache_v22_Linux_64bit_4.0.0.zip -d /opt/
パスワードファイルの生成
決めごとで決めたパスワードを含むファイルをつくります。
$ echo password > /tmp/password.txt
Policy Agentのインストール
インストールのプログラムを実行します。--i
オプションが必要です。
$ sudo /opt/web_agents/apache22_agent/bin/agentadmin --i
インタラクティブなインストーラーなので、質問に答えていきます。
まず、ライセンスアグリーメントです。
Do you completely agree with all the terms and conditions
of this License Agreement (yes/no): [no]: yes
Apacheの設定ファイルの所在を聞かれるので、指定します。
Enter the complete path to the httpd.conf file which is used by Apache HTTP
Server to store its configuration.
[ q or 'ctrl+c' to exit ]
Configuration file [/opt/apache/conf/httpd.conf]: /etc/httpd/conf/httpd.conf
既存の設定ファイルがある場合は入力を促されます。今回はないので、Enterで無視します。
To set properties from an existing configuration enter path to file
[ q or 'ctrl+c' to exit, return to ignore ]
Existing OpenSSOAgentBootstrap.properties file:
次に決めごとで決めた、OpenAMが動いているサイトのURLを入力します。
Enter the URL where the OpenAM server is running. Please include the
deployment URI also as shown below:
(http://openam.example.com:58080/openam)
[ q or 'ctrl+c' to exit ]
OpenAM server URL: https://iam.example.com:443/openam
これまた決めごとで決めた、Apacheが動いているサイトのURLを入力します。
Enter the Agent URL as shown below:
(http://agent.example.com:1234)
[ q or 'ctrl+c' to exit ]
Agent URL: https://web.example.com:443
次も決めごとで決めたPolicy Agentの名前と、OpenAMのRealm名、パスワードファイルのパスを入力します。Realm名というのは初出ですが、今回は何も考えずEnterを押しておいてください。簡単(適当)にいうと、OpenAMにはツリー構造をとれる領域みたいなのがあるようで、領域ごとに個別の認証設定を展開できるみたいです。Enterを押すと、そのツリー構造の最上位のレルムが指定されるようです。
Enter the Agent profile name
[ q or 'ctrl+c' to exit ]
Agent Profile name: WebPolicyAgentForApache22
Enter the Agent realm/organization
[ q or 'ctrl+c' to exit ]
Agent realm/organization name: [/]:
Enter the path to a file that contains the password to be used
for identifying the Agent
[ q or 'ctrl+c' to exit ]
The path and name of the password file: /tmp/pwd.txt
Enter the path to a file that contains the password to be used
for identifying the Agent
[ q or 'ctrl+c' to exit ]
The path and name of the password file: /tmp/password.txt
最後にパラメータの確認が表示されます。内容に問題がないことを確認し、Enterをおします。
Installation parameters:
OpenAM URL: https://iam.example.com:443/openam
Agent URL: https://web.example.com:443
Agent Profile name: WebPolicyAgentForApache22
Agent realm/organization name: /
Agent Profile password source: /tmp/password.txt
Confirm configuration (yes/no): [no]: yes
以下のようなログが表示されたら完了です。
Validating...
Validating... Success.
Cleaning up validation data...
Creating configuration...
Installation complete.
少し余談ですが、インストール時にApacheに変更が加えられます。差分は以下の通りです。
ApacheのモジュールがLoadされて、モジュールが必要な設定ファイルがIncludeされてるって感じですね~。
/httpd/conf/httpd.conf{,_amagent_20161201151934}
1010,1015d1009
<
<
< LoadModule amagent_module /opt/web_agents/apache22_agent/bin/../lib/mod_openam.so
< AmAgent On
< AmAgentConf /opt/web_agents/apache22_agent/bin/../instances/agent_1/config/agent.conf
<
なので、Apacheは再起動してあげましょう。
$ sudo service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
動作確認
では、動作確認しますね~。
ブラウザを立ち上げて、https://web.example.com/
にアクセスします。
すると、https://iam.example.com/openam/XUI/?goto=https%3A%2F%2Fweb.example.com%3A443%2F#login/
にリダイレクトされて、OpenAMのサインイン画面が表示されます。
ここでは、デモユーザー(ユーザー名はdemo
、パスワードはchangeit
)でサインインします。
サインインすると、再びhttps://web.example.com/
にリダイレクトされて、おなじみのApacheの画面が表示されます。
うーん。地味だ(◞‸◟)
この時点で、デベロッパーコンソールで、クッキーの情報をみてみるとちゃんと.example.com
ドメインのドメインクッキーがセットされていることが確認できます。
まとめ
- Policy AgentはApacheとかIISにインストールできる
- 動かすにはモジュールのインストールとOpenAMへの設定の登録が必要
- 動かすとApacheにアクセスするときには、必ずOpenAMで発行されたドメインクッキーが必要になる
明日はPolicy Agentの設定をちょっと触ってみたいと思います。
ばい!