Как стать автором
Обновить

Использование AD Federation Service для авторизации пользователей на AWS с раздачей прав

Время на прочтение5 мин
Количество просмотров53K
Автор оригинала: Jeff Wierer
Вольный перевод статьи Jeff Wierer "Enabling Federation to AWS Using Windows Active Directory, ADFS, and SAML 2.0" с добавлениями и уточнениями.

1. Исходные данные
2. Подготовка
3. Конфигурирование AD
4. Установка ADFS
5. Конфигурирование ADFS
6. Конфигурирование AWS
7. Тестирование
8. Известные ошибки и их решения



1. Исходные данные

Поднятый AD Windows 2016
Автор использовал EC2 c Windows 2008R2 на Amazon, я виртуалку в локальной сети Windows 2016 с доступом в интернет.
Аккаунт AWS (который будет платить за все )
Прямые руки
Цель: Дать возможность пользователю AD авторизоваться в AWS с заданными правами (получить роль) в зависимости от группы AD.

Схема:



1. Пользователь (будет Bob) открывает страницу (https://ADFS.domain.name/adfs/ls/IdpInitiatedSignOn.aspx)

2. Bob авторизуется (ADFS запрашивает необходимые поля в AD)

3. Браузер Bob-а получает необходимые данные в формате SAML от ADFS

4. Браузер отправляет полученые данные на серсис авторизации SAML (https://signin.aws.amazon.com/saml)

5. Браузер Bob-а получает URL для входа на консоль AWS

2. Подготовка

2.1. У вас уже поднят AD и заведены пользователи, которые состоят в различных группах.

2.2. Поднят IIS (как поднять роль IIS)

2.3. Сгенерировать самоподписанный SSL сертификат. (как сгенерировать самодписаный SSL сертификат) сразу установите его для дефолтного сайта.

3. Конфигурирование AD

3.1. Необходимо создать две группы AWS-Production и AWS-Billing

3.2. Создать пользователя Bob (Внимание!!! у пользователя должно быть заполнено поле email: bob@youdomain.com, в противном случае вы получите ошибку при входе на AWS консоль)

3.3. Добавить Bob в созданные группы AWS-Production и AWS-Billing

3.4. Создать еще одного пользователя ADFSSVC. Специальный сервисный аккаунт для соединения с AD.

4. Установка ADFS

Существует несколько версий ADFS

  • ADFS 1.0 — Windows Server 2003 R2 (additional download)
  • ADFS 1.1 — Windows Server 2008 and Windows Server 2008 R2
  • ADFS 2.0 — Windows Server 2008 and Windows Server 2008 R2 (download from Microsoft.com)
  • ADFS 2.1 — Windows Server 2012
  • ADFS 3.0 — Windows Server 2012 R2[5]

  • ADFS 4.0 — Windows Server 2016 — наш выбор
  • ADFS 5.0 — Windows Server 2019

Автор скачивает ADFS v2 и производит его установку.
Мы же будем поднимать роль ADFS
Сложности там никакой нет, три скриншота помогут нажать кнопку далее >

Скриншоты
image
image
image
У меня он уже установлен поэтому выглядит немного по другому.
Next, Next, Install…

5. Конфигурирование ADFS

Вот по этому линку можно вызвать конфигуратор ADFS

image

image

image

Соединяемся с AD с текущим пользователем.

image

Тут нам нужен сертификат, который мы сгенерировали в IIS (п. 2.3) и имя нашего будущего ADFS (adfs.you-domain.com) дисплайнайм — NAME YOUR COMPANY

image

Выбираем сервис аккаунт ADFSSVC который мы создали в п. 3.4

image

Создаем новую базу данных

image

Проверяем…

image
Прединсталяционная проверка… Жмем Configure

image

Готово.

Запускается консоль поиском «AD Management» в сроке поиска windows

image

image

Далее переходим Trust Relationships and choose Relying Party Trusts

Правая кнопка -> Add Relying Party Trust

image

Выбираем Claims aware

image

Выбираем «Import data the relying party published online ...» и вводим строчку https://signin.aws.amazon.com/static/saml-metadata.xml она для всех одинакова и предоставляется AWS.

image

Вбиваем имя "AWS GO" на ваше усмотрение или оставляем как есть.

image

Выбираем «Permit all user...» доступ разрешен всем.

image

Перепроверить и Готово.

image

Правой кнопкой на нашем релеи и выбираем «Edit Claim Issuence Policy»

image

Начинаем добавлять наши правила:

5.1 Получение имени пользователя. Шаблон: Transform an Incoming Claim далее заполняем поля:

a. Claim rule name: NameId
b. Incoming claim type: Windows Account Name
c. Outgoing claim type: Name ID
d. Outgoing name ID format: Persistent Identifier
e. Pass through all claim values: checked

image

Готово.

5.2 Получение списка ролей для пользователя. Шаблон: Send LDAP Attributes as Claims,

image

поля:

a. Claim rule name: RoleSessionName
b. Attribute store: Active Directory
c. LDAP Attribute: E-Mail-Addresses
d. Outgoing Claim Type:

https://aws.amazon.com/SAML/Attributes/RoleSessionName

image

Готово

5.3 Важное замечание: В этом правиле будут извлечены все роли для пользователя и сопоставлены с подобными ролями в IAM (т.е. роли которые начинаются с AWS-...). Данное правило извлекает все членства в AD. Шаблон: Send Claims Using a Custom Rule

image

, поля
a. Claim rule name: Get AD Groups
b. Custom role:

c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] => add(store = "Active Directory", types = ("http://temp/variable"), query = ";tokenGroups;{0}", param = c.Value);

image

к добавлению следующего правила нужно будет вернуться после п.6 (или же его можно добавить и в последующем изменить ID)

5.4 Добавляем еще одно правило подобно 5.3 оно будут такое:

a. Claim rule name: Roless
b. Custom role:

c:[Type == "http://temp/variable", Value =~ "(?i)^AWS-"] => issue(Type = "https://aws.amazon.com/SAML/Attributes/Role", Value = RegExReplace(c.Value, "AWS-", "arn:aws:iam::123456789012:saml-provider/ADFS,arn:aws:iam::123456789012:role/ADFS-"));

image

Тут вам нужно поменять значение 123456789012 на свое из IAM AWS

image

Это будет описано в п.6

6. Конфигурирование AWS

Все действия происходят в консоле AWS :)

