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-файл, который мы создали ранее. Как это делается, показано на изображениях ниже.

Регенерируем
Регенерируем
Загружаем xml-файл
Загружаем 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

И добавляем два атрибута в набор атрибутов для пользователя:

  1. Атрибут «vcdnameid» из вкладки gluuCustomPerson

  2. Атрибут «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

→ NAS за шапку сухарей

→ Взлом Hyundai Tucson, часть 1часть 2

→ Взламываем «умную» зубную щётку

→ 50 самых интересных клавиатур из частной коллекции

Комментарии (0)