코딩공작소

MSA(9) - 마이크로서비스 보안 본문

어플리케이션개발/MSA

MSA(9) - 마이크로서비스 보안

안잡아모찌 2024. 7. 22. 20:50

보안이란 매우 중요한 작업이다

  • 애플리케이션 계층 : 적잘하게 사용자를 통제하여 사용자 본인 여부와 수행하려는 작업의 수행 권한 확인
  • 인프라스트럭처 : 취약점의 위험도를 최소화하도록 서비스를 항상 실행하고 패치하고 최신화
  • 네트워크 계층 : 서비스가 명확히 정의된 포트를 통해 인가된 소수의 서버에만 접근 할 수 있도록 네트워크 접근 통제 구현

 

 

 

OAuth2

사용자가 요청을 수행하기 위해 여러 서비스를 호출할 때, 각 서비스에 사용자를 인증하는 것
그랜트라는 인증 체계를 통해 REST 기반의 서비스를 보호할 수 있다.

  1. 패스워드(password)
  2. 클라이언트 증명(client credential)
  3. 인가 코드(authorization code)
  4. 암시적(implicit)

 

 

키 클록

서비스와 애플리케이션을 위한 ID 및 액세스 관리용 오픈 소스 솔루션이다.

  • 인증을 중앙 집중화하고 SSO 인증을 가능하게 한다.
  • 개발자는 비즈니스 기능에 집중할 수 있게 해준다.
  • 2단계 인증 가능

  • 보호 자원 : 마이크로 서비스
  • 자원 소유자 : 애플리케이션 이름과 시크릿 키 조합은 액세스 토큰을 인증할 때 전달되는 자격 증명의 정보 일부다.
  • 애플리케이션 : 사용자를 대신하여 서비스를 호출하는 애플리케이션
  • 인증 및 인가 서버 : 인증서버를 사용하면 자격 증명을 모든 서비스에 전달하지 않고도 자신을 인증할 수 있다.

 

 

마이크로서비스 보안에 대해

  • 모든 서비스 통신에 HTTPS/SSL(Secure Sockets Layer)을 사용
  • 모든 서비스 호출에는 API 게이트웨이를 사용
  • 서비스에 대한 영역을 지정 (공개 API / 비공개 API )
  • 불필요한 네트워크를 차단하여 마이크로서비스에 대한 공격 표면을 제한

 

마이크로서비스는 HTTPS/SSL로 제공되는 암호화된 채널로만 통신해야 한다.

서비스 게이트웨이를 사용하여 모든 서비스에 시행될 수 있는 정책 시행 지점을 정해라

보안은 접근 계층을 구축하고 최소 권한 개념을 적용하고 최소한의 네트워크 접근과 권한만 가져야 한다.
-> 공개 영역에는 클라이언트로 소비되는 모든 공개 API가 포함된다. 자체 서비스 게이트웨이 뒤에 있어야 하고 인증과 권한 부여를 수행하는 자체 인증 서비스를 가져야 한다. 보호되는 단일 경로를 거쳐야한다.
-> 비공개 영역은 핵심 애플리케이션의 기능 및 데이터를 보호하는 장벽 역할을 한다. 단일 포트로만 접근할 수 있어야 한다.

 

 


  • OAuth2 웹 서비스 호출을 보호하기 위해 다양한 메커니즘을 제공하는 토큰 기반의 인가 프레임워크이며, 이 메커니즘을 그랜트라 한다.
  • OpenID Connect(OIDC)는 OAuth2 프레임워크에 기반을 둔 상위 계층으로, 애플리케이션에 로그인한 사용자에 대한 인증 및 프로파일 정보를 제공
  • 키클록은 마이크로서비스와 애플리케이션을 위한 오픈 소스 ID 및 액세스 관리 솔루션이며, 주된 목표는 코딩 없이 서비스와 애플리케이션을 쉽게 보호하는 것이다.
  • 애플리케이션마다 키클록 애플리케이션의 고유 이름과 시크릿 키가 있다.
  • 각 서비스는 역할에 따라 수행될 행위를 정의해야 한다.
  • 스프링 클라우드 시큐리티는 JSON 웹 토큰 명세를 지원한다. JWT를 사용하면 사용자가 정의한 필드에 명세에 삽입할 수 있다.
  • 마이크로서비스를 보호하려면 인증 및 권한 부여 이상이 필요하다
  • 운영 환경에서는 HTTPS를 사용하여 서비스 간 모든 호출을 암호화해야 한다.
  • 서비스 게이트웨이를 사용하여 서비스에 도달할 수 있는 접근 지점을 줄여야 한다.
  • 서비스가 실행되는 운영 체제의 인바인드 및 아웃바운드 포트 수를 제한하여 서비스에 대한 공격 표면을 제한해야 한다.