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.comauth0.comokta.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 秘密鍵を指定する必要があります。

zabbix.conf.php$SSO['CERT_STORAGE'] = 'database' が設定されている場合、SAML 設定時に Webインターフェースで証明書テキストを貼り付けるか、証明書ファイルをアップロードできます。ファイルシステム上にファイルを用意する必要はありません。

zabbix.conf.php$SSO['CERT_STORAGE'] = 'file' が設定されている場合、証明書はファイルシステム上で利用可能にする必要があります(既定では ui/conf/certs、または zabbix.conf.php で設定されたパス)。この場合、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インターフェースで利用可能な設定パラメータ:

Parameter Description
Enable SAML authentication チェックボックスをオンにすると、SAML 認証を有効にします。
Enable JIT provisioning チェックボックスをオンにすると、JIT ユーザープロビジョニングを有効にします。
IDP entity ID SAML アイデンティティプロバイダー内の一意のエンティティ識別子。
SSO service URL ログイン時にユーザーがリダイレクトされる URL。
SLO service URL ログアウト時にユーザーがリダイレクトされる URL。空欄の場合、SLO サービスは使用されません。
Username attribute 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 entity ID サービスプロバイダーの一意の識別子(一致しない場合、操作は拒否されます)。
URL または任意の文字列を指定できます。
SP name ID format 応答で特定の 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 certificate SAML シングルサインオン(SSO)サービス設定用のサービスプロバイダー(SP)証明書の内容。
SP private key SAML シングルサインオン(SSO)サービス設定用のサービスプロバイダー(SP)秘密鍵の内容。アイデンティティプロバイダー(IdP)との安全な認証とデータ交換を提供します。
SP certificate SAML シングルサインオン(SSO)サービス設定用のサービスプロバイダー(SP)証明書の内容。
Sign SAML 署名を有効にする対象を選択するには、チェックボックスをオンにします:
Messages
Assertions
AuthN requests
Logout requests
Logout responses
Encrypt SAML 暗号化を有効にする対象を選択するには、チェックボックスをオンにします:
Name ID
Assertions
Case-sensitive login ユーザー名の大文字小文字を区別するログインを無効にするには、チェックボックスをオフにします(既定では有効)。
大文字小文字を区別しないログインを無効にすると、たとえば Zabbix ユーザーが "Admin" または "ADMIN" であっても "admin" としてログインできます。
なお、大文字小文字を区別しないログインが無効で、類似したユーザー名(例: Admin と admin)を持つ Zabbix ユーザーが複数存在する場合、それらのユーザーのログインは常に次のエラーメッセージで拒否されます: "Authentication failed: supplied credentials are not unique."
Configure JIT provisioning このチェックボックスをオンにすると、JIT ユーザープロビジョニングに関連するオプションが表示されます。
Group name attribute JIT ユーザープロビジョニング用のグループ名属性を指定します。
User name attribute JIT ユーザープロビジョニング用のユーザー名属性を指定します。
User last name attribute JIT ユーザープロビジョニング用の姓属性を指定します。
User group mapping SAML ユーザーグループのパターンを Zabbix のユーザーグループおよびユーザー権限にマッピングします。
これは、プロビジョニングされたユーザーが Zabbix でどのユーザーグループ/権限を取得するかを決定するために必要です。
マッピングを追加するには Add をクリックします。
SAML group pattern フィールドはワイルドカードをサポートします。グループ名は既存のグループと一致する必要があります。
SAML ユーザーが複数の Zabbix ユーザーグループに一致する場合、そのユーザーはそれらすべてのメンバーになります。
ユーザーが複数の Zabbix ユーザー権限に一致する場合、そのユーザーはそれらの中で最も高い権限レベルを取得します。
Media type mapping 通知送信用に、ユーザーの SAML メディア属性(例: email)を Zabbix のユーザーメディアにマッピングします。
Enable SCIM provisioning このチェックボックスをオンにすると、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'] 配列は、Zabbix に付属する SAML PHP Toolkit ライブラリが想定するのと同じ構造に従う必要があります。 利用可能な設定オプションの詳細については、公式の ライブラリドキュメント を参照してください。

$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 側が使用しない場合は、baseurlstrictuse_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