Policy as code는 정책의 관리와 자동화를 고수준 언어의 코드로 작성하겠다는 아이디어이다. 텍스트 파일에 코드로 표현하면 소프트웨어 개발과정에서 이미 입증된 버전컨트롤/테스트자동화/배포 등을 사용할 수 있게 된다.

현존의 정책이나 ACL 시스템은 코드로 정책을 적용하기 보다는 용이성을 위해 GUI를 이용하여 입력하는 방식을 선택하고 있다. 그리고 일반적으로 잘못된 정책을 방지하거나 찾기위한 어떠한 장치도 제공하지 않으므로 자동화된 테스트를 더욱 힘들게 만든다.

이러한 시도는 각 소프트웨어별로 진행되고 있었으며 가장 존재감이 있는 것이 HashCorp의 Sentinel 이다. 하지만 상용소프트웨어로 Sentinel만 사용하는 것이 어렵고 개별적으로 접근하는 방법이 쉽지않은 단점이 있었다.

Policy As Code의 추구하는 것은 결정로직과 비지니스로직을 분리하여 application 이나 환경의 context에 따라 결정하는 정책을 별도로 만드는 것이 가능하도록 하는 것이다.

사용의 이유

모든 비지니스는 사용자에게 전달하기 전에 제품을 테스트한다.

소프트웨어 서비스도 다르지 않고 모든 조직들이 어플리케이션의 health, readiness, performance, accuracy 를 검증하기 위한 자신만의 실행기법, 툴, 프로세스를 갖고 있다. 이러한 것들은 우리 제품을 사용자나 고객에게 보증할 수 있게 한다. 이를 통해 모든 변경사항이 준수되고 일련의 표준을 준수하는지 확인할 수 있다.

서비스를 테스트하는 동안 결정하는 두가지 방법이 있다. 개인이나 팀이 의사결정이 정확한지 수동으로 결정하거나 그 과정을 자동화 할 수 있다. 정책을 코드로 처리하면 자동화된 의사 결정이 가능하므로 개발자와 엔지니어에게 규정 준수를 위한 노력이 없이 기능향상 작업을 관리하는 독립성을 제공한다.

policy as code는 무엇인가**?**

코드로서의 정책에는 고급 언어로 코드를 작성하여 정책을 관리하고 자동화한다. 고급 언어는 쿼리 입력, 일부 데이터 및 정책을 사용하여 쿼리 결과를 생성하는 정책 엔진에 종속되며, 오픈 소스 OPA(Open Policy Agent)와 같은 정책 엔진의 경우 정책은 Rego라는 선언적 언어로 표현된다. OPA를 제외한 대체 정책 엔진 솔루션은 해시코프 Sentinel 가 있다.

https://lh3.googleusercontent.com/OlrOiSrx1HKFkepu0YmcXCiLvgdfJj1YYYPOkWvcKkhihAb4Fp8GN6Q8gfJzv041C7oxTZ0DHJJfWCbm7BmERgcWuVCjZMk_4aLHFeGFPWZy8Z1CJKDg5HyXP-uqeEK3opH8do6M

정책 엔진은 질의에 대해 정책과 약간의 데이터를 반환할 수 있다.

결정을 내리는 데 필요한 세 가지 입력 정보를 설명하겠습니다.

  1. 정책: 의사 결정 프로세스를 모델링하는 코드화된 로직
  2. 데이터: 애플리케이션, 환경 또는 서비스의 정보, 이 데이터는 OPA를 위한 JSON 형식으로 제공
  3. 입력 질의: 질의는 정책 엔진에 업로드된 제공된 데이터와 정책에 따라 의사결정 프로세스를 시작, 정책 엔진은 API 호출을 통해 만들어진 JSON 쿼리를 수신

Here are links to resources to learn more about OPA and writing policies.