코드로서의 정책이란 무엇인가요?

코드로서의 정책은 코드를 사용하여 정책을 정의, 업데이트, 공유 및 시행하는 정책 관리 방식입니다. 정책 관리 시 수동 프로세스에 의존하는 대신 코드 기반 자동화를 활용하면 팀에서 더 빠르게 움직이고 사람의 실수로 인한 실수 가능성을 줄일 수 있습니다.

동시에 보안과 같은 도메인에 대한 코드형 정책 접근 방식을 사용하면 개발자, 보안 엔지니어 등 다양한 유형의 이해관계자가 이해할 수 있는 방식으로 정책을 정의하고 관리할 수 있습니다.

이 페이지에서는 코드형 정책의 작동 방식과 중요한 이유, 보안의 맥락에서 이를 활용하는 방법에 대해 설명합니다.

 

정책-코드 정의

코드로서의 정책이 무엇을 의미하는지 이해하려면 먼저 "정책"의 정의를 이해해야 합니다.

여기서 정책이란 IT 운영 또는 프로세스를 관리하는 모든 유형의 규칙, 조건 또는 지침을 의미합니다. 예를 들어 정책은 코드가 보안 제어를 통과하여 구축되기 위해 충족해야 하는 조건을 정의하는 규칙일 수 있습니다. 또는 보안 이벤트에 대한 응답으로 자동으로 실행되는 일련의 절차일 수도 있습니다.

코드로서의 정책은 코드를 사용하여 규칙과 조건을 정의하고 관리하는 것입니다. 코드형 정책 접근 방식에 따라 팀은 Python, YAML 또는 Rego와같은 프로그래밍 언어를 사용하여 정책을 작성합니다. 특정 언어는 일반적으로 사용 중인 정책 기반 코드 관리 및 시행 도구에 따라 다릅니다.

엔지니어가 업데이트를 해야 하는 경우 기존 코드를 수정하는 방식으로 업데이트합니다. 또한 버전 관리 시스템(VCS)을 사용하여 다른 사람들과 코드를 공유하여 정책에 대한 가시성을 제공할 수 있습니다. 마지막으로, 코드형 정책 시행 엔진을 사용하여 정책을 준수할 수 있습니다. 시행 엔진은 독립형 정책 코드일 수도 있고 더 큰 플랫폼에구축될 수도 있습니다.

 

코드로서의 정책 대 코드로서의 인프라

코드로서의 정책이라는 개념은 인프라스트럭처로서의 코드, 즉 IaC와비슷하게 들릴 수 있습니다. 코드 기반 파일을 사용하여 인프라 설정 및 프로비저닝을 자동화하는 IaC는 수년 동안 IT 운영팀에서 흔히 사용되어 왔습니다.

IaC는 인프라를 프로비저닝해야 하는 IT 운영 팀에 유용하지만, 정책 기반 코드는 보안 운영, 규정 준수 관리, 데이터 관리 등을 개선할 수 있습니다.

 

코드로서의 정책의 이점

