はじめに
本記事は、OpenAM/OpenIGを使用したシングルサインオン環境の構築という記事から続く関連記事の一部です
既にOpenAMが構築しApacheやIIS用のエージェント方式の設定を行ってあることを前提に、Nginx用のWeb Policy Agentの導入を目指す。
この記事の意味
実はForgerockから公式に提供されているWeb Policy AgentはApacheやIIS用のみであり、Nginx用は公開されていない。
※要望はあがっているみたいなので、そう遠くない未来にいつか作られると思う
ただし、OpenAMのSDKを使ってNginx用のWeb Policy Agentおよび連携できるNginxをOSSとして開発/公開してくれている方もとい神がいらっしゃるため、神に感謝の意を唱えながら、ありがたく使わせてもらい、今後需要が多いであろうNginxにおけるWeb Policy Agentの導入方法を説明します。
※基本的なやることはApache用のWeb Policy Agentと変わらないので、明らかに異なる作業箇所だけ説明をします。
前提
- 既にOpenAMはインストール済であること
- OpenAMがインストールされているサーバはCentOS7.3を想定
- OpenAMは無料で手に入る中では最新のv13.0を使用
- 同一ホスト内のNginxをSPとする
- 検証目的の構成を行う
環境
- サーバOS: CentOS7.3
- ホスト名: sso.test.local
- IPアドレス: 172.16.1.130
- JDK Ver: 1.8.0_111
- Tomcat Ver: 8.0.39
- OpenAM Ver: 13.0.0
構築作業
ダウンロードとインストール
以下のDonwloadから必要なアーキテクチャのバイナリをダウンロード
https://github.com/hamano/nginx-mod-am
基本的にはREADMEに書かれている通りなので、正直ここに書かなくても良さそうなものなんだけど、一応メモ程度に・・・
公開されているのは、Web Policy Agentだけでなく、それを使えるように改良された専用のnginxバイナリも同梱されている。
つまり、yumとかでインストールしたnginxにWeb Policy Agentをインストールしてあげる・・・といったものではない。
※Apacheとかはその形なんだけど、この場合は違う
なので、まずは展開 => 配置 => systemdへの登録など、一連の流れを下記に。
[root@sso ~]# wget https://www.osstech.co.jp/download/hamano/nginx/nginx_agent_20141119.el7.x86_64.zip
[root@sso ~]# unzip nginx_agent_20141119.el7.x86_64.zip
[root@sso ~]# mv nginx_agent /opt/nginx
[root@sso ~]# useradd nginx
[root@sso ~]# chown nginx:nginx -R /opt/nginx
[root@sso ~]# vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
[Service]
User=nginx
Type=forking
PIDFile=/opt/nginx/logs/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=sudo /usr/bin/rm -f /opt/nginx/logs/nginx.pid
ExecStartPre=sudo /opt/nginx/bin/nginx -t -c /opt/nginx/conf/nginx.conf
ExecStart=sudo /opt/nginx/bin/nginx -c /opt/nginx/conf/nginx.conf
ExecReload=sudo /bin/kill -s HUP $MAINPID
ExecStop=sudo /bin/kill -s TERM $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
WorkingDirectory=/opt/nginx/
[Install]
WantedBy=multi-user.target
[root@sso ~]# systemctl daemon-reload
ポート80で動作させるにはroot権限が必要になる。そのためsudoを利用している。
sudoがない場合、上記のnginx.serviceの中でUser=nginxとしてしまっているがために、systemctk start nginxとしようとしても失敗してしまう。
rootで動かすことに抵抗がないのであれば、User=nginxの行と全体的にsudoは削除してしまって良い。
また、その場合、nginx.confでuser nginx;
を設定を追加すれば、worker processはnginxユーザで動作するようになる。
ただし、master prodessはrootなので、そこもnginxで動かしたい場合は、nginx.serviceは上記のままで、下記のようにsudoersを変更する必要がある。
[root@sso ~]# visudo
# insert
nginx ALL=(root) NOPASSWD:/opt/nginx/bin/*,/usr/bin/rm,/bin/kill
OpenAM側での設定
ApacheのWeb Policy Agentの設定と全く同じなので割愛します。
結局のところ、接続しに来るエージェントがApacheのものなのか、Nginxなのかってだけで、OpenAM側がやることは全く変わらないので、特に変化はない。
エージェントのインストール
[root@sso ~]# /opt/nginx/bin/agentadmin.sh
※聞かれる内容は。ApacheのWeb Policy Agentとほぼ同じなので割愛