OPA(Open Policy Agent)를 이용하여 JIRA의 권한 구현하기
백엔드
OPA(Open Policy Agent)를 이용하여 JIRA의 권한 구현하기
두줄요약
OPA와 Rego로 JIRA 권한을 구현하고, Spring Security와 연동해 백엔드에서 권한 체크를 구성했습니다. 쿠버네티스 사이드카 배포로 지연을 줄였지만, 정책과 데이터 동기화는 추가 과제로 남았습니다.
핵심 내용
- OPA(Open Policy Agent)와 Rego로 JIRA 형태의 권한 정책을 구현한 사례
- JIRA의 roles, permissions, grants 데이터를 JSON으로 가져와 권한 판단에 활용
- Spring Security의 PreAuthorize와 OPA data API를 연결해 백엔드에서 권한 체크 수행
- Kubernetes에서 백엔드와 OPA를 사이드카로 함께 배포해 localhost 기반 권한 호출 구성
구조와 흐름
- 사용자 아이디, 그룹, 프로젝트 키, 퍼미션 키를 입력값으로 전달
- Rego에서 사용자/그룹이 속한 롤과 퍼미션 grants를 매칭해 allow 여부 판단
- 애플리케이션은 OPA 서버에 요청해 결과만 받아 처리
선택 이유
- Java로 직접 권한 스키마를 설계하는 것보다 구현이 단순한 점
- OPA가 메모리 기반으로 동작해 빠른 권한 체크를 기대할 수 있는 점
- 사이드카 배포로 네트워크 지연을 줄이고 애플리케이션과 함께 스케일링할 수 있는 점
트레이드오프
- 데이터 수정 시 각 OPA 인스턴스에 정책/데이터 동기화가 필요한 점
- 메시지 브로커나 OPAL 같은 추가 동기화 수단이 필요한 점
