2016-12-07 5 views
5

마이크로 서비스 아키텍처를 사용하는 응용 프로그램을 작성 중입니다. 각 마이크로 서비스는 자체 마이크로 소프트 서비스와 직접적인 관련이 없습니다. 각 마이크로 서비스에서 우리는 서비스의 상태 변화를 알리기 위해 CQRS와 이벤트 소싱을 사용하고 있습니다. 관심이 있고 데이터를 업데이트 할 수있는 경우 다른 서비스에 해당 이벤트에 대한 정보가 제공됩니다.마이크로 서비스 아키텍처에서 보안 서비스가 단일 실패 지점입니까?

지금까지 시스템이 잘 작동합니다. 하나의 마이크로 서비스가 중단되면 다른 서비스는 계속 작동합니다. 중단 된 서비스가 다시 시작된 후에는 부재 중 발생한 모든 이벤트를 수신하고 해당 이벤트에 따라 자체 상태를 업데이트합니다.

이제 서비스를 보호해야하며 IdentityServer를 사용하고 있습니다. 토큰을 얻기 위해 다른 마이크로 서비스에서 호출 할 보안 서비스가 하나 더 있습니다. 마이크로 서비스가 다른 마이크로 서비스와 직접 대화해야하는 것은 이번이 처음입니다.

이 방법의 문제점은 보안 서버가 다운되면 전체 시스템이 다운된다는 것입니다.

나는 다음과 같은 솔루션에 대해 생각하고 :

모든 microservice가 자신의 데이터베이스에 사용자 데이터를 유지해야한다. 사용자가 마이크로 서비스에 액세스하면 사용자는 보안 서비스에 대한 원격 호출없이 서비스 내에서 인증됩니다. 나는 여전히 사용자 관리만을위한 보안 서비스를 제공해야한다. 사용자를 변경하면 이벤트가 다시 발생하고 다른 마이크로 서비스는 사용자 데이터를 업데이트 할 수 있습니다. 물론 https가있는 모든 것. 보안을 위해 중복 코드를 줄이기 위해, 너겟 패키지를 사용할 수 있습니다.

이 방법이 합리적인 방법이라고 생각하십니까? 당신의 조언

에 대한

감사

답변

1

하나 개의 특정 보안 서비스에 반대 어떤 microservice를 손상 공격자가 사용할 수있는 사용자 데이터의 위험을 소개하는 것입니다 귀하의 솔루션입니다. 나는 이것이 당신이 받아들이기를 원하지 않는 중요한 차이와 위험이라고 생각합니다.

OAuth2/OpenID Connect와 유사한 SSO 솔루션을 사용하면 각 마이크로 서비 스 (SSO 통화에있는 Service Povider, SP)가 각 요청에 대해 보안 서비스 (ID 제공자, IP)에 연결할 필요가 없습니다 . 클라이언트 (마이크로 서비스의 소비자 인 클라이언트)가 IP로부터 토큰을 얻으면 토큰은 (예를 들어 공개 키 암호화를 통해) IP와 독립적으로 SP에서 검증 될 수 있습니다. 즉, IP가 다운되면 새로운 액세스 토큰은 발행되지 않지만 이미 발행 된 트랜잭션은 계속 작동하며 마이크로 서비스는 반드시 소비자를 통해서만 직접 대화 할 필요는 없습니다.

+0

귀하의 요지를 봅니다. 이는 성능상의 이유로 알고있는 것이 좋습니다. 그러나 전체 시스템이 하나의 서비스에 의존한다는 초기 문제는 여전히 해결되지 않았습니다. 자네가 말하기를이 건축물을 사용하는 이비는 이런 위험에 처해 있어야합니까? netflix조차? – kaz

+0

분명히 @Illiakaill 나는 그것을 이겼지 만 그가 옳았다 (upvoted! :)), 당신은 여전히 ​​당신이 원하는만큼 많은 노드에 ID 공급자를 배포 할 수 있고 다른 어떤 경우처럼 적절한 고 가용성을 만들 수 있습니다. 따라서 "하나의 특정"보안 서비스에 대해 말하면, 그것은 논리적 인 수준이므로 HA의 여러 물리적 컴퓨터가 될 수 있습니다. –

+0

나는이 서비스가 동일한 보안 서비스의 인스턴스이기 때문에 데이터베이스를 공유해서는 안되나? 그게 여전히 실패의 단일 지점이 아닌가요? – kaz

1

귀하의 솔루션은 여러 마이크로 서비스에 걸쳐 IdentityServer의 논리와 상태를 복제하는 것이 좋습니다. 실패 위험 (HA 클러스터)을 최소화하기 위해 지리적으로 분산되어있는 여러 장소에 IdentityServer의 여러 인스턴스를 생성하여 본질적으로 똑같은 방법으로보다 나은 방법으로 달성 할 수 있습니다. 다중 서비스에서이 논리를 복제하여 (NuGet 패키지를 다시 사용하여도) 더 많은 위험을 초래할 수 있습니다. 그 너겟을 모든 마이크로 서비스에 연결해야합니다. 이것이 가능한 오류의 원인 중 하나입니다.

답글에 언급 된 Gabor과 마찬가지로 사용자 데이터베이스가 손상 될 위험이 커집니다.

새 버전의 IdentityServer를 배포 한 후에 오류가 발생할 수 있다는 사실을 염려 할 경우 프로덕션 환경에 배포하기 전에 준비 환경에서보다 철저하게 테스트하여 해결할 수 있습니다.