Настройка Zabbix + Indeed IDP (SAML)
Предварительные требования:
- Установленный и настроенный Zabbix.
- Установленные сертификаты для https подключения на Indeed IdP и Zabbix.
- Выданные DNS имена
Zabbix: zabbix.indeed.local Indeed IdP: indeedam.indeed.local
Примечание: В Zabbix используется пользовательский атрибут, для передачи формата логина: Username attribute (Custom Attribute). В примере используется уникальные имена атрибутов: 1. Zabbix_Custom_Attibute_UPN Значение формата имени UPN, вида username@indeed.local (со стороны IDP: PrincipalName). 2. Zabbix_Custom_Attibute_Name Значение формата имени Name, вида username (со стороны IDP: Name).
Настройка IDP (Indeed AM)
В конфигурационном файле C:\inetpub\wwwroot\am\idp\app-settings.json в секцию LoginFormats, добавляем:
{
"ServiceProvider": "zabbix",
"InLoginFormat": "Name",
"OutLoginFormat": "PrincipalName"
}

В секцию CustomAttributes, добавляем:
{
"ServiceProvider": "zabbix",
"Attributes": [
{
"Name": "Zabbix_Custom_Attibute_UPN",
"UserNameFormat": "PrincipalName"
},
{
"Name": "Zabbix_Custom_Attibute_Name",
"UserNameFormat": "Name"
}
]
}

В секции SAML, в PartnerServiceProvider добавляем:
{
"Name": "zabbix",
"AssertionConsumerServiceUrl": "https://zabbix.indeed.local/index_sso.php?acs",
"SingleLogoutServiceUrl": "https://zabbix.indeed.local/index_sso.php?sls",
"SignAssertion": false,
"WantAuthnRequestSigned": false,
"SignSamlResponse": true,
"SignLogoutRequest": false,
"SignLogoutResponse": false,
"WantLogoutRequestSigned": false,
"WantLogoutResponseSigned": false,
"EncryptAssertion": false,
"PartnerCertificates": [
{
"Thumbprint": "0f9ebc2d1490640447a70410019e20b8198975e1"
}
]
}

Указываем валидный DNS адрес сервера zabbix. AssertionConsumerServiceUrl - URL, на который будут перенаправлены пользователи при входе в систему. Утверждение Потребителя URL (AssertionConsumerServiceUrl) должно быть установлено в <путь_к_веб-интерфейсу_zabbix>/index_sso.php?acs
SingleLogoutServiceUrl - URL на который будут перенаправлены пользователи при выходе из системы. Если это поле оставить пустым, служба SLO использоваться не будет Единый URL-адрес выхода (SingleLogoutServiceUrl) должен быть установлен в <путь_к_веб-интерфейсу_zabbix>/index_sso.php?sls
Примеры <пути_к_веб-интерфейсу_zabbix>: %% https://zabbix.indeed.local/zabbix/ui, http://zabbix.indeed.local/zabbix
В параметре “Thumbprint” указываем отпечаток сертификата вашего сервера zabbix.
Пример заполненного конфигурационного файла app-settings.json во вложении
Настройка Zabbix
Переходим в Administration > Authentication > SAML settings Указываем следующие настройки: IdP entity ID: urn:indeedid:saml_idp
SSO service URL: https://indeedam.indeed.local/am/idp/Account/SsoService SLO service URL: https://indeedam.indeed.local/am/idp/Account/Logout Username attribute: Zabbix_Custom_Attibute_UPN SP entity ID: zabbix

Для использования аутентификации SAML, Zabbix должен быть настроен следующим образом:
Закрытый ключ (private key) и сертификат должны храниться в ui/conf/certs/, если только пользовательские пути не указаны в файле zabbix.conf.php.
По умолчанию, Zabbix будет искать в следующих местах:
- ui/conf/certs/sp.key — файл закрытого ключа SP
- ui/conf/certs/sp.crt — файл сертификата SP
- ui/conf/certs/idp.crt — файл сертификата IDP
В примере, Zabbix развернут на Ubuntu 20.04, пути для размещения сертификатов: /usr/share/zabbix/conf/certs/sp.key /usr/share/zabbix/conf/certs/sp.crt /usr/share/zabbix/conf/certs/idp.crt
Если пути до сертификатов или их названия отличаются, то редактируем: sudo nano /usr/share/zabbix/conf/zabbix.conf.php
// Used for SAML authentication.
// Uncomment to override the default paths to SP private key, SP and IdP X.509 certificates, and to set extra settings.
$SSO['SP_KEY'] = 'conf/certs/sp.key';
$SSO['SP_CERT'] = 'conf/certs/sp.crt';
$SSO['IDP_CERT'] = 'conf/certs/idp.crt';
$SSO['SETTINGS'] = [];
Перезапускаем сервисы: sudo systemctl restart zabbix-server zabbix-agent apache2
Проверка входа в Zabbix через SAML

