API Gateway 인가 체인 설계 - 인증 뒤에 남는 진짜 권한 문제를 어디서 풀 것인가
API Gateway를 도입한 뒤에도 인가 정책이 계속 서비스 내부로 새는 이유와, 게이트웨이, BFF, 서비스 계층 사이에서 권한 검사를 어떤 체인으로 나눠야 유지보수가 쉬운지 정리합니다.
인증을 붙였는데 권한 문제는 왜 계속 남을까
API Gateway를 도입하면 많은 팀이 “이제 보안이 정리되겠다”는 기대를 합니다.
실제로 인증은 꽤 많이 정리됩니다.
- 토큰 검증
- 공통 헤더 처리
- 라우팅
- rate limit
하지만 시간이 지나면 다시 비슷한 문제가 생깁니다.
- 어떤 사용자가 어떤 리소스에 접근 가능한가
- 조직별로 허용 범위가 다르다
- 관리자는 되는데 운영자는 안 된다
- 서비스마다 권한 로직이 조금씩 다르다
즉, 인증은 게이트웨이에서 정리되지만 인가는 그대로 남습니다.
그리고 이 인가를 어디서 처리할지 모호해지는 순간 시스템은 빠르게 복잡해집니다.
권한 검사를 한 곳에 몰아넣으면 왜 힘든가
게이트웨이에 다 넣는 경우
장점:
- 공통 규칙을 한 번에 통제 가능
- 외부 요청 차단이 빠름
단점:
- 도메인 문맥을 모르기 때문에 세밀한 판단이 어렵다
- 서비스별 예외가 늘수록 정책이 비대해진다
- 배포가 게이트웨이 병목으로 몰린다
각 서비스에 전부 맡기는 경우
장점:
- 도메인에 가장 가까운 판단 가능
- 서비스 독립성 유지
단점:
- 같은 권한 규칙이 여러 서비스에 중복된다
- 구현 방식이 팀마다 달라진다
- 감사와 변경 추적이 어렵다
현실적으로는 둘 중 하나가 아니라 체인 구조로 나눠야 합니다.
추천하는 인가 체인 구조
실무에서는 아래 3단 구성이 가장 안정적입니다.
1. Gateway: 거친 1차 필터
게이트웨이는 “이 요청이 애초에 들어오면 안 되는가”를 판단하는 데 집중합니다.
- 인증 여부
- 토큰 기본 스코프
- 내부/외부 채널 분리
- 테넌트 식별자 기본 검증
즉, 입장권 검사에 가깝습니다.
2. BFF 또는 API 계층: 화면/경험 단위 권한 조합
여기서는 UI나 클라이언트 흐름에 가까운 권한 규칙을 처리합니다.
- 관리자 화면 접근 가능 여부
- 특정 메뉴 노출 여부
- 읽기 전용 세션인지 여부
이 계층은 사용자 경험과 권한 표현을 묶어 다루기 좋습니다.
3. 도메인 서비스: 최종 자원 수준 권한 판단
정말 중요한 판단은 결국 도메인 안에서 끝나야 합니다.
- 이 사용자가 이 주문을 수정할 수 있는가
- 이 조직이 이 프로젝트를 삭제할 수 있는가
- 이 데이터가 이 사용자 소유인가
이 판단은 서비스가 가진 데이터와 비즈니스 규칙을 알아야 가능하기 때문입니다.
인가 체인을 나눌 때 기준이 되는 질문
권한 로직이 생겼을 때 아래 질문으로 위치를 결정하면 비교적 명확해집니다.
질문 1. 이 판단에 도메인 데이터가 필요한가
- 필요 없다면 Gateway 또는 BFF
- 필요하다면 서비스 내부
질문 2. 여러 서비스에서 반복되는 규칙인가
- 반복된다면 상위 계층에서 공통화
- 서비스 고유 규칙이면 내부 유지
질문 3. 이 규칙이 UI 흐름과 강하게 연결되는가
- 그렇다면 BFF 쪽이 자연스럽다
즉, 인가는 보안 규칙인 동시에 제품 경험 규칙이기도 합니다.
권한 모델은 코드보다 용어가 먼저다
인가 로직이 망가지는 가장 큰 이유는 구현보다 용어가 불명확하기 때문입니다.
예를 들어 아래 용어가 섞이면 금방 혼란이 옵니다.
- role
- permission
- scope
- policy
- ownership
좋은 구조는 보통 이렇게 나뉩니다.
Role: 사용자 집합의 책임 단위Permission: 가능한 행위Resource Scope: 어떤 자원 범위에 적용되는가Policy: 허용/거부 규칙 조합
이 용어 구분이 명확해야 게이트웨이, BFF, 서비스 간 역할 분리가 쉬워집니다.
마무리
API Gateway를 도입했다고 해서 인가 문제가 저절로 사라지지는 않습니다.
오히려 인증과 인가를 구분하지 않으면 더 복잡해질 수 있습니다.
핵심은 아래 세 가지입니다.
- 게이트웨이는 거친 1차 필터에 집중할 것
- UI 흐름 기반 권한은 BFF나 API 계층에서 조합할 것
- 자원 수준 최종 권한은 반드시 도메인 서비스가 판단할 것
인가 체계가 잘 설계된 시스템은 보안이 강한 것뿐 아니라 변경에도 강합니다.
어디서 어떤 권한 판단이 일어나는지가 선명하면, 서비스가 늘어나도 구조가 쉽게 무너지지 않습니다.