Аутентификация с помощью G-Suite

С помощью федерации удостоверений вы можете использовать G-Suite от Google для аутентификации в облаке.

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

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

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

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

  1. Роль admin или resource-manager.clouds.owner в облаке.
  2. Активированный домен, для которого вы будете настраивать SAML-приложение в G-Suite.

Начните создавать SAML-приложение

Прежде чем вы создадите федерацию в облаке, вам необходимо получить сведения о поставщике удостоверений (IdP), которым является SAML-приложение в G-Suite:

  1. Зайдите в консоль администратора в G-Suite.
  2. Нажмите на иконку Приложения.
  3. Нажмите на карточку SAML-приложения.
  4. Нажмите на кнопку добавления приложения (значок + в правом нижнем углу страницы).
  5. Внизу открывшегося окна нажмите Добавить свое приложение.
  6. На странице Сведения о поставщике услуг идентификации Google написаны данные сервера IdP. Не закрывайте это окно, эти данные необходимо будет ввести при создании федерации и добавлении сертификата.

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

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

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

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

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

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

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

  7. В поле IdP Issuer скопируйте ссылку, указанную в поле Идентификатор объекта на странице Сведения о поставщике услуг идентификации Google в G-Suite. Это ссылка в формате:

    https://accounts.google.com/o/saml2?idpid=<ID SAML-приложения>
    
  8. В поле Ссылка на страницу для входа в IdP скопируйте ссылку, указанную в поле URL Системы единого входа на странице Сведения о поставщике услуг идентификации Google в G-Suite. Это ссылка в формате:

    https://accounts.google.com/o/saml2/idp?idpid=<ID SAML-приложения>
    
  9. Включите опцию Автоматически создавать пользователей, чтобы новый пользователь автоматически добавлялся в облако после успешной аутентификации. Эта опция упрощает процесс заведения пользователей, но у пользователя будет только роль 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 "https://accounts.google.com/o/saml2?idpid=C03xolm0y" \
        --sso-binding POST \
        --sso-url "https://accounts.google.com/o/saml2/idp?idpid=C03xolm0y"
    

    Где:

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

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

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

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

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

      Скопируйте сюда ссылку, указанную в поле Идентификатор объекта на странице Сведения о поставщике услуг идентификации Google в G-Suite. Это ссылка в формате:

      https://accounts.google.com/o/saml2?idpid=<ID SAML-приложения>
      
    • sso-url — URL-адрес страницы, на которую браузер должен перенаправить пользователя для аутентификации.

      Скопируйте сюда ссылку, указанную в поле URL Системы единого входа на странице Сведения о поставщике услуг идентификации Google в G-Suite. Это ссылка в формате:

      https://accounts.google.com/o/saml2/idp?idpid=<ID SAML-приложения>
      
    • sso-binding — укажите тип привязки для Single Sign-on. Большинство поставщиков поддерживают тип привязки POST.

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

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

    {
      "folderId": "<ID каталога>",
      "name": "my-federation",
      "autocreateUsers": true,
      "cookieMaxAge":"43200s",
      "issuer": "https://accounts.google.com/o/saml2?idpid=C03xolm0y",
      "ssoUrl": "https://accounts.google.com/o/saml2/idp?idpid=C03xolm0y",
      "ssoBinding": "POST"
    }
    

    Где:

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

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

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

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

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

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

      Скопируйте сюда ссылку, указанную в поле Идентификатор объекта на странице Сведения о поставщике услуг идентификации Google в G-Suite. Это ссылка в формате:

      https://accounts.google.com/o/saml2?idpid=<ID SAML-приложения>
      
    • ssoUrl — URL-адрес страницы, на которую браузер должен перенаправить пользователя для аутентификации.

      Скопируйте сюда ссылку, указанную в поле URL Системы единого входа на странице Сведения о поставщике услуг идентификации Google в G-Suite. Это ссылка в формате:

      https://accounts.google.com/o/saml2/idp?idpid=<ID SAML-приложения>
      
    • 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.

Совет

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

Скачайте сертификат с открытой страницы Сведения о поставщике услуг идентификации Google в G-Suite. Добавьте этот сертификат в созданную федерацию.

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

  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 федерации>

Завершите создание SAML-приложения

Когда создали федерацию и получили получили ссылку для входа в консоль, завершите создание SAML-приложения в G-Suite:

  1. Откройте снова окно создания SAML-приложения и нажмите Далее.

  2. Введите название SAML-приложения, например yandex-cloud-federation. Если надо, добавьте описание и логотип. Нажмите Далее.

  3. Укажите сведения о Яндекс.Облаке, которое выступает в роли поставщика услуг:

    • В полях URL ACS и Идентификатор объекта введите полученную ранее ссылку для входа в консоль.

    • Включите опцию Подписанный ответ.

    • В поле Идентификатор названия укажите, что будет сервер будет возвращать в качестве Name ID — уникального идентификатора пользователя федерации.

      Выберите Общие сведения, а рядом — Основной адрес эл. почты.

    • Остальные поля необязательные, поэтому можете не использовать их и нажать Далее.

    image

  4. Чтобы пользователь мог обратиться в техподдержку Яндекс.Облака из консоли управления, нажмите Добавить сопоставления и настройте, чтобы сервер передавал адрес электронной почты пользователя. Также рекомендуется передавать имя и фамилию пользователя. После этого нажмите Готово.

    image

  5. На следующей странице вы можете проверить введенные данные вашего SAML-приложения.

  6. Включите ваше SAML-приложение, нажав Изменить статус приложения.

  7. На открывшейся странице выберите, кому будет доступна аутентификация в этой федерации:

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

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

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

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

  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
    

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

Теперь, когда вы закончили настройку сервера, вы можете протестировать, что все работает:

  1. Откройте браузер в гостевом режиме или режиме инкогнито, чтобы не нарушить работу в консоли с аккаунтом на Яндексе.
  2. Перейдите по ссылке для входа в консоль, полученной ранее. Браузер должен перенаправить вас на страницу аутентификации в Google.
  3. Введите ваши данные для аутентификации. По умолчанию, необходимо ввести UPN и пароль и нажать Sign in.
  4. После успешной аутентификации, сервер перенаправит вас обратно по по ссылке для входа в консоль, а после на главную страницу консоли управления. В правом верхнем углу вы можете увидеть, что вы вошли в консоль от имени федеративного пользователя.

Что дальше