Произойдет редирект на страницу Indeed IDP, где необходимо пройти аутентификацию по любому из настроенных/разрешенных метода входа, для примера выбираем PUSH-аутентификацию в приложении Indeed Key:



Успешно заходим в Zabbix, о чем видим соответствующие события в Zabbix и Management Console:


При интеграции Zabbix по SAML с ранее используемыми УЗ добавленными по LDAP, может потребоваться перевести атрибут имени пользователя, в формат Name, для сопоставления форматов учетных записей.
Для этого, измените в Zabbix, в разделе Administration > Authentication > SAML settings, на: Username attribute: Zabbix_Custom_Attibute_Name
Возможные проблемы и их решения
При возникновении ошибки: You are not logged in No permissions for system access. Invalid array settings: idp_cert_or_fingerprint_not_found_and_required

Проверьте, что сертификат IDP добавлен в zabbix и есть необходимые права на чтение. При необходимости выдаем права: chmod 644 /usr/share/zabbix/conf/certs/idp.crt
При возникновении ошибки: You are not logged in No permissions for system access. Incorrect user name or password or account is temporarily blocked.

Убедитесь, что целевой пользователь существует в Zabbix в требуемом формате UserPrincipalName или Name и у него есть необходимые права на вход.
Расширенный вариант маппинга атрибутов
При необходимости пробросить атрибут SamAccountName (Данный атрибут по умолчанию не поддерживается со стороны IDP, в текущей версии Indeed AM 8.2.4), в C:\inetpub\wwwroot\am\idp\app-settings.json в секцию CustomAttributes, добавляем новый блок с MiddleName (который в последствии будет заменен на SamAccountName через adObjectMapRule):
{
"Name": "Zabbix_Custom_Attibute_SamAccountName",
"UserNameFormat": "MiddleName"
}
Секция CustomAttributes будет выглядеть следующим образом:
"CustomAttributes": [
{
"ServiceProvider": "zabbix",
"Attributes": [
{
"Name": "Zabbix_Custom_Attibute_UPN",
"UserNameFormat": "PrincipalName"
},
{
"Name": "Zabbix_Custom_Attibute_Name",
"UserNameFormat": "Name"
},
{
"Name": "Zabbix_Custom_Attibute_SamAccountName",
"UserNameFormat": "MiddleName"
}
]
},
Далее необходимо сделать правки в конфигурационном файле AM Core, для последующего проброса атрибута “MiddleName” к “SamAccountName” из AD в IDP. В C:\inetpub\wwwroot\am\core\Web.config добавляем:
<userMapRules>
<adObjectMapRule attribute="MiddleName" adAttribute="sAMAccountName"/>
<objectTypeSettings>
<objectSetting category="person" class="user" />
</objectTypeSettings>
</userMapRules>

Список всех поддерживаемых имен атрибутов Indeed AM:
ObjectGUID,
Name,
CanonicalName,
PrincipalName,
SamCompatibleName,
DistinguishedName,
Sid,
FirstName,
MiddleName,
LastName,
Email,
Phone
Меняем в настройках аутентификации Zabbix в разделе Administration > Authentication > SAML settings кастомный атрибут: Zabbix_Custom_Attibute_SamAccountName

Проверяем вход в Zabbix по SAML аутентификации.
Включение дополнительной проверки подписей и шифрования.
На стороне Indeed IDP, в секции "PartnerServiceProvider" включаем следующие параметры:
{
"Name": "zabbix",
"AssertionConsumerServiceUrl": "https://zabbix.indeed.local/index_sso.php?acs",
"SingleLogoutServiceUrl": "https://zabbix.indeed.local/index_sso.php?sls",
"SignAssertion": true,
"WantAuthnRequestSigned": true,
"SignSamlResponse": true,
"SignLogoutRequest": true,
"SignLogoutResponse": true,
"WantLogoutRequestSigned": true,
"WantLogoutResponseSigned": true,
"EncryptAssertion": true,
"PartnerCertificates": [
{
"Thumbprint": "0f9ebc2d1490640447a70410019e20b8198975e1"
}
]
}

На стороне Zabbix:
Убедитесь, что добавлены сертификаты в хранилище Zabbix: /usr/share/zabbix/conf/certs/sp.key /usr/share/zabbix/conf/certs/sp.crt
Выдаем права web-серверу на чтение ключа сертификата sp.key для группы www-data sudo chown -R :www-data /usr/share/zabbix/conf/certs/sp.key sudo chmod 750 /usr/share/zabbix/conf/certs/sp.key
Выдаем права на чтение для всех, для открытой части сертификата sp.crt chmod 744 /usr/share/zabbix/conf/certs/sp.crt
Переходим в Administration > Authentication > SAML settings Указываем следующие настройки:

Проверяем успешную аутентификацию в Zabbix по SAML, с включенной дополнительной проверкой подписей и шифрования.
|