Какие задачи решаем?
В Яндекс Браузере для организаций есть широкие возможности по управлению политиками доступа пользователям к ресурсам в интернет и внутри организации. Часто заказчики (ИБ, Админы) хотят исключить возможность входа пользователей в сервисы Яндекс 360 через браузер, отличный от Яндекс Браузер, т.к. это позволяет применять политики браузера для всех пользователей в Яндекс 360 Политики включают в себя возможность ограничить скачивание или загрузку файлов, например, в Яндекс Диск, накладывать водяные знаки в сервисе Яндекс Документы и многое другое. Так же можно ограничить вход в сервисы Яндекс 360 только корпоративными аккаунтами и исключить личные учетные записи.
Варианты решения
Сейчас в Яндекс Браузере есть несколько вариантов ограничить вход на ресурсы только корпоративным браузером. Они отличаются сложностью реализации, но сводятся к тому, что браузер может добавлять специальные заголовки в запросы. Есть вариант добавления статических заголовков и динамических. При работе с Яндекс 360 можем проверять наличие заголовков при входе пользователей через SSO. В процессе аутентификации в сервисе Яндекс, пользователь перенаправляется в IDP (например Keycloak или ADFS) и перед тем, как пропустить пользователя, мы можем проверить наличие необходимых заголовков
Пример реализации
Рассмотрим на примере использования статического заголовка в браузере и с использованием SSO + Keycloak Схема реализации:
-
Пользователь заходит в сервис Яндекс 360 со своей корпоративной почтой
-
Яндекс 360 перенаправляет пользователя на Nginx, работающий в режиме прокси, в соответствии с настройками SSO
-
Nginx проверяет наличие заголовка в HTTP запросе и при соответствии его определенному значению, проксирует запрос в Keycloak
-
В случае если заголовка нет или его значение неверное, показываем пользователю страницу с ошибкой
-
При успешной аутентификации в Keycloak пользователь перенаправляется обратно в Яндекс 360 и работает в сервисах
Потребуется сделать следующие настройки:
-
Настроить Keycloak для аутентификации пользователей Яндекс 360
-
Настроить Nginx для проксирования запросов в Keycloak и проверки заголовков браузера
-
Настроить браузер в консоли управления для добавления заголовка
-
Настроить параметры SSO в организации Яндекс 360 для аутентификации пользователей через Keycloak
1. Настройка Keycloak для аутентификации пользователей
-
Делаем базовые настройки в соответствии с документацией Keycloak
-
Настраиваем параметры Client в соответствии с рекомендациями
-
Далее при настройке Realm в Keycloak в качестве Frontend URL указываем имя Nginx proxy:
-
Например: Keycloak доступен по адресу
https://kc.domain.ru, сервер с Nginx доступен по адресуhttps://proxy.domain.ru, тогда в качестве Frontend URL необходимо указатьhttps://proxy.domain.ru
-

2. Настройка Nginx для проверки браузера
Тут опишу параметры, которые относятся именно к настройкам проксирования на Keycloak
Файл nginx.conf
http { server { listen 443 ssl; server_nameproxy.domain.ru; ssl_certificatepath/certificate.pem; ssl_certificate_keypath/private.pem; # Оставляем корневой location, чтобы можно было добраться до админки Keycloak # из любого браузера (на усмотрение, удобно для тестирования) location / { proxy_pass https://kc.domain.ru:8443/; } # Все SAML запросы проверяем на наличие заголовка. Путь может отличаться, если # используем не master realm, а какой-то другой location /realms/master/protocol/saml { # Добавляем переменную, чтобы можно было производить дополнительные проверки, # например наличие сертификата set $allowlogin "0"; if ($http_X_Yandex_CustomHeader = "SecretData") { set $allowlogin "1"; } # В случае верного заголовка проксируем запрос в Keycloak if ($allowlogin = "1") { proxy_pass https://kc.domain.ru:8443; } # Если заголовок неправильный, то возвращаем ошибку. Тут можно использовать # дополнительную логику, чтобы возвращать страницу с информацией для # пользователя, а не ошибку if ($allowlogin = "0") { return 421; } } # Добавляем берем параметры проксирования из другого файла include proxy.conf; } }
Файл proxy.conf
proxy_http_version 1.1; proxy_cache_bypass $http_upgrade; # Proxy SSL proxy_ssl_server_name on; # Proxy headers proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection Upgrade; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; # Proxy timeouts proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s;
3. Настройка заголовка в консоли браузера
-
Для браузера задать политику
YandexCustomHeaderравным значению проверяемому в Nginx, напримерSecretDataПодробнее про настройку политики в справке браузера -
Так же можно настроить политику
YandexCustomHeaderSettings, которая разрешает отправку заголовка, только на определенные URL, в нашем случае это будет https://proxy.domain.ru -
Так же добавлю, что этот заголовок и его значение не отображаются ни в инструментах разработчика (их, кстати, тоже можно отключить), ни в свойствах browser://policy
Политики отвечающие за «кастомный» заголовок
4. Настройка SSO в организации Яндекс 350
В организации Яндекс 360 необходимо настроить SSO в соответствии с документацией.
В настройках SSO URL страницы входа и Издатель поставщика удостоверений, должны указывать на Nginx (в нашем примере proxy.domain.ru
Что получаем в результате
-
Пользователи могут зайти в сервисы Яндекс 360 только с использованием Яндекс Браузер для организаций
-
Соответственно можно принудительно применять различные политики безопасности для всех пользователей сервиса (ограничения действий, интеграции с SIEM и DLP и многое другое)
-
Из недостатков: требуется расширенная (платная) версия Яндекс Браузер и тариф Яндекс 360 с поддержкой SSO
ссылка на оригинал статьи https://habr.com/ru/articles/934192/
Добавить комментарий