3 SAML

概要

SAML 2.0 認証 を使用して Zabbix にサインインできます。

JIT ユーザープロビジョニングなしで SAML サインインが設定されている場合、ユーザーは事前に 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への認証にZabbixのAPI token(Super admin権限付き)が必要です。

例えば、ユーザーがあるSAMLグループから別のSAMLグループに移動された場合、そのユーザーはZabbixでもあるグループから別のグループに移動されます。
ユーザーがSAMLグループから削除された場合、そのユーザーはZabbix内の該当グループからも削除され、他のどのグループにも属していなければ、プロビジョニング解除されたユーザー用のユーザーグループに追加されます。

SCIMが有効化および設定されている場合、SAMLユーザーはZabbixにログインした時点でプロビジョニングされ、その後はSAMLの変更に基づいて継続的に更新されます。
すでに存在するSAMLユーザーはプロビジョニングされず、プロビジョニングされたユーザーのみが更新されます。
また、ユーザーがプロビジョニングまたは更新される際に、ユーザーには有効なメディアのみが追加される点に注意してください。

SCIMが有効でない場合、SAMLユーザーはZabbixにログインした時点でプロビジョニングされます(その後、ログイン時に更新されます)。

SAML認証が有効な場合、ユーザーはローカルログインとSAMLシングルサインオンのどちらかを選択してログインできます。
JITプロビジョニングを使用する場合は、シングルサインオンのみ可能です。

IDプロバイダーの設定

Zabbixで動作させるには、SAML IDプロバイダー(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プロビジョニングでは、IDプロバイダー側でZabbix Webインターフェースへのパスを指定し、その末尾に api_scim.php を追加します。例:

https://<path-to-zabbix-ui>/api_scim.php

Zabbixで使用されるユーザー属性(username、user name、user lastname、およびメディア属性)は、カスタム属性として追加する必要があります。必要に応じて、外部名前空間はユーザースキーマ 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
  • 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