Управление пользовательским доступом и правами в консоли облака Advanced через провайдера OAuth

В этой статье приведен пример настройки интеграции сервиса Identity and Access Management (IAM) со сторонними провайдерами аутентификации на примере Active Directory Federation Services (ADFS) с помощью протокола авторизации OAuth.

По умолчанию аутентификация в облаке Advanced происходит с помощью сервиса Identity and Access Management, у которого есть некоторые особенности:

  • Создание и удаление учетных записей пользователей производится вручную. Например, учетная запись сотрудника при его увольнении не будет автоматически удалена, что создает риски для информационной безопасности.

  • Отсутствие single sign-on (SSO) — технология единого входа.

  • Форма логина IAM состоит из трех полей:

    • название аккаунта;

    • имя IAM-пользователя или email;

    • пароль.

    Большинство менеджеров паролей не умеют работать с подобной формой, из-за чего данные авторизации придется вводить при каждом входе в систему. Это можно решить с помощью интеграции сервиса IAM с корпоративным провайдером OAuth, например ADFS или Keycloak.

Примечание

Другие провайдеры OAuth настраиваются аналогично.

Как работает предоставление прав

В рамках сервиса Identity and Access Management создаются группы пользователей, которым предоставляются доступы к облачным ресурсам. Когда пользователь входит в консоль облака, он автоматически сопоставляется с группой IAM-пользователей на основании данных в id_token.

Для этого необходимо создать группы пользователей в Active Directory и IAM с одинаковыми названиями, добавить пользователей в группы Active Directory и автоматически предоставить права в облаке, включая пользователя в группу IAM с таким же названием.

Перед началом работы

Условия для настройки доступа к облаку с помощью интеграции OAuth и IAM:

  1. Развернутый и опубликованный сервис Active Directory Federation Services. Подробнее можно прочесть на официальном сайте Microsoft в инструкциях:

    Примечание

    При развертывании и публикации сервиса в интернет необходимо убедиться, что используется правильный публичный SSL-сертификат. Реализовать интеграцию ADFS и IAM на самоподписанных сертификатах не получится.

  2. Опубликованный сервер ADFS в интернет. Чтобы интегрировать IAM с ADFS, ADFS должен быть опубликован в интернет. Для этого можно использовать стандартную роль Windows Server — Web Application Proxy (WAP). Вендор рекомендует располагать сервер с устанавливаемой ролью WAP в DMZ и не вводить в домен Active Directory. Этот сервер должен быть доступен из интернета по порту 443 и иметь доступ до сервера с установленной ролью ADFS по порту 443. Так же на этот сервер необходимо установить сертификат, с использованием которого ADFS будет опубликован в интернет. Подробнее о развертывании Web Application Proxy и публикации через него сервера ADFS можно прочесть на официальном сайте Microsoft.

Настройка на стороне провайдера OAuth (Active Directory Federation Services)

На стороне провайдера OAuth необходимо настроить консоль облака Advanced в качестве приложения, которое будет использовать учетные данные.

Пример настройки на стороне ADFS:

  1. Откройте консоль ADFS.

  2. В контекстном меню Application groups нажмите Add application group.

    ../../_images/application-group.png
  3. В полях:

    • Name — укажите название приложения, например Cloud Advanced.

    • Template — выберите тип приложения Native application accessing a web API.

    ../../_images/welcome.png
  4. Нажмите Next.

  5. В полях:

    • Client Identifier — скопируйте сгенерированный Client ID для серверного приложения.

    • Redirect Url — вставьте ссылку https://auth.hc.sbercloud.ru/authui/oidc/post и нажмите Add.

  6. Нажмите Next.

  7. В поле Identifier укажите Client ID, полученный на шаге 5.

    ../../_images/client-id-2.png
  8. (опционально) На странице Choose Access Control Policy оставьте параметр Permit everyone, так как разграничение доступа к облачным ресурсам будет с помощью групп Active Directory, а не на уровне доступа к провайдеру аутентификации.

    При необходимости можно указать, в каком случае пользователи Active Directory будут проходить аутентификацию на сервере ADFS. Например, можно разрешить доступ для пользователей из определенной группы Active Directory или из локальной сети.

    ../../_images/permit.png
  9. Нажмите Next.

  10. В поле Permitted scopes активируйте openid, email, profile и нажмите Next.

    ../../_images/scopes.png

Далее необходимо настроить передачу дополнительных параметров пользователя в идентификационный токен для последующей настройки членства в группах IAM:

  1. Откройте созданную ранее группу приложений в ADFS.

  2. Выделите приложение Web API и нажмите Edit….

    ../../_images/web-api.png
  3. На вкладке Issuance Transform Rules нажмите Add Rule….

    ../../_images/issuance-transform-rules.png
  4. В поле Claim rule template выберите тип правила Send LDAP Attributes as Claims и нажмите Next.

    ../../_images/rule-1.png
  5. Настройте правило:

    • Claim rule name — введите Send groups in id_token.

    • Attribute store — выберите Active Directory.

    • LDAP Attribute — выберите Token-Groups - Unqualified Names.

    • Outgoing Claim Type — выберите Group.

  6. Чтобы завершить настройку, нажмите Finish.

