최근 DevOps 업계에 자주 등장하는 키워드가 하나 있습니다. 바로 Policy as Code(PaC)인데요. Kubernetes에서 정책을 관리하는 대표적인 PaC 툴이 Kyverno죠.
저도 DevOps 엔지니어다보니 이렇게 주목받고 있는 PaC에 대해 꾸준히 조사하고 있는데요. 이런 최신 흐름 속에서 여러분들께 도움이 되고자 Kyverno 핵심 기능을 실습해보는 가이드도 제작했었습니다.
그러다 문득 궁금해졌습니다. PaC는 왜 등장하게 된 걸까요? 또 어떻게 발전해왔고 앞으로 미래의 PaC는 어떤 모습일까요?
그래서 이번 아티클에선 PaC의 등장과 변천사에 대해 이야기해보려 합니다. PaC의 핵심 정신과 발전 양상을 같이 살펴보다보면, PaC를 훨씬 깊이 이해하실 수 있을 겁니다.
PaC는 왜 등장하게 되었을까?
Policy as Code(PaC)는 DevSecOps가 대두되면서 함께 주목받게 된 개념입니다. DevOps 문화에 보안을 결합한 DevSecOps와 어떤 관련이 있냐고요?
PaC에서 정책(Policy)은 기본적으로 보안과 안정성을 위한 것입니다. ‘어떤 리소스를 누가, 얼만큼, 언제 사용 가능한지’ 정의하는 것이 정책의 기본적인 모습 중 하나인 걸 생각해보면 금방 이해되죠. 그러다보니 기존의 정책 관리 방식을 개선할 수 있는 대안책이자, 최신 보안 솔루션으로 PaC라는 컨셉이 등장한 것입니다.
기존의 정책 관리에 어떤 문제가 있었길래 사람들이 PaC라는 대안을 찾게 된 걸까요? PaC가 등장하기 전의 정책은 기본적으로 사람이 직접 문서로 정리해서 관리해야 했기 때문입니다.
‘소스코드에 암호를 포함하지 않는다’, ‘컨테이너는 root 유저로 실행하지 않는다’와 같은 정책을 정했다면, 이 내용을 먼저 문서화해야 했습니다. 그 다음 개발자가 작업할 때 이 정책 문서를 직접 참고하고 준수하는지 리뷰해야 했죠. 그래서 정책 구현(문서화)에 시간이 많이 소요되고, 정책 준수(직접 리뷰) 과정에서 오류가 발생하기도 쉬웠습니다.
게다가 조직이 확장되고 자산과 인력이 늘어날수록 정책 준수를 강제하기 위한 노력 역시 더 들 수밖에 없었습니다. 정의해야 할 정책은 점점 더 많아지고, 정책을 준수하는지 확인해야 하는 노력도 그만큼 더 들여야 하는 거죠. 이것을 한 문장으로 정리하자면, ‘PaC 이전의 정책은 확장하기 어려웠다’고 할 수 있습니다.
그러다 DevOps 문화가 점차 발전하면서 보안에 대한 인식이 점차 바뀌었습니다. 보안은 더 이상 보안 전문가만 다뤄야 하는 문제가 아닌, 조직의 개발 및 운영 팀과 함께 협업하고 해결해야 하는 문제가 된 것이죠. 정책 관리 역시 마찬가지였고, PaC가 등장하게 된 계기가 되었습니다.
PaC는 어떻게 구현되었을까?
PaC를 구현하기 위해 다양한 툴이 개발되었고, 대표적인 툴로 Open Policy Agent와 Kyverno가 등장했습니다.
보다 먼저 세상에 등장한 Open Policy Agent(OPA)는 다양한 정책을 블록을 조립하듯 통합해서 관리할 수 있길 바라는 의도로 개발되었습니다. OPA는 정책을 정의할 때 자체 개발 언어인 Rego를 사용하는데요. OPA의 개발 의도를 생각해보면, 자체 개발한 언어 이름이 Rego인 것이 완전히 우연은 아닌 듯합니다.
그 다음 등장한 Kyverno는 Kubernetes에 친화적인 PaC 툴입니다. 별도의 정책 개발 언어 없이 Kubernetes 리소스를 정의하는 YAML 양식만으로 정책을 정의할 수 있는 것이 큰 특징인 툴인데요. Kyverno 개발사 Nirmata의 창업자들은 컨테이너 생태계가 점점 더 복잡하게 성장하는 흐름 속에서 기회를 발견해 Kyverno를 개발했다고 합니다.
이렇게 각각 다른 접근법으로 등장한 PaC 툴들은 흥미롭게도 비슷한 발전 양상을 가졌습니다.
PaC 툴은 어떤 방향으로 발전해왔을까?
OPA는 기본적으로 JSON 양식으로 정책 검토 요청을 받고, Rego로 작성된 정책과 JSON 형식의 정책 모두 지원해왔습니다. 거의 모든 시스템에 대한 정책 관리를 지원하고자 하는 의도인데요.
(이미지 출처: https://www.openpolicyagent.org/docs)
2021년 CNCF 졸업(Graduated) 이후 OPA는 Rego 정책 개발 경험을 개선하는 데에 집중했고, 2024년 12월 1.0 버전을 릴리즈했습니다. 해당 버전에서는 Rego 문법 개선뿐만 아니라 Go와의 통합도 선보였습니다. Go 애플리케이션 코드에서 OPA SDK와 Rego 패키지를 사용할 수 있게 된 것인데요. OPA의 자체 정책 언어인 Rego의 사용성을 개선하여 정책 엔진으로서의 입지를 다지고자 하는 의도가 돋보이는 릴리즈였습니다.
반면, Kubernetes에 친화적인 Kyverno에도 큰 변화가 있었습니다. 바로 Kubernetes 이외 환경에서도 Kyberno를 사용할 수 있도록 개선된 것인데요. JSON 형식의 정책 검토 요청을 처리하는 Kyverno CLI와 REST API 서버 지원, Golang 라이브러리 지원까지 Kyverno를 사용할 수 있는 영역을 대폭 넓히는 업데이트였죠.
(이미지 출처: https://kyverno.github.io/kyverno-json/latest/)
이렇게 두 PaC 툴은 모두 현재 JSON 형식의 정책 검토 요청을 지원하게 되었고, 애플리케이션의 코드에서 라이브러리 형태로 각 툴을 사용할 수 있도록 발전했습니다. 모두 JSON이라는 범용성과 애플리케이션 개발이라는 확장성을 가져오게 된 것이죠.
PaC의 미래는?
AI가 발전하면서 소프트웨어 개발 사이클에 필요한 많은 작업이 AI로 대체되고 있습니다. 이런 흐름 속에서 PaC의 미래는 어떻게 될까요? 결론부터 말씀드리자면, PaC는 오히려 더 중요한 역을 수행할 가능성이 높습니다.
최근 다양한 작업이 AI 에이전트로 수행되고 있습니다. 인프라 관리도 예외는 아니죠. 이때 PaC는 AI 에이전트의 활동 영역을 명확히 정해주는 역할을 수행할 수 있는데요. AI 에이전트가 접근할 수 있는 데이터와 수행할 작업, 사람의 승인이 필요한 시점 등을 PaC로 정의할 수 있는 것입니다.
AI가 새로운 분야로 확장되면서 필수 개념으로 자리잡은 MCP(Model Context Protocol) 역시 PaC와의 조합이 필요해질 것입니다. MCP에 PaC를 도입하면 조직이 사용하는 AI 모델들이 예상 가능하고 허용되는 범위 내에서 서로 상호작용할 수 있기 때문인데요. 예를 들면, 의료용 AI 모델이 환자 개인정보에 무단으로 접근하는 행위를 정책으로 막을 수 있는 것이죠.
이렇게 AI의 작업 효율성은 적극 활용하되, 자칫 큰 피해로 이어질 수 있는 영역으로의 접근은 PaC가 가드레일처럼 접근을 제한하여 시스템 안정성을 높일 수 있을 것입니다. 예상치 못한 악용이나 피해를 막을 수 있는 보안 솔루션으로 활용될 수 있겠죠.
마무리
이렇게 PaC가 등장하게 된 배경과 발전 과정, 그리고 AI 시대의 PaC의 역할까지 알아봤습니다. 이번 아티클을 통해 PaC라는 컨셉에 대해 전보다 더 깊이 이해하셨으면 좋겠습니다.
그럼 다음 글에서 더 흥미로운 IT 이야기로 돌아오겠습니다.
감사합니다.
참고 자료
- https://www.crowdstrike.com/en-gb/cybersecurity-101/cloud-security/policy-as-code
- https://blog.gitguardian.com/what-is-policy-as-code-an-introduction-to-open-policy-agent/
- https://kubernetespodcast.com/episode/101-open-policy-agent/
- https://nirmata.com/2019/06/03/introducing-kyverno-kubernetes-native-policy-management
- https://www.cncf.io/blog/2023/11/06/kyverno-expands-beyond-kubernetes/
- https://devops.com/will-policy-as-code-still-matter-if-ai-generates-most-code/
✨이번 아티클은 어떠셨나요?
이번 글의 주제에 대해 어떻게 생각하는지 알려주세요! 더 나은 아티클을 전달해드리기 위해 아래 폼에서 짧은 피드백을 받고 있어요.
여러분들의 소중한 의견은 Aiden’s Lab에 큰 힘이 됩니다!