6.1 Создание SAML провайдера

a. IAM -> Identity providers -> Create Provider
Provider Type — SAML
Provider Name — ADFS
Metadata Document — это тайл нужно взять (скачать) на вашем FS сервере по адресу https:///FederationMetadata/2007-06/FederationMetadata.xml
если файл недоступен посмотрите п.8 — Известные ошибки и их решения

image

b. Создадим две роли для наших пользователей
IAM Roles Roles -> Create Role

image

Набрасывайте необходимые политики (например Billing (дефолтная политика) для пользователей кто будет следить за деньгами, или можете предварительно создать свою собственную политику и тут ее назначить)

image

присвоить тэги, если нужно…

image

Дать имя: Имя после "-" должно совпадать с именем в AD после "-" ASFS-Billing = AWS-Billing в этом случае ваш пользователь попадал в нужную группу.

И нажать Create role

image

7. Тестирование

7.1 В вашем любимом браузере зайдите на страницу вашего сервера https://localhost/adfs/ls/IdpInitiatedSignOn.aspx (самоподписанный сертификат нужно будет подтвердить)

Откроется страница с подобным содержанием

image

Вводим данные нашего пользователя AD

image

И нас перенаправляет на страницу AWS с предложением роли под которой пользователь будет работать в AWS

image

это происходит потому что наш Bob состоит сразу в двух группах AD (AWS-Production и AWS-billing).

Выбираем AWS-billing и видим необходимые настройки (можем смотреть и править бюджет но не имеет права создавать EC2 согласно тем ролям которые мы ему определили)

image

8. Известные ошибки и их решения

8.1 Портал не отвечает или не находит нужные страницы. Например:

https://localhost/adfs/ls/IdpInitiatedSignOn.aspx

Решение: На сервере ADFS необходимо выполнить PowerShell команду

Set-AdfsProperties -EnableIdPInitiatedSignonPage $true

Тут же можно поставить лого на страницу приветствия

Set-AdfsWebTheme -TargetName default -Illustration @{path="C:\path\adfslogo.jpg"}

8.2 При перенаправлении на консоль AWS вы получайте ошибку вида:

RoleSessionName is required in AuthnResponse (Service: AWSSecurityTokenService; Status Code: 400; Error Code: InvalidIdentityToken; Request ID: e4ddf8cd-d7b7-11e9-8729-09c90d2561b0). Please try again

Решение: Вероятнее всего у вашего пользователя не заполнено поле email в AD

image

Решение 2: Вероятно есть ошибка в написании группы в AD и роли в AWS
Теги:
Хабы:
+4
Комментарии3

Публикации

Истории

Работа

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн