Задать вопрос

Как лучше организовать управление доступом в микросервисной архитектуре?

Всем привет, возник у нас небольшой холивар на работе как лучше реализовать управление ролями и правами доступа в микросервисной архитектуре. Суть в следующем:
1. подразумевается взаимодействие сервисов через Kafka
2. для аутентификации есть Keycloak
3. хотим сделать централизованной управление ролями и пермишенами в отдельном securityManager
4. у каждого сервиса есть свой набор пермишенов, который хранится в самом сервисе
5. пользователи, роли и группы ролей хранятся в keycloak (так же дублируются в сервисы)
6. связь роли и пермишена хранится в каждом сервисе отдельно

вопрос как лучше реализовать сценарий создания роли если роль должна попасть в сервис и keycloak, а также надо привязать пермишены к роли. Накидал 4 варианта выполнения сценария, но у каждого есть свои плюсы и минусы.

63c11534aaea5115825102.png

Хотелось бы услышать ваши мысли на тему разных вариантов, их плюсы-минусы. Может кто-то знает как это сделать правильнее или подкинет статей толковых на эту тему?
  • Вопрос задан
  • 372 просмотра
Подписаться 8 Сложный 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
Viji
@Viji
DevOps Engineer
Сам только учусь - исходя из того что есть в нашем проекте и нашел на инете...

Сделайте так, чтобы Keycloak создавал JWT для авторизации. Т.е. в Keycloak будет не только аутентификация, но и роли\группы хранится. Таким образом Security Manager будет создавать роли в Keycloak (а пермишины? не уверен - может их создавать в базе отдельно), а все последущие коммуникации между сервисами будут включать JWT полученный после аутентификации юзера в Keycloak, т.о. сервисы будут вытаксивать авторизацию из переданного JWT перед выполнением какого-то действия.

Пермишаны наверное можешь хранить отдельно от ролей в какой-то базе - можешь кешировать ее для скорости, т.к. запросов к ней от микросервисов будет много, может даже Redis подойдет.

И да, не совсем понимаю, зачем всегда использовать Кафку - у нас микросервисы некоторые общаются и напрямую по HTTP, можно также и через Grpc. Если в Кубере можешь поставить изоляции - network policies.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы