Какие задачи решаем?
В Яндекс Браузере для организаций есть широкие возможности по управлению политиками доступа пользователям к ресурсам в интернет и внутри организации. Часто заказчики (ИБ, Админы) хотят исключить возможность входа пользователей в сервисы Яндекс 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_name proxy.domain.ru;
ssl_certificate path/certificate.pem;
ssl_certificate_key path/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