규칙, 조건 및 절차를 수동으로 관리하는 대안과 비교했을 때, 코드로서의 정책은 몇 가지 중요한 이점을 제공합니다:

  • 효율성: 정책을 코드로 작성하면 사실상 무제한의 대규모로 정책을 공유하고 자동으로 시행할 수 있습니다. 이는 엔지니어가 매번 수동으로 정책을 적용해야 하는 것보다 훨씬 효율적입니다. 정책을 업데이트하고 공유할 때도 엔지니어마다 다르게 해석할 수 있는 인간 언어로 설명하는 것보다 명확하고 간결한 코드로 정책을 정의하는 것이 더 효율적입니다.
  • 속도: 정책 시행을 자동화할 수 있다는 것은 코드형 정책이 수동 접근 방식보다 더 빠르게 운영된다는 의미이기도 합니다.
  • 가시성: 정책이 코드로 정의되면 모든 이해관계자가 코드를 사용하여 시스템 내에서 어떤 일이 일어나고 있는지 쉽게 이해할 수 있습니다. 예를 들어 다른 엔지니어에게 문의하고 응답을 기다릴 필요 없이 어떤 코드 기반 정책이 시행되고 있는지 확인하는 것만으로 경고 또는 수정 규칙을 검토할 수 있습니다.
  • 협업: 정책 기반 코드는 일관되고 체계적인 정책 관리 수단을 제공함으로써 협업을 간소화합니다. 여기에는 같은 팀 내에서의 협업뿐만 아니라 서로 다른 유형의 팀, 특히 코드로 생각하고 작업하는 데 익숙한 개발자와 보안 또는 IT 운영과 같은 다른 영역의 전문가 간의 협업도 포함됩니다.
  • 정확성: 팀에서 코드를 사용하여 정책을 정의하고 관리하면 수동으로 시스템을 관리할 때 발생할 수 있는 구성 실수의 위험을 피할 수 있습니다.
  • 버전 관리: 정책 파일의 여러 버전이 변경될 때마다 추적하는 경우, 코드형 정책은 새 정책 버전으로 인해 문제가 발생하는 경우 이전 구성으로 쉽게 되돌릴 수 있도록 합니다.
  • 테스트 및 유효성 검사: 정책이 코드로 작성된 경우 자동화된 감사 도구를 사용하여 정책을 쉽게 검증할 수 있습니다. 이러한 방식으로 코드형 정책은 프로덕션 환경에 심각한 오류가 발생할 위험을 줄이는 데 도움이 될 수 있습니다.

 

Policy-As-Code 사용 방법

오늘날 코드형 정책을 활용하는 가장 쉬운 방법은 코드형 정책 접근 방식을 통해 관리하려는 도메인에 대해 기본적으로 코드형 정책을 지원하는 도구를 채택하는 것입니다.

예를 들어, 보안 영역에서는 Prisma Cloud, Bridgecrew 및 Checkov를 통해 팀이 코드를 사용하여 보안 정책을 정의할 수 있습니다. 또한 구축 전에 잘못된 구성이나 취약성을 감지하기 위해 정책 파일을 자동으로 스캔하고 감사할 수 있습니다. 이 접근 방식은 이러한 도구가 클라우드 보안 태세 관리를간소화하는 한 가지 방법입니다.

또한 모든 도메인에 코드형 정책을 적용하기 위한 공통 프레임워크를 제공하는 것을 목표로 하는 Open Policy Agent와같은 도구를 살펴볼 수도 있습니다. 그러나 현재까지 이와 같은 커뮤니티 기반 정책 기반 프레임워크의 벤더 채택은 제한적이기 때문에 기본 정책 기반 접근 방식을 지원하는 벤더 도구를 찾는 것이 보안 또는 기타 IT 도메인에 대한 정책 기반 접근 방식을 구현하는 가장 간단한 경로입니다.

 

코드로서의 정책 FAQ

