13 OktaによるSAMLのセットアップ
このセクションでは、Oktaを設定して、ZabbixのSAML 2.0認証とユーザーのプロビジョニングを有効にするためのガイドラインを提供します。
Oktaの設定
1. https://developer.okta.com/signup/ にアクセスし、アカウントを登録またはサインインします。
2. OktaのWebインターフェースで、Applications → Applicationsに移動します。
3. Create App Integrationをクリックします。

サインイン方法として「SAML 2.0」を選択し、Nextをクリックします。
4. 一般設定でアプリ名を入力し、Nextをクリックします。
5. SAML設定で、以下の値を入力し、Nextをクリックします。

-
Generalに以下を追加します:
- Single sign-on URL:
http://<your-zabbix-url>/zabbix/index_sso.php?acs
リクエストでacsパラメータが切り捨てられないよう、「https」ではなく「http」を使用していることに注意してください。 Use this for Recipient URL and Destination URLのチェックボックスもマークしてください。 - Audience URI (SP Entity ID):
zabbix
この値はSAMLアサーション内で一意のサービスプロバイダー識別子として使用されます(一致しない場合、操作は拒否されます)。 このフィールドにはURLや任意の文字列を指定できます。 - Default RelayState:
このフィールドは空白のままにしてください。カスタムリダイレクトが必要な場合は、Zabbixのユーザー > ユーザー設定で追加できます。 - その他のフィールドは好みに応じて入力してください。
- Single sign-on URL:
-
Attribute Statements/Group Attribute Statementsに以下を追加します:

これらの属性ステートメントは、Zabbixと共有されるSAMLアサーションに挿入されます。
ここで使用されている属性名は任意の例です。 異なる属性名を使用することもできますが、ZabbixのSAML設定の各フィールド値と一致している必要があります。
JITユーザープロビジョニングなしでZabbixへのSAMLサインインを設定したい場合は、email属性のみが必要です。
暗号化接続を使用する場合は、秘密鍵と公開暗号化証明書を生成し、公開証明書をOktaにアップロードしてください。 Assertion Encryptionを「Encrypted」に設定すると(このパラメータはShow Advanced Settingsをクリックすると表示されます)、証明書アップロードフォームが表示されます。
6. 次のタブで「I'm a software vendor. I'd like to integrate my app with Okta」を選択し、Finishをクリックします。
7. 新しく作成したアプリケーションの「Assignments」タブに移動し、Assignボタンをクリックして、ドロップダウンから「Assign to People」を選択します。

8. 表示されたポップアップで、SAML 2.0を使用してZabbixに認証するユーザーにアプリを割り当て、Save and go backをクリックします。
9. IdP証明書をダウンロードします。 以下のコマンドを実行して644パーミッションを設定します:
chmod 644 idp.crt
10. 「Sign On」タブに移動し、View Setup Instructionsボタンをクリックします。
セットアップ手順が新しいタブで開きます。Zabbixの設定中はこのタブを開いたままにしてください。
Zabbixの設定
1. Zabbixで、SAML設定に移動し、Oktaのセットアップ手順に基づいて設定オプションを入力します。

| Zabbixフィールド | Oktaのセットアップフィールド | サンプル値 |
|---|---|---|
| IdPエンティティID | Identity Provider Issuer | |
| SSOサービスURL | Identity Provider Single Sign-On URL | |
| ユーザー名属性 | Attribute name | usrEmail |
| SPエンティティID | Audience URI | zabbix |
| グループ名属性 | Attribute name | groups |
| ユーザー名属性 | Attribute name | user_name |
| ユーザー姓属性 | Attribute name | user_lastname |
ユーザーグループとメディアのマッピングも設定する必要があります。
2. OktaのSAMLセットアップ手順で提供されたBase64証明書を追加します。
zabbix.conf.phpで$SSO['CERT_STORAGE'] = 'database'が設定されている場合、SAML設定時にフロントエンドで証明書テキストを貼り付けるか、証明書ファイルをアップロードできます。ファイルシステム上にファイルは必要ありません。
zabbix.conf.phpで$SSO['CERT_STORAGE'] = 'file'が設定されている場合、証明書はファイルシステム上(デフォルトではui/conf/certs、またはzabbix.conf.phpで設定されたパス)に配置する必要があり、フロントエンドは証明書をデータベースに保存しません。
$SSO['CERT_STORAGE']が設定されていない、またはコメントアウトされている場合は、ファイルストレージが想定され、証明書はui/conf/certsから読み込まれます。
3. OktaでAssertion Encryptionが「Encrypted」に設定されている場合、ZabbixでもEncryptパラメータの「Assertions」チェックボックスにチェックを入れる必要があります。
4. 更新ボタンを押して、これらの設定を保存します。
SCIMプロビジョニング
1. SCIMプロビジョニングを有効にするには、Oktaのアプリケーションの「General」->「App Settings」に移動します。
Enable SCIM provisioning チェックボックスをオンにします。
その結果、新しい Provisioning タブが表示されます。
2. 「Provisioning」タブに移動してSCIM接続を設定します:
- SCIM connector base URL にはZabbixフロントエンドへのパスを指定し、
api_scim.phpを追加します。例:
https://<your-zabbix-url>/zabbix/api_scim.php - Unique identifier field for users:
email - Authentication mode:
HTTP header - Authorization には、スーパ管理者権限を持つ有効なAPIトークンを入力します

認証に問題がある場合は、Authorizationヘッダーの転送を参照してください。
3. Test Connector Configuration をクリックして接続をテストします。
すべてが正しければ、成功メッセージが表示されます。
4. 「Provisioning」->「To App」で、次のチェックボックスがオンになっていることを確認します:
- Create Users
- Update User Attributes
- Deactivate Users
これにより、これらのリクエストタイプがZabbixに送信されるようになります。
5. SAMLで定義されているすべての属性がSCIMでも定義されていることを確認します。
「Provisioning」->「To App」でGo to Profile Editorをクリックすると、アプリのプロファイルエディタにアクセスできます。
Add Attribute をクリックします。
Display name、Variable name、External name にはSAML属性名(例: user_name)を入力します。

External namespace にはユーザースキーマと同じ値を指定します: urn:ietf:params:scim:schemas:core:2.0:User
6. アプリケーションの「Provisioning」->「To App」->「Attribute Mappings」に移動します。
下部のShow Unmapped Attributesをクリックします。
新しく追加した属性が表示されます。
7. 追加した各属性をマッピングします。

8. 「Assignments」タブでユーザーを追加します。
事前にDirectory -> Peopleでユーザーを追加しておく必要があります。
これらの割り当てはすべてZabbixへのリクエストとして送信されます。
9. 「Push Groups」タブでグループを追加します。
ZabbixのSAML設定でのユーザーグループマッピングパターンが、ここで指定したグループと一致している必要があります。
一致しない場合、ユーザーはZabbixに作成できません。
グループメンバーに関する情報は、何らかの変更が行われるたびに送信されます。