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 аутентификации следующая:
![](https://habrastorage.org/getpro/habr/upload_files/5d5/cfe/afd/5d5cfeafd9cdc64805e02fffdea2283b.jpeg)
Сначала вы переходите по ссылке на ваш 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.
![](https://habrastorage.org/getpro/habr/upload_files/b7b/a00/640/b7ba00640dcf2539a3b10dd488f62491.png)
Создаётся атрибут со строковым типом. Более подробно описано в инструкции.
Установление доверительных отношений
Теперь нам необходимо установить доверительные отношения (Trust Relationships) между vCloudDirector и сервером Gluu. Для этого необходимо перейти по ссылке в браузере https://ваш_idp/idp/shibboleth
и сохранить открывшуюся страницу в xml-формате.
Затем найти в vCloudDirector настройки Администрирования и там перейти во вкладку SAML. Нажать EDIT как на изображении ниже:
![](https://habrastorage.org/getpro/habr/upload_files/7bb/e78/757/7bbe78757348320324677455563d87be.png)
Если сертификат просрочен, его можно регенерировать во вкладке Service Provider. Затем включаем SAML, загружаем xml-файл, который мы создали ранее. Как это делается, показано на изображениях ниже.
![Регенерируем Регенерируем](https://habrastorage.org/getpro/habr/upload_files/fa1/780/325/fa17803253a6cc384f1733c494f18a1b.png)
![Загружаем xml-файл Загружаем xml-файл](https://habrastorage.org/getpro/habr/upload_files/2f7/81b/35c/2f781b35c7e29761d6d6ea98cd67240e.png)
После включения SAML необходимо импортировать SAML пользователей в vCloudDirector. Для этого переходим в настройки Администрирования в Users и нажимаем кнопку Import Users.
![](https://habrastorage.org/getpro/habr/upload_files/5a8/3b2/5cb/5a83b25cbc7a2bc1b99fa87c6946e946.png)
Вводим имя пользователя в виде email-адреса и назначаем ему роль в VCD:
![](https://habrastorage.org/getpro/habr/upload_files/5d6/a2d/419/5d6a2d4191378cf5579af49cc7d0edaa.png)
Далее возвращаемся назад в настройки SAML и переходим по ссылке, которая указана в поле metadata. Сохраняем страницу в формате xml-файла.
![](https://habrastorage.org/getpro/habr/upload_files/4f8/38d/ae8/4f838dae8bafac280ae79918140ff54e.png)
Посмотрим на shibboleth xml-файл, сохранённый по ссылке vCloudDirector. Видно, что VCD поддерживает формат атрибутов urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
![](https://habrastorage.org/getpro/habr/upload_files/df3/7bd/a69/df37bda6960c5f14c4c173650a25b368.png)
Именно в этом формате мы будем передавать атрибуты на 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».
![](https://habrastorage.org/getpro/habr/upload_files/8f3/e3c/3f7/8f3e3c3f74254640e400cf9d93bd6ba1.png)
Далее переходим в настройки доверительных отношений SAML→ Trust Relationships. И нажимаем на кнопку «Add Relationships» для добавления нового доверительного отношения.
![](https://habrastorage.org/getpro/habr/upload_files/276/030/572/276030572402bb91583c2cb766b53834.png)
Заполняем поля «Display Name» и «Description» в соответствии с именем вашего тенанта в vCloudDirector. В поле «Entity Type» выбираем Single SP. В поле «Metadata Location» выбираем File и загружаем xml‑файл, который сохраняли из vCloudDirector.
Из вкладки gluuPerson добавляем атрибут EmailAddress, а из вкладки gluuCustomPerson добавляем созданный ранее кастомный атрибут vcdnameid в наше доверительное отношение. Эти атрибуты будут передаваться в vCloudDirector.
![](https://habrastorage.org/getpro/habr/upload_files/3e8/720/c6d/3e8720c6ded3d9c64741fe9673b50a26.png)
После этого нажимаем Add и ждём где-то пять минут для завершения установления доверительных отношений. Ждём до тех пор, пока Validation status доверительного отношения не станет Success.
![](https://habrastorage.org/getpro/habr/upload_files/13d/701/d5f/13d701d5f54495d3219403c3df572365.png)
Добавление атрибута vcdnameid в качестве name-id (идентификатора)
Теперь добавим кастомный атрибут vcdnameid в качестве идентификатора (name id). Официальная документация доступна по ссылке.
Итак, в web‑интерфейсе Gluu перейдём в SAML→ Configure Custom Nameid
![](https://habrastorage.org/getpro/habr/upload_files/44a/e1d/ef9/44ae1def9dc52bc26978cf6695f0e0c5.png)
И создадим «name id» с форматом urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
![](https://habrastorage.org/getpro/habr/upload_files/dbb/5d7/617/dbb5d7617a011223605c535550315cfa.png)
Настраиваем SAML трансляцию идентификатора (name-id)
Открываем настройки нашего доверительного отношения. Ставим галочку напротив Configure Ralying Party и переходим в её настройки как на изображении ниже.
![](https://habrastorage.org/getpro/habr/upload_files/671/4d1/301/6714d1301b50519b052d03db716ad57b.png)
Выбираем версию SAML SAML2SSO
![](https://habrastorage.org/getpro/habr/upload_files/705/bc1/b36/705bc1b36ea4a1cb6ef6c28bf0010b02.png)
Настраиваем трансляцию атрибута vcdnameid в формате urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
Для этого переходим в настройки SAML2SSO профиля и выбираем нужный нам формат.
![](https://habrastorage.org/getpro/habr/upload_files/afc/ed5/d44/afced5d4404d9e07ee8881597daa8b5f.png)
Изменяем формат генерируемых атрибутов 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 )
Например, это может выглядеть так:
![](https://habrastorage.org/getpro/habr/upload_files/d62/3ae/532/d623ae53298158cbf0bb83c4c53a8af6.png)
После этого необходимо перезагрузить сервисы idp и identity командами:
systemctl restart idp
systemctl restart identity
Создание пользователя на Gluu сервере
Далее нужно создать пользователя на Gluu сервере с таким же именем (username), что и у пользователя, которого мы импортировали в vCloudDireсtor ранее. Для этого в веб‑интерфейсе Gluu переходим в Users→ Add person
![](https://habrastorage.org/getpro/habr/upload_files/141/dd1/58f/141dd158f573b3b51db2476bb8165d1e.png)
И добавляем два атрибута в набор атрибутов для пользователя:
Атрибут «vcdnameid» из вкладки gluuCustomPerson
Атрибут «Locale» из вкладки gluuPerson
Заполняем все поля. В поле Username, EmailAddress, vcdnameid вводим email‑адрес пользователя, который мы вводили при импортировании пользователя в vCloudDirector. В поле First Name вводим имя пользователя, в поле Last Name фамилию пользователя. В поле Display Name указываем имя тенанта (tenant), которое вы задали на этапе создания доверительных отношений. В поле Locale указываем «ru». После этого сохраняем настройки. Пользователь создан.
Подключение к VCD
Теперь можно пробовать войти в облако. Вводим в браузере https://ваш_vcd/tenant/ваш_tenant/
. После этого вас должно перебросить на Gluu сервер.
![](https://habrastorage.org/getpro/habr/upload_files/468/513/8da/4685138dacda3ab73050032c32db9e45.png)
Как вы видите, необходимо ввести логин и пароль для пользователя. Авторизуемся и попадаем в vCloudDirector:
![](https://habrastorage.org/getpro/habr/upload_files/485/7fb/ba8/4857fbba89ad662e2e027a46a610cb47.png)
![](https://habrastorage.org/getpro/habr/upload_files/733/b97/b08/733b97b08697b5541bd47ed172285ff2.png)
На Gluu сервере используется механизм аутентификации по умолчанию (по логину и паролю). При необходимости можно настроить двухфакторную аутентификацию.
Спасибо за внимание!
Что ещё интересного есть в блоге Cloud4Y
→ Спортивные часы Garmin: изучаем GarminOS и её ВМ MonkeyC
→ Взлом Hyundai Tucson, часть 1, часть 2