SAML

概要

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

SAMLサインインのみが設定されている場合、ユーザーはZabbixにも存在している必要がありますが、そのZabbixパスワードは使用されません。 認証が成功すると、ZabbixはSAMLから返されたユーザー名属性とローカルのユーザー名を照合します。

ユーザーのプロビジョニング

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" としてログインできます。
なお、大文字小文字を区別しないログインが無効で、類似したユーザー名を持つZabbixユーザーが複数存在する場合(例: Admin と admin)、それらのユーザーのログインは常に次のエラーメッセージで拒否されます: "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