[comment]: # ({840f7138-70beca7a})
# 3 SAML

[comment]: # ({/840f7138-70beca7a})

[comment]: # ({15eb0913-455714b6})
#### 概要

SAML 2.0 [認証](/manual/web_interface/frontend_sections/users/authentication)を使用してZabbixにサインインできます。

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

[comment]: # ({/15eb0913-455714b6})

[comment]: # ({68d8ad6e-85c848c9})
#### ユーザーのプロビジョニング

SAMLユーザーに対してJIT（ジャストインタイム）**ユーザープロビジョニング**を設定することができます。
この場合、Zabbixにユーザーがすでに存在している必要はありません。
ユーザーアカウントは、ユーザーが初めてZabbixにログインしたときに作成できます。

:::noteimportant
JITプロビジョニングが有効な場合、*認証*タブでプロビジョニング解除されたユーザー用のユーザーグループを指定する必要があります。
:::

JITプロビジョニングに加えて、SCIM（System for Cross-domain Identity Management）プロビジョニング、つまりユーザープロビジョニングによって作成されたユーザーの*継続的な*ユーザーアカウント管理を有効化および設定することも可能です。
SCIMプロビジョニングには、Zabbixへの認証のためにZabbixの[APIトークン](/manual/web_interface/frontend_sections/users/api_tokens)（スーパ管理者権限付き）が必要です。

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

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

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

::: noteclassic
SAML認証が有効な場合、ユーザーはローカルログインまたはSAMLシングルサインオンのいずれかを選択できます。
JITプロビジョニングを使用する場合、シングルサインオンのみが可能です。
:::

[comment]: # ({/68d8ad6e-85c848c9})

[comment]: # ({c7c79a94-4cca45cd})
#### アイデンティティプロバイダーの設定

