[문제] OPA(Open Policy Agent)의 개념과 정책을 코드로 관리하는 Policy as Code 방식을 설명하고, Rego 언어의 특성과 쿠버네티스 Admission Control에서의 OPA/Gatekeeper 활용을 서술하시오.
1. OPA와 Policy as Code
OPA(Open Policy Agent)는 CNCF 졸업 프로젝트로, 분산 시스템 전반의 정책 결정(Policy Decision)을 통합 관리하는 범용 정책 엔진이다. Policy as Code는 보안·컴플라이언스 정책을 코드로 작성·버전 관리·테스트하는 방식이다.
2. Rego 언어 특성
- 선언형(Declarative) 정책 언어: “무엇을” 허용/거부할지만 정의, 평가 엔진이 “어떻게”를 결정
- JSON 입력 데이터(input)와 정책 데이터(data)를 기반으로 결정(allow/deny) 출력
- 단위 테스트 내장:
opa test명령으로 정책 로직 검증
3. 쿠버네티스 Admission Control — OPA Gatekeeper
| 구성 요소 | 역할 |
|---|---|
| Validating Webhook | K8s API Server가 리소스 변경 요청을 OPA Gatekeeper에 전달하여 정책 검증 |
| ConstraintTemplate | Rego 정책 로직을 CRD로 정의 (예: 이미지 레지스트리 화이트리스트) |
| Constraint | ConstraintTemplate의 인스턴스. 특정 네임스페이스·리소스에 정책 적용 |
활용 예: 허가된 레지스트리 이미지만 배포 허용, PodSecurityContext 필수화, 네임스페이스 레이블 강제
핵심 키워드: OPA, Rego, Policy as Code, Gatekeeper, Admission Webhook, ConstraintTemplate, CNCF
OPA는 마이크로서비스·K8s·CI/CD 파이프라인에 걸쳐 일관된 정책을 코드로 관리한다. Gatekeeper를 통해 K8s Admission 단계에서 보안 정책을 자동 시행하여 구성 오류를 사전에 차단한다.