4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ひとり OpenAMAdvent Calendar 2016

Day 3

Policy AgentをApacheにインストールして、OpenAMと認証連携する

Last updated at Posted at 2016-12-02

今日やること

今日は昨日セットアップを行った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

おなじみの画面が表示されます。

002.PNG

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をクリックします。
003.PNG

ApplicationsからWeb Agentsをクリックします。

004.PNG

ちょっと、レガシーなUIに変わりましたね。
新規をクリックします。

005.PNG

先ほどの決めごとを入力し、作成をクリックします。
この時点で、Policy Agentの設定は完了です。

006.PNG

再びWeb Agentsの画面に戻りますので、先ほど作ったPolicy Agentの設定が作成されていることを確認し、クリックします。

007.PNG

画面の中段ぐらいにあるSSOのみモードというチェックボックスを有効にして、保存をクリックします。この設定はあまり気にしなくていいかと思いますが、簡単に言うと**「OpenAMが発行したCookieを持ってたらアクセスを許可するよ!」といった単純モード**みたいな感じです。適当ですみません。ただ、手っ取り早く試すにはこの設定がよいかと思います。

008.PNG

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)でサインインします。

image

サインインすると、再びhttps://web.example.com/にリダイレクトされて、おなじみのApacheの画面が表示されます。

image

うーん。地味だ(◞‸◟)

この時点で、デベロッパーコンソールで、クッキーの情報をみてみるとちゃんと.example.comドメインのドメインクッキーがセットされていることが確認できます。

image

まとめ

  • Policy AgentはApacheとかIISにインストールできる
  • 動かすにはモジュールのインストールとOpenAMへの設定の登録が必要
  • 動かすとApacheにアクセスするときには、必ずOpenAMで発行されたドメインクッキーが必要になる

明日はPolicy Agentの設定をちょっと触ってみたいと思います。

ばい!

4
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?