1 of 9

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

2 of 9

목차

  1. OAuth2 소개
  2. 작게 시작: 스프링과 OAuth2 로 1개의 엔드포인트 보호
  3. OAuth2를 사용한 조직 서비스 보호
  4. 자바스크립트 웹 토큰과 OAuth2
  5. 마이크로서비스 보안을 마치며
  6. 요약

3 of 9

보안이란?

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

인증 : 해당 사람이 어떤 사람인지 식별하는 단계

인가 : 해당 사람에게 권한이 있는지 확인하는 단계

4 of 9

OAuth2 소개

4개의 컴포넌트로 구성

  1. 보호자원 : 보호하려는 자원이며 적절한 권한을 부여받은 인증된 사용자만 액세스할 수 있다.
  2. 자원소유자 : 서비스를 호출할 수 있는 어플리케이션 및 서비스에 접근할 수 있는 사용자, 그리고 서비스에서 수행할 수 있는 작업을 정의한다. 자원 소유자가 등록한 어플리케이션은 식별 가능한 어플리케이션 이름과 시크릿 키를 받는다. 어플리케이션 이름과 시크릿 키는 OAuth2 토큰을 인증할 때 전달되는 자격 증명의 일부다.
  3. 어플리케이션 : 사용자를 대신해 서비스를 호출할 어플리케이션이다. 즉, 사용자는 서비스를 직접 호출하지 않는 대신 어플리케이션에 의존해 작업을 수행한다.
  4. OAuth2 인증 서버 : 어플리케이션과 소비되는 서비스 사이의 중개자다. OAuth2 서버를 사용하면 어플리케이션이 사용자를 대신 호출하는 모든 서비스에 사용자의 자격 증명을 전달하지 않고도 사용자 자신을 인증할 수 있다.

5 of 9

6 of 9

OAuth2 그랜트 타입

  • 패스워드
  • 클라이언트 자격 증명
  • 인가 코드
  • 암시적

-> 부록 B 참조

7 of 9

실습!!

패스워드 그랜트 방식으로 인증하고,

각 계정별로 역할을 부여해서 인가된 사용자만 접근하는 것을 확인해 보자!

토큰은 6장에서 상관관계 ID 가 넘어가듯이 서비스에서 서비스로 전달!

JWT OAuth2 를 사용하기 쉽게 자바스크립트에서 구현된 라이브러리

8 of 9

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

OAuth2 는 마이크로서비스 보안의 일부일 뿐이다.

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

이것들 이외에도 항상 보안에 트렌드를 확인하고 의심하고 대비하는 자세가 필요하다.

9 of 9

요약

  • OAuth2 는 사용자를 인증하는 토큰 기반의 인증 프레임워크다.
  • OAuth2 를 이용하면 사용자 요청을 처리하는 각 마이크로서비스를 호출할 때마다 사용자 자격 증명을 제공할 필요가 없다.
  • OAuth2 는 그랜트라는 다양한 메커니즘을 제공해 웹 서비스 호출을 보호한다.
  • OAuth2 를 스프링에서 사용하려면 OAuth2 기반의 인증 서비스를 설정해야 한다.
  • 서비스를 호출하려는 모든 어플리케이션은 OAuth2 인증 서비스에 등록되어야 한다.
  • 어플리케이션마다 고유 어플리케이션 이름과 시크릿 키가 있다.
  • 사용자 자격 증명과 역할은 메모리나 데이터 저장소에 있고 스프링 보안으로 접근한다.
  • 각 서비스는 역할이 수행할 행위를 정의해야 한다.
  • 스프링 클라우드 시큐리티는 JWT 명세를 지원한다.
  • JWT 는 OAuth2 토큰을 생성하기 위해 서명된 자바스크립트 표준을 정의한다.
  • JWT 를 사용하면 사용자 정의 필드를 명세에 삽입할 수 있다.
  • 마이크로서비스 보안은 OAuth2 를 사용하는 것 이상을 포함한다.
  • HTTPS 를 사용해 서비스 간 모든 호출을 암호화하자.
  • 서비스 게이트웨이를 사용해 서비스에 접근 가능한 지점을 줄이다.
  • 서비스가 실행되는 운영 체제의 인바운드 및 아웃바운드 포트 수를 제한해 서비스 공격 지점을 제한하자.