data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==
클라우드 네이티브 애플리케이션의 근간이 되는 MSA는 각 서비스들의 독립성과 자율성을 최대한 보장함으로 권한 관리를 포함한 정책적인 측면은 중앙의 통제와 조율이 반드시 필요하다. 정책은 권한을 포함하는 보다 포괄적인 개념이며 궁극적으로는 전체 거버넌스를 통제하는 핵심이다.
정책을 범용 프로그래밍 언어 코드로 작성하면 변경 관리가 어려우며, 설정 파일이나 데이터베이스로 작성한다면 그 자체가 수동적이고 별도의 처리가 필요하다. Policy as Code는 이러한 점을 절충하기위해 고수준의 정책 전용 언어를 통해 정책을 작성하고 관리하는 방법이다. MSA 관점에서 본다면 Policy as Code는 정책이라는 중요하고 특별한 도메인을 담당하는 기술이라고 할 수 있다.
정책을 코드로 표현하도록하는 툴은 주요 소프트웨어 회사들을 중심으로 여럿 존재했으나 현재는 OPA라는 플랫폼이 이 분야의 강자로 떠오르고 있다. 본 블로그에서는 OPA에 대해 살펴보고자 한다.
OPA(Open Policy Agent)는 정책을 결정하는 부분과 수행하는 영역을 분리하기위해 시작되었고, 전체 시스템에 걸쳐 통합된 상황에 따른 정책 시행을 가능하게 하는 오픈 소스 범용 정책 엔진이 되었다. OPA는 현재 CNCF의 졸업 프로젝트(graduated project)로 클라우드 네이티브 정책의 사실상 표준으로 자리잡고 있다. 실제로 넷플릭스, 핀터레스트, 골드만삭스 등에서 쿠버네티스 및 마이크로서비스에 대한 정책엔진으로 사용되고 있으며 아틀라시안 제품군이나 Chef에도 포함되어있다.
https://www.openpolicyagent.org/
OPA는 정책 및 데이터에 대한 질의를 평가하여 정책의 결정을 돌려준다. 여기에서 질의(Query)와 결정(Decision)은 json으로 표현하면 어떤 것이든 포함할 수 있으며 이에따라 매우 큰 확장성을 갖는다.
정책은 전용 언어(Rego)를 사용하여 기술하는데 도메인에 제한 받지 않는 (거의) 모든 종류의 정책의 기술이 가능하다.
질의의 예는 다음과 같다.
결정도 단순 '예/아니오' 뿐 아니라 임의의 구조화된 데이터를 출력으로 사용할 수 있다.
데이터는 Json 형태로 저장되며 OPA 서버는 정책(Policy)을 기반으로 판단하는데 질의와 함께 이 데이터를 활용하여 결정을 만든다.