스프링
마이크로서비스 코딩
공작소
2019.06.15
Chapter 7.
마이크로서비스의 보안
7. 마이크로서비스의 보안
마이크로서비스를 호출하는 사용자가 본인인지 인증하는(authenticate) 방법과 특정 마이크로서비스에서 요청한 작업을 수행할 수 있는 권한을 부여 받았는지(authorized) 확인하는 방법
목표
7. 마이크로서비스의 보안
- 사용자를 적절히 통제해 사용자 본인 여부를 확인하고 수행하려는 작업에 대한 권한 여부를 검증할 수 있다
- 서비스가 실행되는 인프라스트럭처를 꾸준히 패치하고 최신 상태로 유지해 취약점의 위험을 최소화한다
- 서비스는 명확히 정의된 포트로만 접근하고 소수의 인가된 서버만 접근할 수 있도록 네트워크 접근을 통제한다
안전한 애플리케이션의 특징
7. 1 OAuth2 소개
토큰 기반 보안 프레임워크
- 사용자가 제3자 서비스에서 자신을 인증할 수 있다
- 사용자 요청을 수행하기 위해 여러 서비스를 호출할 때 이 요청을 처리할 서비스에 일일이 자격 증명을 제시하지 않고도 사용자를 인증
OAuth2
7. 1 OAuth2 소개
- 보호 자원: 보호하려는 자원(마이크로서비스)이며 적절한 권한을 부여받은 인증된 사용자만 액세스할 수 있다
- 자원 소유자: 서비스를 호출할 수 있는 애플리케이션 및 서비스에 접근할 수 있는 사용자, 그리고 서비스에서 수행할 수 있는 작업을 정의한다. 자원 소유자가 등록한 애플리케이션은 식별 가능한 애플리케이션 이름과 시크릿 키를 받는다. 애플리케이션 이름과 시크릿 키는 OAuth2 토큰을 인증할 때 전달되는 자격 증명의 일부
OAuth2 - 토큰 기반의 보안 인증과 인가 프레임워크
7. 1 OAuth2 소개
3. 애플리케이션: 사용자를 대신해 서비스를 호출할 애플리케이션이다. 즉, 사용자는 서비스를 직접 호출하지 않는 대신 애플리케이션에 의존해 작업 수행
4. OAuth2 인증 서버: 애플리케이션과 소비되는 서비스 사이의 중개자다. OAuth2 서버를 사용하면 애플리케이션이 사용자 대신 호출하는 모든 서비스에 사용자의 자격 증명을 전달하지 않고도 사용자 자신을 인증할 수 있다
7. 1 OAuth2 소개
- 자원 소유자는 OAuth2 서비스로 자원에 접근할 수 있는 애플리케이션 및 사용자를 허가한다
- 사용자가 보호 서비스에 접근하려면 OAuth2 서비스에서 인증하고 토큰을 받아야 한다
- OAuth2 서버는 사용자를 인증하고 전달된 토큰의 유효성을 확인한다
- 토큰 유효성을 확인하고 사용자가 지정한 역할을 조회해서 연관된 사용자를 함께 그룹으로 묶고 사용자 그룹이 액세스할 수 있는 자원 정의
OAuth2 인증 절차
7. 2 작게 시작: 스프링과 OAuth2로 1개의 엔드포인트 보호
- 스프링 클라우드 기반의 OAuth2 인증 서비스 설정
- OAuth2 서비스와 사용자 신원을 인증 및 인가할 수 있도록 인가된 애플리케이션 역할을 하는 가짜 애플리케이션 등록
- OAuth2 패스워드 그랜트 타입을 사용해 서비스 보호
- 인증된 사용자만 호출할 수 있도록 서비스 보호
OAuth2 패스워드 그랜트 타입 구현
7.3.4 OAuth2 액세스 토큰 전파
- 주울 서비스 게이트웨이가 OAuth2 토큰을 라이선싱 서비스에 전달하도록 수정 - zuul.sensitiveHeaders: Cookie,Set-Cookie
- 라이선싱 서비스가 OAuth2 자원 서비스가 되도록 구성하고 인가 규칙을 설정
- 라이선싱 서비스 코드에서 조직 서비스를 호출하는 방법을 수정
OAuth2RestTemplate 사용으로 OAuth2 액세스 토큰 전파
7.4 자바스크립트 웹 토큰과 OAuth2
- 작다: JWT 토큰은 Base64 인코딩되어 URL이나 HTTP헤더, HTTP POST 매개변수로 쉽게 전달
- 암호로 서명되어 있다: JWT 토큰은 토큰을 발행하는 인증 서버에서 서명, 토큰이 조작되지 않았다는 것을 보장
- 자체 완비형이다: JWT 토큰은 암호로 서명되므로 서비스를 수신하는 마이크로서비스는 토큰의 내용물이 유효하다는 것을 보장 받음
- 확장 가능: 인증 서비스가 토큰을 생성할 때 토큰이 봉인되기 전에 토큰에 추가 정보를 넣을 수 있음
OAuth2 토큰 표준을 보완하기 위해 JWT 표준 등장
7.5 마이크로서비스 보안을 마치며
- 모든 서비스 통신에 HTTPS/SSL을 사용한다.
- 모든 서비스 호출은 API 게이트웨이를 통과해야 한다.
- 공개 API와 비공개 API 영역을 정한다.
- 불필요한 네트워크 포트를 차단해 마이크로서비스의 공격 범위를 제한한다.
마이크로서비스 구축 원칙
마이크로서비스의 보안
By Sungbin, Song
마이크로서비스의 보안
- 117