見出し画像

ZabbixにAzure ADのアカウントでログインさせる

Zabbix5.0がSAML対応したので、構築してみたメモ
SAML周りは初めてやってみましたが、結構簡単にできました。
ただPHPやApacheのバージョンによってはログアウトできなくなるという症状にみまわれたので、そのあたりもトラブルシューティングしてます。

用意するもの

Zabbix5.0以上(SSL化しておいてください)
Azure ADのテナントというかAzureのサブスクリプション

実験環境

zabbix_server 5.0.2
PHP 7.2.24
Apache 2.4.37
CentOS Linux release 8.2.2004

Azure Active Directoryでのエンタープライズアプリケーションの登録

1.AzureAD→エンタープライズアプリケーション→新しいアプリケーションをクリックしてギャラリー以外のアプリケーションを開きます。

新しいアプリケーション

2.独自のアプリケーションの追加画面で新しいアプリケーションの表示名にZabbixと入力し追加をクリックします。

独自のアプリケーションの追加

3.概要画面に遷移するので、そちらの1.ユーザとグループの割り当てからログインできるユーザを選択します。

画像3

ユーザ

4.概要画面に戻りシングルサインオンの設定をクリックしてSAML設定画面を開きます。

画像4

5.SAMLによるシングルサインオンのセットアップで以下のパラメータを入力してください。識別子は極端な話なんでもいいのですがZabbix側と合わせる必要があります。
・識別子(エンティティID):https://<ZabbixURL>/sp
・応答URL:https://<ZabbixURL>/index_sso.php?acs
・ログアウトURL:https://<ZabbixURL>/index_sso.php?sls

基本的なSAML構成

6.ユーザ属性とクレームに以下のパラメータを入力。一意のユーザIDは最初から入力されておりますので、aliasとnameを追加すればOKです。
・一意のユーザID:user.userprincipalname
・alias:user.userprincipalname
・name:user.userprincipalname

ユーザ属性とクレーム

7.SAML署名証明書から証明書(Base64)をダウンロードして保存しといてください。

SAML認証署名

8.Zabbixのセットアップの画面から表示される以下のパラメータをコピーしておいてください
・ログインURL
・Azure AD 識別子
・ログアウトURL

Zabbixのセットアップ

Zabbix側のSAML設定

1.ZabbixにSSHログインして/usr/share/zabbix/conf/certs/へ移動しidp.crtファイルを作成します。先ほどダウンロードした証明書(Base64)をそのままコピーしてください

[root@Zabbix zabbix]# cd /usr/share/zabbix/conf/certs/
[root@Zabbix certs]#vi idp.crt
[root@Zabbix certs]#chmod 644 idp.crt
[root@Zabbix certs]# ls -la
total 4
drwxr-xr-x 2 root root   21 Sep  8 13:41 .
drwxr-xr-x 3 root root   50 Aug  9 14:30 ..
-rw-r--r-- 1 root root 1077 Aug  9 17:28 idp.crt

1.Zabbixにログインして認証→SAML認証の設定へ移動し、下記のパラメータを入力します。
IdPエンティティID:ZabbixのセットアップでコピーしたAzureAD識別子
SSOサービスURL:ZabbixのセットアップでコピーしたログインURL
SLOサービスURL:ZabbixのセットアップでログアウトURL
ユーザ名の属性:alias
SPのエンティティID:https://<ZabbixURL>/sp
※基本的なSAML構成で設定した識別子と合わせる

画像9

3.ログインするユーザを作成します。エイリアスはAzureADに登録してアプリケーションのログイン許可のあるユーザのUserPrincipalNameを入力してください。パスワードの入力も必須ですがSAMLログインには使用しませんん。

画像10

テスト

ログイン画面にSAMLログイン用のリンクが現れるので
こんな感じにログインできるようになります。

トラブルシューティング

テスト環境ではうまくいったのですが、本番環境におんなじことやるとログアウトできないというトラブルにみまわれました。
SAMLのパケット追った結果ChromeのCookieのSameSite属性がNone→Laxになったことが原因ぽくて、ApacheにConfigを追加することで解決しました。

<ifmodule mod_headers.c>
Header always edit Set-Cookie (.*) "$1; secure; SameSite=none"
</ifmodule>

このあたり参考になるかも


いいなと思ったら応援しよう!