SSO (single sign‑on) аутентификация позволяет иметь единую точку входа во все используемые вами сервисы. В данной статье хотим поделиться вариантом реализации SSO для Vmware Cloud Director.
В качестве провайдера аутентификации (idp) выступает сервер Gluu 4.5 Final. Не будем рассказывать о установке данного сервиса, поскольку это есть в официальной документации Gluu 4.5 Final. Вы можете ознакомиться с ней по ссылке.
Аутентификация в vCloudDirector осуществляется посредством протокола SAML. В Gluu 4.5 Final используется shibboleth версии 3. Более подробно о нём рассказывается в Shibboleth wiki.
Схема SAML SSO аутентификации следующая:
Сначала вы переходите по ссылке на ваш VCD https://vcd.domain.ru/tenant/name_tenant
. Вас перебрасывает на провайдера аутентификации (idp), где вы вводите свой логин и пароль для vCloudDirector.
После успешной аутентификации idp пускает вас в панель управления облаком VCD. Чтобы vCloudDirector перенаправлял вас на Gluu сервер, а Gluu сервер пускал в VCD, между VCD и Gluu сервером должны быть установлены доверительные отношения (Trust Relationships).
В Vmware Cloud Director надо передавать следующие атрибуты из Gluu сервера:
email address = "EmailAddress”
user name = "UserName"
full name = "FullName"
user's groups = "Groups"
user's roles = "Roles"
На самом деле из всего этого списка достаточно передавать в VCD лишь атрибут EmailAddress и кастомный атрибут vcdnameid, который выступает также в качестве name id для vCloudDirector.
Создание кастомного атрибута vcdnameid
Кастомный атрибут vcdnameid будет также использоваться в качестве name id (идентификатора), в нашей LDAP схеме. Только кастомный атрибут может выступать в качестве name-id. Если хотите подробностей, рекомендуем ознакомиться с официальной документацией. Вот пример ldif-файла, где задан атрибут vcdnameid.
Создаётся атрибут со строковым типом. Более подробно описано в инструкции.
Установление доверительных отношений
Теперь нам необходимо установить доверительные отношения (Trust Relationships) между vCloudDirector и сервером Gluu. Для этого необходимо перейти по ссылке в браузере https://ваш_idp/idp/shibboleth
и сохранить открывшуюся страницу в xml-формате.
Затем найти в vCloudDirector настройки Администрирования и там перейти во вкладку SAML. Нажать EDIT как на изображении ниже:
Если сертификат просрочен, его можно регенерировать во вкладке Service Provider. Затем включаем SAML, загружаем xml-файл, который мы создали ранее. Как это делается, показано на изображениях ниже.
После включения SAML необходимо импортировать SAML пользователей в vCloudDirector. Для этого переходим в настройки Администрирования в Users и нажимаем кнопку Import Users.
Вводим имя пользователя в виде email-адреса и назначаем ему роль в VCD:
Далее возвращаемся назад в настройки SAML и переходим по ссылке, которая указана в поле metadata. Сохраняем страницу в формате xml-файла.
Посмотрим на shibboleth xml-файл, сохранённый по ссылке vCloudDirector. Видно, что VCD поддерживает формат атрибутов urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
Именно в этом формате мы будем передавать атрибуты на VCD, а также идентификатор (name-id) vcdnameid.
Можно приступать к настройке на стороне Gluu сервера. Но есть один момент, на который нужно обращать внимание.
vCloudDirector требует атрибут с именем EmailAddress, как мы уже говорили. И тут стоит копнуть немного глубже и разобраться, что такое параметр Name, а что такое параметр Display Name у атрибута на Gluu сервере.
Параметр «Name» — это внутреннее имя атрибута, которое используется для отображения его на Gluu сервере.
Параметр «Display Name» — это имя атрибута, которое передаётся в vCloudDirector.
По умолчанию в Gluu есть атрибут с внутренним именем «mail» и «Display Name» Email, который можно использовать в качестве необходимого атрибута для vCloudDirector. Необходимо параметр «Display Name» для этого атрибута перевести в значение «EmailAddress».
Для этого заходим в веб‑интерфейс управления Gluu и переходим в раздел Configuration→Attributes. Затем открываем настройки атрибута с именем mail и меняем поле «Display Name» на «EmailAddress».
Далее переходим в настройки доверительных отношений SAML→ Trust Relationships. И нажимаем на кнопку «Add Relationships» для добавления нового доверительного отношения.
Заполняем поля «Display Name» и «Description» в соответствии с именем вашего тенанта в vCloudDirector. В поле «Entity Type» выбираем Single SP. В поле «Metadata Location» выбираем File и загружаем xml‑файл, который сохраняли из vCloudDirector.
Из вкладки gluuPerson добавляем атрибут EmailAddress, а из вкладки gluuCustomPerson добавляем созданный ранее кастомный атрибут vcdnameid в наше доверительное отношение. Эти атрибуты будут передаваться в vCloudDirector.
После этого нажимаем Add и ждём где-то пять минут для завершения установления доверительных отношений. Ждём до тех пор, пока Validation status доверительного отношения не станет Success.
Добавление атрибута vcdnameid в качестве name-id (идентификатора)
Теперь добавим кастомный атрибут vcdnameid в качестве идентификатора (name id). Официальная документация доступна по ссылке.
Итак, в web‑интерфейсе Gluu перейдём в SAML→ Configure Custom Nameid
И создадим «name id» с форматом urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
Настраиваем SAML трансляцию идентификатора (name-id)
Открываем настройки нашего доверительного отношения. Ставим галочку напротив Configure Ralying Party и переходим в её настройки как на изображении ниже.
Выбираем версию SAML SAML2SSO
Настраиваем трансляцию атрибута vcdnameid в формате urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
Для этого переходим в настройки SAML2SSO профиля и выбираем нужный нам формат.
Изменяем формат генерируемых атрибутов SAML для VCD
Теперь нам необходимо поработать в командной строке на Gluu сервере. Меняем формат генерируемых атрибутов на Gluu сервере на формат urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
Подключаемся через ssh либо в консоли к Gluu серверу. Для этих целей необходимо создать файл-шаблон attribute-resolver.xml.vm
, так как после установки Gluu сервера и его первоначальной настройки этого файла нет в системе.
По этому шаблону генерируется другой файл разрешения атрибутов: attribute-resolver.xml
. Файл можно взять по ссылке с github. Его необходимо положить по пути /opt/gluu/jetty/identity/conf/shibboleth3/idp
.
Назначаем имя владельца и группу владельца для этого файла командой:
chown jetty:gluu attribute-resolver.xml.vm
Предоставляем полные права пользователю владельцу и группе владельца для этого файла командой:
chmod 770 attribute-resolver.xml.vm
В этом файле необходимо раскомментировать строчки, начинающиеся с
<!—AttributeEncoder
и дописать строчку
nameFormat="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"
в определения атрибутов в цикле
#foreach( $attribute in $attrParams.attributes )
Например, это может выглядеть так:
После этого необходимо перезагрузить сервисы idp и identity командами:
systemctl restart idp
systemctl restart identity
Создание пользователя на Gluu сервере
Далее нужно создать пользователя на Gluu сервере с таким же именем (username), что и у пользователя, которого мы импортировали в vCloudDireсtor ранее. Для этого в веб‑интерфейсе Gluu переходим в Users→ Add person
И добавляем два атрибута в набор атрибутов для пользователя:
Атрибут «vcdnameid» из вкладки gluuCustomPerson
Атрибут «Locale» из вкладки gluuPerson
Заполняем все поля. В поле Username, EmailAddress, vcdnameid вводим email‑адрес пользователя, который мы вводили при импортировании пользователя в vCloudDirector. В поле First Name вводим имя пользователя, в поле Last Name фамилию пользователя. В поле Display Name указываем имя тенанта (tenant), которое вы задали на этапе создания доверительных отношений. В поле Locale указываем «ru». После этого сохраняем настройки. Пользователь создан.
Подключение к VCD
Теперь можно пробовать войти в облако. Вводим в браузере https://ваш_vcd/tenant/ваш_tenant/
. После этого вас должно перебросить на Gluu сервер.
Как вы видите, необходимо ввести логин и пароль для пользователя. Авторизуемся и попадаем в vCloudDirector:
На Gluu сервере используется механизм аутентификации по умолчанию (по логину и паролю). При необходимости можно настроить двухфакторную аутентификацию.
Спасибо за внимание!
Что ещё интересного есть в блоге Cloud4Y
→ Спортивные часы Garmin: изучаем GarminOS и её ВМ MonkeyC
→ Взлом Hyundai Tucson, часть 1, часть 2