Аутентификация с помощью Active Directory

С помощью федерации удостоверений вы можете использовать Active Directory Federation Services (AD FS) для аутентификации в облаке.

Чтобы настроить аутентификацию:

  1. Создайте федерацию в облаке.
  2. Добавьте сертификаты в федерацию.
  3. Получите ссылку для входа в консоль.
  4. Настройте аутентификацию на сервере AD FS.
  5. Добавьте пользователей в облако.
  6. Протестируйте аутентификацию.

Перед началом

Для того, чтобы воспользоваться инструкциями в этом разделе, вам понадобятся:

  1. Роль admin или resource-manager.clouds.owner в облаке.

  2. Работающая ферма AD FS. Если на вашем сервере еще не настроен AD FS, установите и настройте его. Для развертывания AD FS вам также необходимо установить и настроить Active Directory Domain Services (AD DS).

    Если у вас нет машины с ОС Windows, чтобы развернуть сервер AD FS, вы можете создать виртуальную машину в Яндекс.Облаке.

    Совет

    В ферму рекомендуется включать более одного сервера, чтобы обеспечить большую надежность аутентификации.

  3. Действующий сертификат, который используется для подписи в службе AD FS. Если у вас нет действующего SSL-сертификата, получите новый.

    Имя субъекта в сертификате должно содержать FQDN сервера поставщика удостоверений, например fs.contoso.com, чтобы страница аутентификации не могла быть заблокирована браузером.

Создайте федерацию в облаке

Чтобы создать федерацию в IAM:

  1. Откройте страницу каталога в консоли управления.

  2. В меню слева выберите вкладку Федерации.

  3. Нажмите Создать федерацию.

  4. Задайте имя федерации. Имя должно быть уникальным в каталоге.

  5. При необходимости добавьте описание.

  6. В поле Время жизни cookie укажите время, в течении которого браузер не должен требовать у пользователя повторной аутентификации.

  7. В поле IdP Issuer укажите ссылку в формате http://<ADFS>/adfs/services/trust, где <ADFS> — это FQDN вашего AD FS сервера.

  8. В поле SSO метод выберите POST.

  9. В поле Ссылка на страницу для входа в IdP укажите ссылку в формате https://[ADFS]/adfs/ls/, где <ADFS> — это FQDN вашего AD FS сервера.

  10. Включите опцию Автоматически создавать пользователей, чтобы аутентифицированный пользователь автоматически добавлялся в облако. Эта опция упрощает процесс заведения пользователей, но созданному таким образом пользователю по умолчанию назначается только роль resource-manager.clouds.member: он не сможет выполнять никаких операций с ресурсами в этом облаке. Исключение — те ресурсы, на которые назначены роли системной группе allUsers или allAuthenticatedUsers.

    Если эту опцию не включать, то пользователь, которого не добавили в облако, не сможет войти в консоль управления, даже если пройдет аутентификацию на вашем сервере. В этом случае вы можете управлять белым списком пользователей, которым разрешено пользоваться Яндекс.Облаком.

Если у вас еще нет интерфейса командной строки Яндекс.Облака, установите и инициализируйте его.