Zabbixで動作させるためには、SAMLアイデンティティプロバイダー([onelogin.com](https://onelogin.com)、[auth0.com](https://auth0.com)、[okta.com](https://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`

[comment]: # ({/c7c79a94-4cca45cd})

[comment]: # ({ec310c67-274513e2})
#### Zabbixの設定

::: noteimportant
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証明書ファイル

::: noteimportant
証明書の素材は、テキストを貼り付けるかファイルをアップロードすることで、Webインターフェースから取り込めます。  
一部の環境では利便性のために暗号化されていない取り込みも許可されていますが、[暗号化](/manual/encryption)された通信を強く推奨します（たとえば、ZabbixのWebインターフェースでHTTPS/TLSを有効にします）。  
SAML証明書/鍵がデータベースに保存される場合は、アプリケーションとデータベース間の通信を保護するために、データベース接続で[TLS/SSLを有効化](/manual/appendix/install/db_encrypt)してください。<br>
SAML証明書や秘密鍵を含む可能性のあるデータベースバックアップは暗号化し、バックアップファイルおよびSAML素材を保存するデータベーステーブルへのアクセスを制限してください。  
データベースユーザーの権限は、必要最小限に制限してください。
:::

2\. 重要な設定のほとんどは、ZabbixのWebインターフェースで設定できます。  
ただし、追加設定を[設定ファイル](#advanced-settings)で指定することも可能です。

![](../../../../../../assets/en/manual/web_interface/frontend_sections/users/auth_saml.png){width="600"}

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属性です。<br>サポートされる値の一覧は、アイデンティティプロバイダーによって決まります。<br><br>例:<br>uid<br>userprincipalname<br>samaccountname<br>username<br>userusername<br>urn:oid:0.9.2342.19200300.100.1.1<br>urn:oid:1.3.6.1.4.1.5923.1.1.1.13<br>urn:oid:0.9.2342.19200300.100.1.44|
|*SP entity ID*|一意のサービスプロバイダー識別子です（一致しない場合、操作は拒否されます）。<br>URLまたは任意の文字列を指定できます。|
|*SP name ID format*|応答で特定の name ID 形式を要求します。<br><br>例:<br>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent<br>urn:oasis:names:tc:SAML:2.0:nameid-format:unspecified<br>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署名を有効にする対象を選択します:<br>*Messages*<br>*Assertions*<br>*AuthN requests*<br>*Logout requests*<br>*Logout responses*|
|*Encrypt*|チェックボックスをオンにして、SAML暗号化を有効にする対象を選択します:<br>*Name ID*<br>*Assertions*|
|*Case-sensitive login*|チェックボックスをオフにすると、ユーザー名の大文字小文字を区別するログインを無効にします（デフォルトでは有効）。<br>大文字小文字を区別しないログインを無効にすると、たとえばZabbixユーザーが "Admin" または "ADMIN" であっても "admin" としてログインできます。<br>なお、大文字小文字を区別しないログインが無効で、類似したユーザー名（例: 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ユーザーグループおよびユーザーロールにマッピングします。<br>これは、プロビジョニングされたユーザーにZabbixでどのユーザーグループ/ロールが割り当てられるかを決定するために必要です。<br>マッピングを追加するには *Add* をクリックします。<br>*SAML group pattern* フィールドはワイルドカードをサポートします。グループ名は既存のグループと一致する必要があります。<br>SAMLユーザーが複数のZabbixユーザーグループに一致する場合、そのユーザーはそれらすべてのメンバーになります。<br>ユーザーが複数のZabbixユーザーロールに一致する場合、そのユーザーにはそれらの中で最も高い権限レベルが付与されます。|
|*Media type mapping*|通知送信用に、ユーザーのSAMLメディア属性（例: email）をZabbixユーザーメディアにマッピングします。|
|*Enable SCIM provisioning*|このチェックボックスをオンにすると、SCIM 2.0プロビジョニングが有効になります。|

ZabbixへのサインインとユーザープロビジョニングのためのSAMLアイデンティティプロバイダー設定例については、次を参照してください。

-   [Microsoft Azure AD](/manual/appendix/install/azure_ad)
-   [Okta](/manual/appendix/install/okta)
-   [Onelogin](/manual/appendix/install/onelogin)

[comment]: # ({/ec310c67-274513e2})

[comment]: # ({8ba316c1-d739be65})
#### SCIMプロビジョニングに関する注意事項

SCIMプロビジョニングの場合、Zabbixフロントエンドへのパスを指定し、api_scim.phpを追加して、アイデンティティプロバイダー側で指定します。例:

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

Zabbixで使用されるユーザー属性（ユーザー名、名、姓、メディア属性）はカスタム属性として追加する必要があり、必要に応じて外部名前空間はユーザースキーマと同じである必要があります: `urn:ietf:params:scim:schemas:core:2.0:User`。

[comment]: # ({/8ba316c1-d739be65})

[comment]: # ({76f3227b-2c636ca1})
#### 詳細設定

追加のSAMLパラメータは、ZabbixのWebインターフェース設定ファイル（*zabbix.conf.php*）で設定できます。

-   $SSO\['SP\_KEY'\] = '<SP秘密鍵ファイルへのパス>';
-   $SSO\['SP\_CERT'\] = '<SP証明書ファイルへのパス>';
-   $SSO\['IDP\_CERT'\] = '<IDP証明書ファイルへのパス>';
-   $SSO\['SETTINGS'\]

::: noteclassic
`$SSO['SETTINGS']` 配列は、*SAML PHP Toolkit* ライブラリ（Zabbixに[付属](/manual/installation/requirements#frontend)）で想定されているものと同じ構造に従う必要があります。
利用可能な設定オプションの完全な説明については、公式の[ライブラリドキュメント](https://github.com/SAML-Toolkits/php-saml?tab=readme-ov-file#how-it-works)を参照してください。
:::

$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' パラメータを以下のように指定する必要があります。

```php
$SSO['SETTINGS'] = [
    'strict' => false,
    'baseurl' => 'https://zabbix.example.com/zabbix/',
    'use_proxy_headers' => true
];
```

**設定例:**

```php
$SSO['SETTINGS'] = [
    'security' => [
        'signatureAlgorithm' => 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha384'
        'digestAlgorithm' => 'http://www.w3.org/2001/04/xmldsig-more#sha384',
        // ...
    ],
    // ...
];
```

[comment]: # ({/76f3227b-2c636ca1})

[comment]: # ({9576c7df-037df9d8})
##### Kerberos/ADFSによるフロントエンドの設定

Zabbixフロントエンドの設定ファイル（*zabbix.conf.php*）を使用して、Kerberos認証およびADFSによるSSOを設定できます。

```php
$SSO['SETTINGS'] = [
    'security' => [
        'requestedAuthnContext' => [
            'urn:oasis:names:tc:SAML:2.0:ac:classes:Kerberos',
        ],
        'requestedAuthnContextComparison' => 'exact'
    ]
]; 
```

この場合、SAML設定の*SP name ID*フィールドには以下を設定します。

```default
urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
```

[comment]: # ({/9576c7df-037df9d8})