Настройка интеграции на стороне Identity and Access Management

Теперь необходимо настроить сервис IAM для работы с провайдером OAuth (в нашем случае ADFS). Для этого:

  1. Войдите в консоль управления Advanced:

  2. Чтобы открыть список сервисов, нажмите Service List.

  3. Выберите Management & Deployment → Identity and Access Management.

  4. В меню слева нажмите Identity Providers.

    ../../_images/iam-8.png
  5. Нажмите Create Identity Provider.

  6. В полях:

    • Name — укажите название подключения.

    • Protocol — выберите OpenID Connect.

  7. Нажмите ОК.

  8. После создания провайдера его нужно настроить. Для этого нажмите Modify.

    ../../_images/iam-11.png
  9. Настройте подключение:

    • Откройте в браузере страницу https://{публичный адрес WAP сервера}/adfs/.well-known/openid-configuration:

      • из issuer скопируйте значение в Identity Provider URL;

      • из authorization_endpoint скопируйте значение в Authorization endpoint;

      • откройте ссылку из свойства jwks_uri, полностью скопируйте вывод и вставьте в поле Signing key.

    • Client ID — укажите созданный Client ID от Native Application в ADFS.

    • Scopes — добавьте openid, email, profile.

    • Response Modem — укажите form_post.

  10. Сохраните провайдер.

Сопоставление ролей

Права в облаке предоставляются пользователям на основе сопоставления входящей информации из id_token с группами IAM-пользователей. Можно сделать набор правил, который будет сопоставлять пользователей с группами на основе их признаков (например по имени). Можно создать до 10 правил.

Политики представляют собой JSON-описание в формате массива правил. Пример описания приведен ниже.

[
    {
        "remote": [
            {
                "type": "upn"
            }
        ],
        "local": [
            {
                "user": {
                    "name": "{0}"
                }
            },
            {
                "group": {
                    "name": "My IAM Group"
                }
            }
        ]
    }
]

В этом описании указаны:

  • Раздел remote — описывает информацию, передаваемую в id_token. В этом примере используется только одно поле — upn (имя пользователя, аутентифицировавшегося в провайдере OAuth).

  • Раздел local — показывает, как полученная информация должна преобразоваться в пользователя и права доступа. В этом случае в качестве имени пользователя будет использовано имя пользователя из провайдера OAuth, а всем пользователям будет назначена одна группа — My IAM Group.

С помощью подобных правил и условий можно более тонко настроить различные права доступа разным пользователям и группам.

Сопоставление групп Active Directory и IAM

Ниже приведен пример полного сопоставления групп Active Directory и IAM для предоставления прав в облаке.

Как это будет работать:
  • В id_token пользователя включен список групп Active Directory, в которые входит пользователь.

  • Если в облаке есть группы пользователей с такими же названиями, пользователю будет предоставлен доступ этих групп.

Примеры групп для Active Directory и IAM:
  • Cloud Readers — предоставлены разрешения на чтение ресурсов.

  • Cloud Admins — предоставлены полные разрешения.

Права пользователя в Active Directory

Права пользователя в облаке Advanced

Не входит в группы Cloud Readers и Cloud Admins

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

Входит в группу Cloud Readers

Пользователь успешно выполнит вход, увидит все ресурсы, но не сможет их изменять, удалять и создавать

Входит в группу Cloud Admins

Пользователь успешно выполнит вход, увидит все ресурсы, сможет их изменять, удалять и создавать новые

Входит в группы Cloud Readers и Cloud Admins

Пользователь успешно выполнит вход, увидит все ресурсы, сможет их изменять, удалять и создавать новые

Чтобы изменить правило:

  1. В строке с созданным провайдером нажмите Modify.

  2. В поле Identity Conversation Rules нажмите Edit Rule.

  3. Скопируйте описание и вставьте в поле Edit Rule.

    [
        {
            "remote": [
                {
                    "type": "upn"
                },
                {
                    "type": "group"
                }
            ],
            "local": [
                {
                    "user": {
                        "name": "{0}"
                    }
                },
                {
                    "groups": "{1}"
                }
            ]
        }
    ]
    
  4. Чтобы проверить правило, нажмите Validate.

  5. После успешной проверки отобразится сообщение «Validation successful». Нажмите ОК.

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

  1. Создайте группу Active Directory и включите пользователя в нее.

  2. Создайте группу IAM с таким же названием.

  3. Предоставьте группе IAM права в облаке.

  4. Откройте созданный ранее Identity Provider и скопируйте URL для входа:

    ../../_images/iam-12.png
  5. Откройте URL в режиме инкогнито или в другом браузере.

    Браузер перенаправит вас на страницу ADFS.

  6. Выполните вход.

    Браузер перенаправит вас в консоль облака.

  7. Проверьте, что пользователь получил права, созданные в пункте 3.

Масштабная конференция
GoCloud 2024:
облачные грани будущего