스프링

마이크로서비스 코딩

공작소

2019.06.15

Chapter 7.

마이크로서비스의 보안

7. 마이크로서비스의 보안

마이크로서비스를 호출하는 사용자가 본인인지 인증하는(authenticate) 방법과 특정 마이크로서비스에서 요청한 작업을 수행할 수 있는 권한을 부여 받았는지(authorized) 확인하는 방법

목표

7. 마이크로서비스의 보안

  • 사용자를 적절히 통제해 사용자 본인 여부를 확인하고 수행하려는 작업에 대한 권한 여부를 검증할 수 있다
  • 서비스가 실행되는 인프라스트럭처를 꾸준히 패치하고 최신 상태로 유지해 취약점의 위험을 최소화한다
  • 서비스는 명확히 정의된 포트로만 접근하고 소수의 인가된 서버만 접근할 수 있도록 네트워크 접근을 통제한다

안전한 애플리케이션의 특징

7. 1 OAuth2 소개

토큰 기반 보안 프레임워크

 - 사용자가 제3자 서비스에서 자신을 인증할 수 있다

 - 사용자 요청을 수행하기 위해 여러 서비스를 호출할 때 이 요청을 처리할 서비스에 일일이 자격 증명을 제시하지 않고도 사용자를 인증

OAuth2

7. 1 OAuth2 소개

  1. 보호 자원: 보호하려는 자원(마이크로서비스)이며 적절한 권한을 부여받은 인증된 사용자만 액세스할 수 있다
     
  2. 자원 소유자: 서비스를 호출할 수 있는 애플리케이션 및 서비스에 접근할 수 있는 사용자, 그리고 서비스에서 수행할 수 있는 작업을 정의한다. 자원 소유자가 등록한 애플리케이션은 식별 가능한 애플리케이션 이름과 시크릿 키를 받는다. 애플리케이션 이름과 시크릿 키는 OAuth2 토큰을 인증할 때 전달되는 자격 증명의 일부
     

OAuth2 - 토큰 기반의 보안 인증과 인가 프레임워크

7. 1 OAuth2 소개

3. 애플리케이션: 사용자를 대신해 서비스를 호출할 애플리케이션이다. 즉, 사용자는 서비스를 직접 호출하지 않는 대신 애플리케이션에 의존해 작업 수행

4. OAuth2 인증 서버: 애플리케이션과 소비되는 서비스 사이의 중개자다. OAuth2 서버를 사용하면 애플리케이션이 사용자 대신 호출하는 모든 서비스에 사용자의 자격 증명을 전달하지 않고도 사용자 자신을 인증할 수 있다

7. 1 OAuth2 소개

  1. 자원 소유자는 OAuth2 서비스로 자원에 접근할 수 있는 애플리케이션 및 사용자를 허가한다
     
  2. 사용자가 보호 서비스에 접근하려면 OAuth2 서비스에서 인증하고 토큰을 받아야 한다
     
  3. OAuth2 서버는 사용자를 인증하고 전달된 토큰의 유효성을 확인한다
     
  4. 토큰 유효성을 확인하고 사용자가 지정한 역할을 조회해서 연관된 사용자를 함께 그룹으로 묶고 사용자 그룹이 액세스할 수 있는 자원 정의

OAuth2 인증 절차

7. 2 작게 시작: 스프링과 OAuth2로 1개의 엔드포인트 보호

  • 스프링 클라우드 기반의 OAuth2 인증 서비스 설정
     
  • OAuth2 서비스와 사용자 신원을 인증 및 인가할 수 있도록 인가된 애플리케이션 역할을 하는 가짜 애플리케이션 등록
     
  • OAuth2 패스워드 그랜트 타입을 사용해 서비스 보호
     
  • 인증된 사용자만 호출할 수 있도록 서비스 보호

OAuth2 패스워드 그랜트 타입 구현

7.3.4 OAuth2 액세스 토큰 전파

  1. 주울 서비스 게이트웨이가 OAuth2 토큰을 라이선싱 서비스에 전달하도록 수정 - zuul.sensitiveHeaders: Cookie,Set-Cookie

  2. 라이선싱 서비스가 OAuth2 자원 서비스가 되도록 구성하고 인가 규칙을 설정

  3. 라이선싱 서비스 코드에서 조직 서비스를 호출하는 방법을 수정
    OAuth2RestTemplate 사용으로 OAuth2 액세스 토큰 전파

7.4 자바스크립트 웹 토큰과 OAuth2

  1. 작다: JWT 토큰은 Base64 인코딩되어 URL이나 HTTP헤더, HTTP POST 매개변수로 쉽게 전달
     
  2. 암호로 서명되어 있다: JWT 토큰은 토큰을 발행하는 인증 서버에서 서명, 토큰이 조작되지 않았다는 것을 보장
     
  3. 자체 완비형이다: JWT 토큰은 암호로 서명되므로 서비스를 수신하는 마이크로서비스는 토큰의 내용물이 유효하다는 것을 보장 받음
     
  4. 확장 가능: 인증 서비스가 토큰을 생성할 때 토큰이 봉인되기 전에 토큰에 추가 정보를 넣을 수 있음

OAuth2 토큰 표준을 보완하기 위해 JWT 표준 등장

7.5 마이크로서비스 보안을 마치며

  1. 모든 서비스 통신에 HTTPS/SSL을 사용한다.

  2. 모든 서비스 호출은 API 게이트웨이를 통과해야 한다.
     
  3. 공개 API와 비공개 API 영역을 정한다.
     
  4. 불필요한 네트워크 포트를 차단해 마이크로서비스의 공격 범위를 제한한다.

마이크로서비스 구축 원칙

마이크로서비스의 보안

By Sungbin, Song

마이크로서비스의 보안

  • 146