Мы рассматриваем возможность использования Keycloak для наших общедоступных API-интерфейсов REST (в основном для приложений загрузки Spring) для авторизации и аутентификации наших пользователей.
Чтобы не делать пользовательский интерфейс администратора общедоступным, мы хотим ограничить его. Наша идея состоит в том, чтобы создать два экземпляра, но получить доступ к одной и той же базе данных.
общедоступный экземпляр Keycloak, который публикует только то, что необходимо, например. путь администратора недоступен. В этом случае должны быть доступны только пути, рекомендованные здесь: https://www.keycloak.org/server/reverseproxy#_exposed_path_recommendations.
частный экземпляр Keycloak, который доступен только из внутренней сети, но предлагает пользовательский интерфейс администратора (консоль). С помощью которого можно управлять пользователями/разрешениями.
Является ли это допустимым решением иметь два разных экземпляра, но с одной и той же базой данных, или есть ли здесь другие рекомендации, чтобы не публиковать пользовательский интерфейс/пути администратора?
Да, это, безусловно, обычная установка. В зависимости от ваших требований всегда рекомендуется иметь более одного экземпляра Keycloak в одной базе данных из соображений доступности. Keycloak разделяет некоторые данные памяти (например, сеансы) в кэше Infinispan, который совместно используется одним или несколькими экземплярами Keycloak (обычно называемыми кластером).
Затем вы должны использовать балансировщик нагрузки (например, haproxy, nginx, apache, выбор практически бесконечен) и настроить его для отправки запросов к фактическим экземплярам Keycloak.
Возможная установка может быть следующей: Использование 4 экземпляров Keycloak на 4 серверах:
Затем вы можете добавить 2 балансировщика нагрузки:
В этом примере keycloak.internal.example.com будет экземпляром, к которому вы подключаетесь для выполнения административных задач в Keycloak через Admin Console или Admin API, а keycloak.example.com будет хостом, который вы используете. для Auth{n,z} для ваших приложений.
Ограничение доступа к Admin API и Admin Console можно выполнить на уровне балансировщика нагрузки (ограничивая запросы по этим путям), но начиная с Keycloak 20 также можно полностью отключить Admin API и Admin Console. Это делается путем отключения соответствующих функций, указанных в документации. Таким образом, вы можете отключить функции «admin-api», «admin» и «admin2». Если вы сделаете это на экземплярах public-keycloak-*, то запросы к общедоступному балансировщику нагрузки никогда не смогут в конечном итоге коснуться Admin API или консоли, потому что Keycloak изначально настроен так, чтобы просто не обслуживать эти запросы.