생각보다 OPA에 대해서 들어본 사람이 없는 것 같다.
특히 국내에서는 확산이 많이 안된거 같지만, 해외 벤더사들은 많이 사용하고있다...
클라우드, 쿠버네티스, MSA, 메타버스, 블록체인 등등 IT기술이 정말 엄청많이 바뀌고 있다는게 엄청 많이 느껴지고, 이제 레거시만 고집한다면 점점 도태될거란 생각이 많이든다.
OPA를 찾아보면 소개글이나 동작방식 등에 대해서는 정말 많이 나와있지만,
실제로 OPA코드를 짜다보면 내가 원하는 정보는 많이 없는 것 같다.. 커뮤니티에서 고수들의 대화에 낄 정도는 아니고.. 그냥 소소하게 코드를 짜보고 있다.
설명이 너무 장황하게 길고 그러면 이해하기 힘드니까 간략하게 OPA가 뭐냐고 물어본다면 일반적으로 general-purpose policy engine이라고 하면서 범용 정책 엔진이라고 이야기를 한다.
그런데 범용 정책엔진이 무엇이냐고 물어보면, CNCF의 졸업프로젝트 이야기부터 써둔 글들이 많다.
근데.. 거의 https://www.openpolicyagent.org/docs/latest/ 공식사이트에 있는 글을 그대로 쓴게 많아서 처음 배우는 사람한테는 진입장벽이 높겠다? 라는 생각이든다.
간략하게 말하면 다양한 클라우드 네이티브 영역 전반에 걸쳐서 정책, 인증을 코드로 관리를 하여 보안, 운영, 자동화를 할 수 있다.
사실 내용을 줄여서 정리를 할려고해도, 줄이기 어렵고, 쉽게 쓰기는 어려운것 같다.
쉽게 얘기하자면, AWS의 보안정책과 GCP의 보안정책을 OPA로 한방에 관리를 할 수 있다.
더 나아가서, 쿠버네티스, CICD, Servicemesh 등을 보안정책을 모두 다 OPA로 관리할 수 있다.
그게 어떻게 가능하냐면
OPA는 Policy enforcement와 policy decision-making을 decoupling 하기 때문이다.
이게 뭔소리냐면
Policy decision-making(정책 의사결정)은 조건을 만족하냐? > 이런 개념이고
Policy enforcement(정책 시행)은 말그대로 시행하는 개념이다.
이걸 분리한다는것은
관리자 권한이 있는 사람만 사용자 리스트를 볼 수 있습니다.
여기에서 관리자 권한이 있는 사람인지 판단은 OPA로 하고,
사용자리스트를 보는건 구현해둔 코드, 서비스가 실행을 하는 개념이다.
관리자권한이 있는 사람인지아닌지 판단은 True / False로 하듯. OPA는 단순히 True / False로 판단만 한다.
OPA를 사용하면 퍼포먼스차이가 많이 나냐? 라고 하면 많이 난다고 말할 수 있지만,
구체적인 수치를 가져오라고하면.. 그건 딱히 비교를 해 보지도 않았고, 그정도까지 서비스 개발은 안해봤다...
OPA의 Input에는 3가지 종류가 있다.
1. Query Input : OPA가 결정해야하는 질의 (관리자 권한이 있음?)
2. Policy : 정의된 decision Making 실행 (사용자 리스트 봐라!)
3. Data : Decision Making을 위해 필요시 참조할 데이터 (관리자 권한 부여된 리스트)
https://www.openpolicyagent.org/docs/latest/philosophy/
나름.. 쉽게 정리한다고 했지만 이해가 잘 안되는 부분이 많을것 같단 생각은 든다.
원래 이런 기술?들을 직접 해보면서 깨닫고 다시 한번 보는게 더 좋을 것 같다.
OPA 엔진을 띄워놓고 Data/Policy를 적용하는 방법도 5가지가있다.
그런데 너무 어려우니 일단 차근차근 hellow world 찍어보고, 어느정도 이해가 되면 조금 더 이론을 보면 쉽게 이해할 것 같다.