По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name или --folder-id.

  1. Посмотрите описание команды создания федерации:

    $ yc iam federation create --help
    
  2. Создайте федерацию:

    $ yc iam federation create --name my-federation \
      --auto-create-account-on-login \
      --cookie-max-age 12h \
      --issuer "http://example.com/adfs/services/trust" \
      --sso-binding POST \
      --sso-url "https://example.com/adfs/ls/"
    

    Где:

    • name — имя федерации. Имя должно быть уникальным в каталоге.

    • auto-create-account-on-login — флаг, активирующий автоматическое создание новых пользователей в облаке после аутентификации на IdP-сервере. Эта опция упрощает процесс заведения пользователей, но созданному таким образом пользователю по умолчанию назначается только роль resource-manager.clouds.member: он не сможет выполнять никаких операций с ресурсами в этом облаке. Исключение — те ресурсы, на которые назначены роли системной группе allUsers или allAuthenticatedUsers.

      Если эту опцию не включать, то пользователь, которого не добавили в облако, не сможет войти в консоль управления, даже если пройдет аутентификацию на вашем сервере. В этом случае вы можете управлять белым списком пользователей, которым разрешено пользоваться Яндекс.Облаком.

    • cookie-max-age — время, в течении которого браузер не должен требовать у пользователя повторной аутентификации.

    • issuer — идентификатор IdP-сервера, на котором должна происходить аутентификация.

      Укажите ссылку в формате http://<ADFS>/adfs/services/trust, где <ADFS> — это FQDN вашего AD FS сервера.

    • sso-url — URL-адрес страницы, на которую браузер должен перенаправить пользователя для аутентификации.

      Укажите ссылку в формате https://[ADFS]/adfs/ls/, где <ADFS> — это FQDN вашего AD FS сервера.

    • sso-binding — укажите тип привязки для Single Sign-on. Большинство поставщиков поддерживают тип привязки POST.

  1. Получите идентификатор каталога, в котором вы будете создавать федерацию.

  2. Создайте файл с телом запроса, например body.json:

    {
      "folderId": "<ID каталога>",
      "name": "my-federation",
      "autocreateUsers": true,
      "cookieMaxAge":"43200s",
      "issuer": "http://example.com/adfs/services/trust",
      "ssoUrl": "https://example.com/adfs/ls/",
      "ssoBinding": "POST"
    }
    

    Где:

    • folderId — идентификатор каталога.

    • name — имя федерации. Имя должно быть уникальным в каталоге.

    • autocreateUsers — флаг, активирующий автоматическое создание новых пользователей в облаке после аутентификации на IdP-сервере. Эта опция упрощает процесс заведения пользователей, но созданному таким образом пользователю по умолчанию назначается только роль resource-manager.clouds.member: он не сможет выполнять никаких операций с ресурсами в этом облаке. Исключение — те ресурсы, на которые назначены роли системной группе allUsers или allAuthenticatedUsers.

      Если эту опцию не включать, то пользователь, которого не добавили в облако, не сможет войти в консоль управления, даже если пройдет аутентификацию на вашем сервере. В этом случае вы можете управлять белым списком пользователей, которым разрешено пользоваться Яндекс.Облаком.

    • cookieMaxAge — время, в течении которого браузер не должен требовать у пользователя повторной аутентификации.

    • issuer — идентификатор IdP-сервера, на котором должна происходить аутентификация.

      Укажите ссылку в формате http://<ADFS>/adfs/services/trust, где <ADFS> — это FQDN вашего AD FS сервера.

    • ssoUrl — URL-адрес страницы, на которую браузер должен перенаправить пользователя для аутентификации.

      Укажите ссылку в формате https://[ADFS]/adfs/ls/, где <ADFS> — это FQDN вашего AD FS сервера.

    • ssoBinding — укажите тип привязки для Single Sign-on. Большинство поставщиков поддерживают тип привязки POST.

  3. Создайте федерацию с помощью метода create:

    $ curl -X POST \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer <IAM-токен>" \
      -d '@body.json' \
      https://iam.api.cloud.yandex.net/iam/v1/saml/federations
    {
     "done": true,
     "metadata": {
      "@type": "type.googleapis.com/yandex.cloud.iam.v1.saml.CreateFederationMetadata",
      "federationId": "ajeobmje4dgj0belagb9"
     },
     ...
    

    В ответе, в свойстве federationId, будет указан идентификатор созданной федерации, сохраните его. Этот идентификатор понадобится на следующих шагах.

Укажите сертификаты для федерации

Когда поставщик удостоверений (IdP) сообщает Яндекс.Облаку, что пользователь прошел аутентификацию, он подписывает сообщение своим сертификатом. Чтобы Яндекс.Облако могло проверить этот сертификат, добавьте его в созданную федерацию в IAM.

Совет

Чтобы аутентификация не прерывалась в тот момент, когда у очередного сертификата закончился срок действия, рекомендуется добавлять в федерацию несколько сертификатов — текущий и те, которые будут использоваться после текущего. Если один сертификат окажется недействительным, Яндекс.Облако попробует проверить подпись другим сертификатом.

Чтобы получить сертификат службы AD FS:

  1. Войдите на ваш сервер AD FS и откройте Server Manager.
  2. Откройте консоль управления AD FS: ToolsAD FS Management.
  3. В открывшемся окне в дереве слева нажмите ServicesCertificates.
  4. Нажмите правой кнопкой мыши на сертификате в блоке Token-signing и выберите View certificate.
  5. В открывшемся окне перейдите на вкладку Details.
  6. Нажмите кнопку Copy to file.
  7. Нажмите кнопку Next.
  8. Выберите формат Base-64 encoded X.509 (.CER) и нажмите Next.
  9. Укажите, куда сохранить сертификат и с каким именем, и нажмите Next.
  10. Проверьте настройки экспорта сертификата и нажмите Finish.

Чтобы добавить сертификат в федерацию:

  1. Откройте страницу каталога в консоли управления.
  2. В меню слева выберите вкладку Федерации.
  3. Нажмите на имя федерации, которой вы хотите добавить сертификат.
  4. Нажмите на кнопку Добавить сертификат внизу страницы.
  5. Выберите способ добавления сертификата:
    • Чтобы добавить сертификат в виде файла, нажмите Выбрать файл и укажите путь к нему.
    • Чтобы вставить скопированное содержимое сертификата, выберите способ Текст и вставьте содержимое.

Если у вас еще нет интерфейса командной строки Яндекс.Облака, установите и инициализируйте его.

По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name или --folder-id.

  1. Посмотрите описание команды добавления сертификата:

    $ yc iam certificate create --help
    
  2. Добавьте сертификат для федерации, указав путь к файлу сертификата:

    $ yc iam certificate create --federation-name my-federation \
      --name "my-certificate" \
      --certificate-file test.pem
    

Чтобы добавить сертификат, воспользуйтесь методом create для ресурса Certificate:

  1. Сформируйте тело запроса, указав содержимое сертификата в свойстве data:

    {
      "federationId": "<ID федерации>",
      "name": "my-certificate",
      "data": "MII...=="
    }
    
  2. Отправьте запрос на добавление сертификата:

    $ export IAM_TOKEN=CggaATEVAgA...
    $ curl -X POST \
        -H "Content-Type: application/json" \
        -H "Authorization: Bearer ${IAM_TOKEN}" \
        -d '@body.json' \
        "https://iam.api.cloud.yandex.net/iam/v1/saml/certificates"
    

Когда вы настроите аутентификацию с помощью федерации, пользователи смогут войти в консоль управления по ссылке, в которой содержится идентификатор федерации. Эту же ссылку необходимо будет указать при настройке сервера аутентификации.

Получите и сохраните эту ссылку:

  1. Получите идентификатор федерации:

    1. Откройте страницу каталога в консоли управления.
    2. В меню слева выберите вкладку Федерации.
    3. Скопируйте идентификатор федерации, для которой вы настраиваете доступ.
  2. Сформируйте ссылку с помощью полученного идентификатора:

    https://console.cloud.yandex.ru/federations/<ID федерации>

Настройте аутентификацию на сервере AD FS

После того, как вы получили ссылку для входа в консоль управления вы можете настроить сервер AD FS так, чтобы он сообщал консоли управления о каждой успешной аутентификации и возвращал пользователя на указанный адрес для входа в консоль управления.

Инструкции в этом разделе написаны для ОС Windows Server 2016, для других версий шаги могут отличаться.

Чтобы настроить аутентификацию на сервере AD FS:

  1. Создайте отношение доверия с проверяющей стороной
  2. Настройте Claims Mapping

Создайте отношение доверия с проверяющей стороной

AD FS требует создавать отношение доверия с проверяющей стороной (relying party trust) для каждого поставщика услуг (Service Provider, SP), который будет использовать AD FS для аутентификации.

Создайте отношение доверия с проверяющей стороной для федерации, созданной в облаке:

  1. Войдите на ваш сервер AD FS и откройте Server Manager.

  2. Откройте консоль управления AD FS: ToolsAD FS Management.

  3. В списке действий выберите Add Relying Party Trust.

  4. Откроется окно помощника. На первой странице выберите Claims aware и нажмите Start.

  5. Выберите Enter data about the relying party manually и нажмите Next.

  6. Задайте имя, например Yandex.Cloud, и нажмите Next.

  7. На следующем шаге вас попросят указать сертификат для подписи токенов. Этот шаг необязательный, поэтому нажмите Next.

  8. На шаге Configure URL выберите Enable support for the SAML 2.0 WebSSO protocol и укажите ссылку для входа в консоль, полученную ранее. После этого нажмите Next.

    image

  9. На следующей странице введите в качестве идентификатора эту же ссылку для входа в консоль и нажмите Add. После этого нажмите Next.

  10. На следующей странице можно выбрать, кому будет доступна аутентификация с помощью этой федерации. По умолчанию выбрана политика Permit for everyone, которая разрешает доступ для всех пользователей.

    Вы можете выбрать другую политику. Например, чтобы разрешить доступ только для отдельной группы пользователей, выберите Permit specific group и нажмите на слово <parameter>, чтобы выбрать, для каких групп разрешить доступ. Подробнее о политиках управления доступом.

    image

  11. Нажмите Next.

  12. На странице Ready to Add Trust проверьте введенные данные и нажмите Close.

Настройте Claims Mapping

Когда AD FS аутентифицирует пользователя, она отправляет в Яндекс.Облако SAML-сообщение с подтверждением об успешной аутентификации. В элементе NameID в этом сообщении должно указываться, кто именно был аутентифицирован. Для этого необходимо настроить соответствие данных пользователя элементам SAML-сообщения.

Важная информация

Идентификатор NameID должен быть уникальным для всех пользователей федерации. В качестве идентификатора рекомендуется указывать User Principal Name (UPN) или адрес электронной почты.

Чтобы настроить соответствие данных пользователя элементам SAML-сообщения:

  1. В консоли управления AD FS в блоке Relying Party Trusts нажмите правой кнопкой мыши на созданном ранее отношении доверия с проверяющей стороной и выберите Edit Claim Issuance Policy.
  2. В открывшемся окне нажмите Add Rule.
  3. Выберите Send LDAP Attributes as Claims и нажмите Next.
  4. На следующей странице настройте, что будет передаваться в полях сообщения:
    1. В поле Claim rule name задайте имя правила, например Claims mapping

    2. В поле Attribute Store выберите Active Directory.

    3. Укажите, что будет передаваться в качестве Name ID — уникального идентификатора пользователя. Для этого добавьте строчку в списке Mapping of LDAP attributes:

      В LDAP Attribute выберите User-Principal-Name или E-Mail-Addresses.

      В Outgoing Claim Type выберите Name ID.

    4. Чтобы пользователь мог обратиться в техподдержку Яндекс.Облака из консоли управления, настройте, чтобы сервер передавал адрес электронной почты (E-Mail Address и имя пользователя (Name):

      image

      Вы также можете передавать отдельно имя и фамилию пользователя. Для этого вместо Name используйте типы Given Name и Surname.

  5. Нажмите Finish, затем нажмите OK, чтобы закрыть окно Edit Claim Issuance Policy.

Добавьте пользователей в облако

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

Чтобы добавить пользователей федерации в облако:

  1. Откройте страницу Управление доступом для выбранного облака. Если необходимо, переключитесь на другое облако.

  2. Нажмите на стрелку возле кнопки Добавить пользователя.
  3. Выберите Добавить федеративных пользователей.
  4. Выберите федерацию, из которой необходимо добавить пользователей.
  5. Перечислите Name ID пользователей, разделяя их переносами строк.

Если у вас еще нет интерфейса командной строки Яндекс.Облака, установите и инициализируйте его.

По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name или --folder-id.

  1. Посмотрите описание команды добавления пользователей:

    $ yc iam federation add-user-accounts --help
    
  2. Добавьте пользователей, перечислив их Name ID через запятую:

    $ yc iam federation add-user-accounts --name my-federation \
      --name-ids=alice@example.com,bob@example.com,charlie@example.com
    

Чтобы добавить пользователей федерации в облако:

  1. Сформируйте файл с телом запроса, например body.json. В теле запроса укажите массив Name ID пользователей, которых необходимо добавить:

    {
      "nameIds": [
        "alice@example.com",
        "bob@example.com",
        "charlie@example.com"
      ]
    }
    
  2. Отправьте запрос, указав в параметрах идентификатор федерации:

    $ curl -X POST \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer <IAM-токен>" \
      -d '@body.json' \
      https://iam.api.cloud.yandex.net/iam/v1/saml/federations/<ID федерации>:addUserAccounts
    

Протестируйте аутентификацию

Теперь, когда вы закончили настройку аутентификации с помощью Active Directory, проверьте ее работу:

  1. Откройте браузер в гостевом режиме или режиме инкогнито для чистой симуляции нового пользователя.

  2. Перейдите по ссылке для входа в консоль управления, которую вы получили ранее. Браузер должен перенаправить вас на страницу аутентификации в AD FS, которая по умолчанию выглядит так:

    image

  3. Введите ваши данные для аутентификации. По умолчанию, необходимо ввести UPN и пароль. Затем нажмите кнопку Sign in.

  4. После успешной аутентификации AD FS перенаправит вас обратно по ссылке для входа в консоль управления, а после этого — на главную страницу консоли управления. В правом верхнем углу вы можете увидеть, что вы вошли в консоль от имени аккаунта в Active Directory.

Что дальше