코드형 인프라(IaC)는 물리적 하드웨어 구성이나 대화형 구성 도구가 아닌 기계 판독 가능한 정의 파일을 통해 컴퓨팅 인프라를 관리하고 프로비저닝하는 방법입니다. 개발자와 IT 전문가가 코드를 통해 리소스를 자동으로 관리, 모니터링, 프로비저닝하여 일관성을 개선하고 수동 오류를 줄일 수 있습니다. IaC는 클라우드 서비스의 확장성과 유연성을 지원하여 인프라 구축이 반복 가능하고 표준화되도록 보장합니다.
코드로서의 규정 준수는 규정 준수 사양을 코드로 작성하고 자동화된 구축 파이프라인에 통합하는 관행입니다. 자동적이고 반복 가능한 검증 프로세스를 위해 규정 준수 검사를 체계화하여 IT 인프라와 애플리케이션이 규제 및 보안 표준을 지속적으로 준수하도록 보장합니다. 이 접근 방식은 인적 오류를 최소화하고 규정 준수 감사에 필요한 시간과 노력을 줄여줍니다.
코드로서의 보안은 보안 정책과 제어를 코드화하여 보안 관행을 소프트웨어 개발 라이프사이클에 통합하는 것을 포함합니다. 이를 통해 CI/CD 파이프라인 내에서 보안을 자동으로 평가하고 적용하여 보안 점검이 사후 고려 사항이 아닌 소프트웨어 배포 프로세스의 필수적인 부분이 되도록 할 수 있습니다. 자동화된 취약성 스캐너 및 구성 관리 시스템과 같은 도구를 사용하여 애플리케이션의 시작부터 구축까지 보안을 유지합니다.
구성 관리는 시간이 지나도 무결성을 보장하는 방식으로 시스템 변경 사항을 체계적으로 처리하는 프로세스입니다. 여기에는 소프트웨어 및 하드웨어 구성 요소에 대한 기록 유지 및 업데이트가 포함되며, 시스템이 일관되게 구성되고 모든 변경 사항을 추적할 수 있도록 합니다. Ansible, Puppet, Chef와 같은 중앙 집중식 구성 관리 도구는 인프라의 구축과 운영을 자동화하여 확장성과 안정성을 지원합니다.
자동화 스크립트는 사람의 개입 없이 작업을 실행하는 코딩된 절차입니다. IT 환경 전반에서 반복적이고 복잡한 작업을 자동화하고 효율성을 높이며 인적 오류의 가능성을 줄이는 데 필수적입니다. 클라우드 컴퓨팅에서 자동화 스크립트는 리소스를 프로비저닝하고, 구축을 관리하고, 워크플로를 오케스트레이션하는 데 사용되며, 주로 Terraform과 같은 도구 내에서 또는 AWS CloudFormation과 같은 클라우드 공급자 스크립팅 인터페이스를 통해 이루어집니다.
GitOps는 버전 제어, 협업, 규정 준수, CI/CD 등 애플리케이션 개발에 사용되는 DevOps 모범 사례를 인프라 자동화에 적용하는 운영 프레임워크입니다. GitOps의 핵심 아이디어는 선언적 인프라와 애플리케이션을 위한 단일 소스로 Git을 사용하는 것입니다. CI/CD 파이프라인의 중심에 있는 Git을 통해 팀은 풀 리퀘스트를 수행하여 애플리케이션 구축 및 운영 작업을 가속화하고 간소화할 수 있습니다.
지속적 통합/지속적 구축(CI/CD) 은 앱 개발 단계에 자동화를 도입하는 소프트웨어 제공 방법입니다. CI/CD의 주요 개념은 지속적 통합, 지속적 배포 및 지속적 구축입니다. CI/CD는 정기적인 코드 변경 사항을 공유 리포지토리에 통합하고, 자동으로 테스트를 실행하며, 프로덕션 환경으로 코드를 푸시합니다. 이러한 관행은 수작업 오류를 줄이고 개발 주기를 단축하며 소프트웨어 품질을 향상시킵니다.
불변 인프라는 구성 요소를 변경하지 않고 교체하는 방식으로 IT 리소스에서 서비스 및 소프트웨어 구축을 관리하는 접근 방식입니다. 일단 구축된 인프라는 수정되지 않으며, 서버나 컨테이너를 새 버전으로 교체하는 방식으로 업데이트 또는 변경이 이루어집니다. 이 패러다임은 구성 변동이나 수동 개입으로 인한 불일치 및 잠재적인 보안 취약성을 최소화합니다.
코드 보안은 소프트웨어 코드 내의 취약점을 보호하고 코드베이스에 대한 무단 액세스 또는 변경을 방지하는 데 사용되는 방법과 도구를 포괄합니다. 여기에는 정적 및 동적 코드 분석, 코드 서명, 보안 코딩 표준 사용과 같은 관행이 포함되어 처음부터 보안에 중점을 두고 소프트웨어를 개발할 수 있도록 합니다.
코드 감사는 소스 코드를 검사하여 버그, 보안 위반 또는 프로그래밍 규칙 위반을 발견하는 포괄적인 분석입니다. 체계적으로 수행되는 코드 감사는 코드베이스의 상태를 유지하고 보안을 강화하며 코딩 표준 및 업계 규정을 준수하는 데 도움이 됩니다.
정책 시행은 IT 환경 내에서 정의된 정책을 구현하고 이를 준수하도록 하는 프로세스입니다. 여기에는 액세스 제어, 리소스 활용 및 운영 행동을 적극적으로 관리하여 모든 작업이 설정된 보안 정책 및 규정 준수 요구 사항에 부합하는지 확인하는 것이 포함됩니다.
선언적 구성은 원하는 시스템 상태를 달성하기 위한 단계를 설명하지 않고 원하는 상태를 지정합니다. 시스템의 기본 관리 도구는 선언된 상태를 유지하는 데 필요한 작업을 실행할 책임이 있습니다. 이 접근 방식은 원하는 상태에 도달하기 위한 프로세스를 설명하기 위해 스크립트나 명령이 필요한 명령형 구성과 대조됩니다.
버전 관리 시스템은 수정 사항과 수정한 사람을 기록하여 파일의 변경 사항을 추적하는 도구입니다. 여러 기여자가 서로의 작업을 덮어쓰지 않고 동일한 코드베이스에서 동시에 작업할 수 있도록 해주는 협업 소프트웨어 개발에 필수적인 요소입니다. 버전 관리 시스템은 롤백, 브랜칭 및 병합을 용이하게 하고 기여를 병합할 때 충돌을 해결하는 데 도움이 됩니다.
구성 이탈 방지 기능은 시간이 지나도 인프라의 상태가 정의된 구성과 일관되게 유지되도록 보장합니다. 구축 및 운영 프로세스를 자동화하고 실제 상태와 원하는 상태를 정기적으로 조정함으로써 Puppet, Chef, Ansible과 같은 드리프트 방지 도구가 불일치를 감지하고 수정하여 시스템 무결성 및 보안을 유지합니다.
코드 검토 정책은 소스 코드가 메인 코드베이스에 병합되기 전에 동료가 소스 코드를 체계적으로 검토하는 표준과 절차를 수립합니다. 이러한 정책은 코딩 모범 사례를 시행하고 잠재적인 보안 취약점을 식별하며 코드 품질을 개선합니다. 검토자 배정 기준, 검토 범위, 코드가 승인 또는 거부되는 조건 등이 명시되어 있는 경우가 많습니다.
PDL(정책 정의 언어)은 시스템 동작을 제어하고 액세스를 관리하며 규정 준수를 강제하는 정책을 작성하기 위한 공식적인 구문을 제공합니다. Open Policy Agent에 사용되는 것과 같은 PDL을 사용하면 소프트웨어 개발 및 구축의 여러 단계에서 규칙을 명확하게 표현하고 정책을 자동으로 시행할 수 있으므로 보안 관행의 일관된 적용을 보장할 수 있습니다.
코드 템플릿으로서의 인프라는 IT 인프라의 프로비저닝을 자동화하는 데 사용되는 사전 정의된 스크립트 또는 파일입니다. YAML 또는 JSON과 같은 언어로 작성된 IaC 템플릿은 애플리케이션에 필요한 리소스와 구성을 설명하여 개발, 테스트 및 프로덕션 전반에 걸쳐 일관되고 반복 가능한 환경 설정을 가능하게 합니다.
자동화된 거버넌스는 지속적인 통합 및 구축 파이프라인 내에서 정책 시행을 통합하여 변경 사항이 회사 및 규제 표준을 자동으로 준수하도록 보장합니다. IT 환경을 모니터링하고 제어하는 도구와 관행을 채택하여 수동 감독을 줄이고 실시간 규정 준수 보장을 제공합니다. 자동화된 거버넌스를 통해 기존 정책에서 벗어난 문제를 신속하게 식별하고 해결할 수 있습니다.
이전 클라우드 네이티브 보안이란 무엇인가요?