질문
현재 스펙은 nginx ingress + k8s 예정이고 springboot cloud는 쓰지 않을 예정 (메모리 절약)
한다면 인증만 Gateway에서 처리하도록 할 예정이다
- 인증을 nginx ingress에서 처리할때 토큰을 파싱해서 클레임(memberPrincipal 내부 정보)을 헤더에 담아서 보내는 방식이 맞는지?
- 내부 api는 어떻게 보안을 처리해야 하는지?
답변
<aside>
<img src="/icons/thought_blue.svg" alt="/icons/thought_blue.svg" width="40px" />
인증(Authentication): JWT 유효성, 서명, 만료, issuer/audience
인가(Authorization): role/scope, 리소스 소유권 등
</aside>
<aside>
보통 MSA에서 인증/인가는 두 가지 방법으로 처리한다.
- 각 모듈에서 인증 인가 하는 방법 => 토큰을 그대로 가져옴
- 토큰 가져오지 않고, 커스텀 헤더에 정보 그대로 작성 (ex id, role, nickname등) 내부적으로 신뢰함
</aside>
Ingress는 원래 라우팅 중심이고, API Gateway는 정책 중심
Ingress(Nginx)는 기본적으로
- kubernetes용 클러스터 외부 트래픽 라우팅 == 호스트/경로 기반 라우팅
- TLS 종료
- 약간의 헤더 조작
API Gateway가 맡는 건 보통 추가로:
- 인증/인가(JWT 검증, scope/role, 클라이언트별 정책)
- Rate limit/Quota(사용자/키/플랜 단위)
- Request/Response 변환, 버전 관리