Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

OpenAM Web Policy Agent for Nginx 導入について

More than 3 years have passed since last update.

はじめに

本記事は、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とほぼ同じなので割愛

参考

非常に感謝です。
https://github.com/hamano/nginx-mod-am

gzock
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away