3 SAML
概要
SAML 2.0 認証 を使用して Zabbix にサインインできます。
SAML サインインが JIT ユーザープロビジョニングなしで設定されている場合、ユーザーは事前に Zabbix に存在している必要があります。ユーザーの Zabbix パスワードは認証には使用されません。 SAML 認証が成功すると、Zabbix は SAML から受信した username 属性を既存のローカル Zabbix ユーザー名と照合します。
ユーザープロビジョニング
SAMLユーザーに対して、JIT(just-in-time)ユーザープロビジョニングを設定できます。
この場合、ユーザーがZabbixに既に存在している必要はありません。
ユーザーがZabbixに初めてログインしたときに、ユーザーアカウントを作成できます。
JITプロビジョニングが有効な場合は、Authentication タブでプロビジョニング解除されたユーザー用のユーザーグループを指定する必要があります。
JITプロビジョニングに加えて、SCIM(System for Cross-domain Identity Management)プロビジョニングも有効化して設定できます。これは、ユーザープロビジョニングによって作成されたユーザーに対する継続的なユーザーアカウント管理です。
SCIMプロビジョニングでは、Zabbixへの認証に、Super admin権限を持つZabbix API token が必要です。
たとえば、ユーザーがあるSAMLグループから別の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. 秘密鍵と証明書は、カスタムパスが zabbix.conf.phpで指定されていない限り、 ui/conf/certs/に保存する必要があります。
デフォルトでは、Zabbixは次の場所を検索します。
- ui/conf/certs/sp.key - SP秘密鍵ファイル
- ui/conf/certs/sp.crt - SP証明書ファイル
- ui/conf/certs/idp.crt - IDP証明書ファイル
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 |
| 署名 | 対応するエンティティの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メディア属性(例: email)を、Zabbixユーザーメディアにマッピングします。 |
| SCIMプロビジョニングを有効にする | このチェックボックスを選択して、SCIM 2.0プロビジョニングを有効にします。 |
ZabbixへのサインインおよびユーザープロビジョニングのためのSAMLアイデンティティプロバイダーの設定例については、次を参照してください:
SCIMプロビジョニングに関する注意事項
SCIMプロビジョニングの場合、Zabbixフロントエンドへのパスを指定し、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)で設定できます。
- $SSO['SP_KEY'] = '<SP秘密鍵ファイルへのパス>';
- $SSO['SP_CERT'] = '<SP証明書ファイルへのパス>';
- $SSO['IDP_CERT'] = '<IDP証明書ファイルへのパス>';
- $SSO['SETTINGS']
$SSO['SETTINGS'] 配列は、SAML PHP Toolkit ライブラリ(Zabbixに付属)で想定されているものと同じ構造に従う必要があります。
利用可能な設定オプションの完全な説明については、公式のライブラリドキュメントを参照してください。
$SSO['SETTINGS'] の一部として設定できるのは、以下のオプションのみです。
- strict
- baseurl
- compress
- contactPerson
- organization
- sp(この一覧で指定されているオプションのみ)
- attributeConsumingService
- x509certNew
- idp(この一覧で指定されているオプションのみ)
- singleLogoutService(1つのオプションのみ)
- responseUrl
- certFingerprint
- certFingerprintAlgorithm
- x509certMulti
- singleLogoutService(1つのオプションのみ)
- security(この一覧で指定されているオプションのみ)
- signMetadata
- wantNameId
- requestedAuthnContext
- requestedAuthnContextComparison
- wantXMLValidation
- relaxDestinationValidation
- destinationStrictlyMatches
- rejectUnsolicitedResponsesWithInResponseTo
- signatureAlgorithm
- digestAlgorithm
- lowercaseUrlencoding
その他すべてのオプションはデータベースから取得され、上書きすることはできません。 debug オプションは無視されます。
さらに、Zabbix UIがプロキシまたはロードバランサーの背後にある場合は、カスタムの use_proxy_headers オプションを使用できます。
- false(デフォルト) - このオプションを無視します。
- true - ベースURLの構築に X-Forwarded-* HTTPヘッダーを使用します。
ロードバランサーを使用してZabbixインスタンスに接続しており、ロードバランサーではTLS/SSLを使用し、Zabbixでは使用していない場合は、'baseurl'、'strict'、'use_proxy_headers' パラメータを以下のように指定する必要があります。
$SSO['SETTINGS'] = [
'strict' => false,
'baseurl' => 'https://zabbix.example.com/zabbix/',
'use_proxy_headers' => true
];
設定例:
$SSO['SETTINGS'] = [
'security' => [
'signatureAlgorithm' => 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha384'
'digestAlgorithm' => 'http://www.w3.org/2001/04/xmldsig-more#sha384',
// ...
],
// ...
];
Kerberos/ADFS を使用した Webインターフェース の設定
Zabbix の Webインターフェース 設定ファイル(zabbix.conf.php)を使用して、Kerberos 認証と ADFS による 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