SAML
概要
SAML 2.0 認証を使用して Zabbix にサインインできます。
SAML サインインが JIT ユーザープロビジョニングなしで設定されている場合、ユーザーは事前に Zabbix に存在している必要があります。ユーザーの Zabbix パスワードは認証には使用されません。 SAML 認証が成功すると、Zabbix は SAML から受信した username 属性を既存のローカル Zabbix ユーザー名と照合します。
ユーザーのプロビジョニング
SAMLユーザーに対してJIT(ジャストインタイム)ユーザープロビジョニングを設定することができます。 この場合、Zabbixにユーザーがすでに存在している必要はありません。 ユーザーアカウントは、ユーザーが初めてZabbixにログインしたときに作成できます。
JITプロビジョニングが有効な場合、認証タブでプロビジョニング解除されたユーザー用のユーザーグループを指定する必要があります。
JITプロビジョニングに加えて、SCIM(System for Cross-domain Identity Management)プロビジョニング、つまりユーザープロビジョニングによって作成されたユーザーの継続的なユーザーアカウント管理を有効化および設定することも可能です。 SCIMプロビジョニングには、Zabbixへの認証のためにZabbixのAPIトークン(スーパ管理者権限付き)が必要です。
たとえば、ユーザーがあるSAMLグループから別のグループに移動された場合、Zabbixでもユーザーは一方のグループからもう一方のグループに移動されます。ユーザーがSAMLグループから削除された場合、Zabbixでもそのグループから削除され、他のグループに属していない場合はプロビジョニング解除されたユーザー用のユーザーグループに追加されます。
SCIMが有効かつ設定されている場合、SAMLユーザーはZabbixにログインした時点でプロビジョニングされ、その後SAMLの変更に基づいて継続的に更新されます。 すでに存在するSAMLユーザーはプロビジョニングされず、プロビジョニングされたユーザーのみが更新されます。 ユーザーがプロビジョニングまたは更新される際、有効なメディアのみがユーザーに追加されることに注意してください。
SCIMが有効でない場合、SAMLユーザーはZabbixにログインした時点でプロビジョニング(および後で更新)されます。
SAML認証が有効な場合、ユーザーはローカルログインまたはSAMLシングルサインオンのいずれかを選択できます。 JITプロビジョニングを使用する場合、シングルサインオンのみが可能です。
アイデンティティプロバイダーの設定
Zabbixで動作させるためには、SAMLアイデンティティプロバイダー(onelogin.com、auth0.com、okta.comなど)を以下のように設定する必要があります。
- Assertion Consumer URLには
<path_to_zabbix_ui>/index_sso.php?acsを設定します - Single Logout URLには
<path_to_zabbix_ui>/index_sso.php?slsを設定します
<path_to_zabbix_ui>の例: https://example.com/zabbix/ui,
http://another.example.com/zabbix, http://<any_public_ip_address>/zabbix
Zabbixの設定
WebインターフェースでSAML認証を使用する場合は、php-opensslをインストールする必要があります。
SAML認証を使用するには、Zabbixを次のように設定します。
1. SP秘密鍵と証明書を用意します。 WebインターフェースでSAMLを有効にするには、IdP証明書を指定(貼り付けまたはファイルを選択)する必要があります。 SignまたはEncryptオプションを選択する場合は、SP証明書とSP秘密鍵を指定する必要があります。
Webインターフェース設定ファイル(zabbix.conf.php)で$SSO['CERT_STORAGE'] = 'database'が設定されている場合、SAMLの設定中にWebインターフェースで証明書のテキストを貼り付けるか、証明書ファイルをアップロードできます。ファイルシステム上にファイルを用意する必要はありません。
設定ファイルで$SSO['CERT_STORAGE'] = 'file'が設定されている場合、証明書をファイルシステム上(デフォルトではui/conf/certs、または設定ファイルで設定したパス)で利用できるようにする必要があります。また、Webインターフェースは証明書をデータベースに保存しません。
$SSO['CERT_STORAGE']が設定されていないかコメントアウトされている場合は、ファイルストレージが使用されることに注意してください。
デフォルトでは、Zabbixは次の場所を検索します。
- ui/conf/certs/sp.key - SP秘密鍵ファイル
- ui/conf/certs/sp.crt - SP証明書ファイル
- ui/conf/certs/idp.crt - IDP証明書ファイル
証明書情報は、テキストを貼り付けるかファイルをアップロードすることで、Webインターフェースからインポートできます。
一部の環境では利便性のため暗号化されていないインポートも許可されていますが、暗号化された通信(たとえば、Zabbix WebインターフェースでHTTPS/TLSを有効にすること)を強く推奨します。
SAML証明書/鍵をデータベースに保存する場合は、アプリケーションとデータベース間の通信を保護するため、データベース接続でTLS/SSLを有効にしてください。
SAML証明書または秘密鍵が含まれる可能性のあるデータベースバックアップを暗号化し、バックアップファイルおよびSAML情報を保存するデータベーステーブルへのアクセスを制限してください。
データベースユーザーの権限は、必要最小限に制限してください。
2. 最も重要な設定はすべてZabbixのWebインターフェースで設定できます。 ただし、設定ファイルで追加設定を指定することもできます。

ZabbixのWebインターフェースで利用できる設定パラメータ:
| パラメータ | 説明 |
|---|---|
| SAML認証を有効にする | チェックボックスを選択して、SAML認証を有効にします。 |
| JITプロビジョニングを有効にする | チェックボックスを選択して、JITユーザープロビジョニングを有効にします。 |
| IDPエンティティID | SAMLアイデンティティプロバイダー内で一意のエンティティ識別子。 |
| SSOサービスURL | ログイン時にユーザーがリダイレクトされるURL。 |
| SLOサービスURL | ログアウト時にユーザーがリダイレクトされるURL。空欄の場合、SLOサービスは使用されません。 |
| ユーザー名属性 | Zabbixへのログイン時にユーザー名として使用するSAML属性。 サポートされる値の一覧は、アイデンティティプロバイダーによって決まります。 例: uid userprincipalname samaccountname username userusername urn:oid:0.9.2342.19200300.100.1.1 urn:oid:1.3.6.1.4.1.5923.1.1.1.13 urn:oid:0.9.2342.19200300.100.1.44 |
| SPエンティティID | 一意のサービスプロバイダー識別子(一致しない場合、操作は拒否されます)。 URLまたは任意の文字列データを指定できます。 |
| SP name ID形式 | 応答で特定のname ID形式を要求します。 例: urn:oasis:names:tc:SAML:2.0:nameid-format:persistent urn:oasis:names:tc:SAML:2.0:nameid-format:unspecified urn:oasis:names:tc:SAML:2.0:nameid-format:transient |
| IdP証明書 | SAMLシングルサインオン(SSO)サービス設定に使用するサービスプロバイダー(SP)証明書の内容。 |
| SP秘密鍵 | SAMLシングルサインオン(SSO)サービス設定に使用するサービスプロバイダー(SP)秘密鍵の内容。アイデンティティプロバイダー(IdP)との安全な認証およびデータ交換を提供します。 |
| SP証明書 | SAMLシングルサインオン(SSO)サービス設定に使用するサービスプロバイダー(SP)証明書の内容。 |
| 署名 | SAML署名を有効にするエンティティを選択するには、チェックボックスを選択します。 メッセージ アサーション AuthNリクエスト ログアウトリクエスト ログアウトレスポンス |
| 暗号化 | SAML暗号化を有効にするエンティティを選択するには、チェックボックスを選択します。 Name ID アサーション |
| 大文字と小文字を区別するログイン | ユーザー名の大文字と小文字を区別するログインを無効にするには、チェックボックスの選択を解除します(デフォルトでは有効)。 大文字と小文字を区別するログインを無効にすると、たとえばZabbixユーザーが「Admin」または「ADMIN」であっても、「admin」としてログインできます。 大文字と小文字を区別するログインが無効で、類似したユーザー名(例:Adminとadmin)を持つZabbixユーザーが複数存在する場合、それらのユーザーのログインは常に次のエラーメッセージで拒否されることに注意してください:"Authentication failed: supplied credentials are not unique." |
| JITプロビジョニングを設定する | このチェックボックスを選択すると、JITユーザープロビジョニングに関連するオプションが表示されます。 |
| グループ名属性 | JITユーザープロビジョニングに使用するグループ名属性を指定します。 |
| ユーザー名属性 | JITユーザープロビジョニングに使用するユーザー名属性を指定します。 |
| ユーザー姓属性 | JITユーザープロビジョニングに使用するユーザーの姓属性を指定します。 |
| ユーザーグループマッピング | SAMLユーザーグループのパターンをZabbixユーザーグループおよびユーザーロールにマッピングします。 プロビジョニングされたユーザーにZabbixで付与するユーザーグループ/ロールを決定するために必要です。 マッピングを追加するには、追加をクリックします。 SAMLグループパターンフィールドではワイルドカードを使用できます。グループ名は既存のグループと一致する必要があります。 SAMLユーザーが複数のZabbixユーザーグループに一致する場合、そのユーザーはすべてのグループのメンバーになります。 ユーザーが複数のZabbixユーザーロールに一致する場合、それらの中で最も高い権限レベルが付与されます。 |
| メディアタイプマッピング | 通知の送信に使用するユーザーのSAMLメディア属性(例:メールアドレス)をZabbixユーザーメディアにマッピングします。 |
| SCIMプロビジョニングを有効にする | このチェックボックスを選択して、SCIM 2.0プロビジョニングを有効にします。 |
次のアイデンティティプロバイダーを使用して、Zabbixへのサインインおよびユーザープロビジョニング用にSAMLを設定する例を参照してください。
SCIMプロビジョニングに関する注意事項
SCIMプロビジョニングでは、IDプロバイダー側でZabbixのWebインターフェースへのパスを指定し、api_scim.phpを追加します。例:
https://<path-to-zabbix-ui>/api_scim.php
Zabbixで使用するユーザー属性(ユーザー名、ユーザーの名、ユーザーの姓、メディア属性)はカスタム属性として追加する必要があります。また、必要に応じて、外部名前空間はユーザースキーマと同じにします: urn:ietf:params:scim:schemas:core:2.0:User。
高度な設定
追加のSAMLパラメータは、ZabbixのWebインターフェース設定ファイル(zabbix.conf.php)で設定できます。
設定例
例1: TLS/SSLを使用するロードバランサー経由でZabbixインスタンスに接続する
ロードバランサーを使用してZabbixインスタンスに接続し、ロードバランサーではTLS/SSLを使用する一方でZabbixでは使用しない場合は、baseurl、strict、use_proxy_headersパラメータを次のように指定します。
$SSO['SETTINGS'] = [
'strict' => false,
'baseurl' => 'https://zabbix.example.com/zabbix/',
'use_proxy_headers' => true
];
例2: カスタムSAML署名およびダイジェストアルゴリズムを設定する
$SSO['SETTINGS'] = [
'security' => [
'signatureAlgorithm' => 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha384'
'digestAlgorithm' => 'http://www.w3.org/2001/04/xmldsig-more#sha384',
// ...
],
// ...
];
例3: ADFSを使用してKerberos認証によるSSOを設定する
$SSO['SETTINGS'] = [
'security' => [
'requestedAuthnContext' => [
'urn:oasis:names:tc:SAML:2.0:ac:classes:Kerberos',
],
'requestedAuthnContextComparison' => 'exact'
]
];
この場合、SAML設定のSP name IDフィールドに次の値を設定します。
urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified