Это хорошие вопросы, которые нужно задавать, но, к сожалению, нет «стандартного» способа сделать это. Я бы сказал, что ваши параметры будут между 1 и 2, и причины каждого из них будут следующими:
Вариант 1 - Пересылать заголовок Auth от MS A к MS B при выполнении запроса
Если бы вы применили эту практику в масштабе с несколькими разными командами, каждая из которых владеет различными услугами, это был бы лучший маршрут. Создатель MS B не обязательно будет знать, кто звонит им в долгосрочной перспективе, поэтому для обеспечения того, чтобы они не создавали угрозы безопасности, самый простой способ выставить свои услуги - это потребовать проверяемый JWT. Это предотвратит случайное использование кем-либо своего сервиса ненадлежащим образом.
Вариант 2 - размещение внутреннего экземпляра MS B, который не подвергается inte rnet через обратный прокси-сервер, и предоставляет только те функции, которые будут необходим в кросс-микросервисной связи.
Вы можете думать об этом методе как о завершении TLS на шлюзе. Вы можете прекратить TLS в каждой службе (например, вариант 1 для JWT), или вы можете прервать его на шлюзе, чтобы трафик c из внешнего мира был зашифрован перед входом, позволяя ему свободно течь внутри стен. Шлюз также может быть единственной ответственной стороной за проверку и декодирование JWT, а затем за то, чтобы трафик c мог свободно перемещаться внутри системы после прохождения проверки.
Этот параметр очень удобен для приложений, поддерживаемых отдельными командами или разработчиками. потому что это очень легко организовать. Если каждая «внутренняя» служба просто отвечает на идентификатор пользователя / субъекта для выполнения запросов и доверяет , что идентификатор пользователя был извлечен из проверенного JWT, вы можете создать другие внутренние системы гораздо проще. Это решение является самым простым для начала работы, но может быть сложным, если вы не можете доверять другим службам или разработчикам в вашем приложении или команде.
Вариант 3 - иметь MS Запрос самостоятельно токен от провайдера аутентификации (Auth0, AWS Cognito и т. д. c.) и вызов MS MS с этим токеном
. Я бы не рекомендовал каждому сервису выдавать свой собственный токен oauth. JWT от oauth-провайдеров, таких как Auth0, выдаются пользователям , а не машинам.
При этом серьезным дополнением к облачной безопасности будет учетные данные и белый список трафика c, передаваемого между всеми Сервисы. Это могут быть такие вещи, как Kubernetes NetworkPolicys , обеспечиваемые такими инструментами, как Cilium , или это могут быть уникальные сертификаты SSL, предназначенные для уникального посредника связи для каждого отношения между службами в вашем стеке. Этот вид дополнительной безопасности на самом деле не имеет никакого отношения к вашему вышеупомянутому вопросу, но был бы дополнительным источником размышлений о защите межпроцессного взаимодействия в облачной среде.