시스템 관련 일만 했음 • 전공이 분산 시스템이어서 다른 거 하고 싶어도 안 시킴ㅠㅠ • MSA, Policy as Code 전문 기업 창업(2021.09) 후 운영 중 • 주로 일하는 분야 • Policy as Code, MSA, Cloud, Bigdata Engineering. ... • 주로 하는 일 • AA, TA, 개발, 컨설팅 등 • 특이 사항 • 세계 최초로 OPA (Open Policy Agent) 관련 책을 썼음 • http://acornpub.co.kr/book/opa-book • 영어 버전은 온라인에서 무료로 볼 수 있음 (https://sangkeon.github.io/opaguide/) • 클라이언트 사이드 로드밸런싱 기능을 직접 만들어 봤음 발표자 소개
유지보수하는 것은 어렵 고 비쌈 • RDBMS가 모든 애플리케이션의 데이터 관리를 위임 받아 데이 터 관리와 정합성의 문제를 해결했음 • 정책을 위임받는 정책에 최적화된 시스템 필요 • 이러한 정책 관리 전문 시스템을 통한 위임의 개념이 Policy as Code 임 MSA 정책 관리 해법
자체적인 정책 언어를 사용해서 구현됨 • (RDBMS가 SQL을 사용하는 것처럼) • 정책 엔진에 정책 코드 처리를 위임함 • (RDBMS가 데이터 저장과 처리를 전담하듯이) • 애플리케이션은 정책 판단을 위한 정보만 넘기고 정책 엔진으로부터 판단 결과만을 받아서 처리 • (RDBMS에 JDBC로 쿼리를 넘기고 결과셋을 받아서 처리하듯이) • 정책 엔진은 라이브러리, 사이드카, 정책 서버의 형태로 애플리케이 션에 통합 될 수 있음 • 결국 Policy as (on its own) Code Policy as Code
내용이 코드이므로 한눈에 파악 가능 Version Control • Git을 통한 이력 관리가 가능 Testing • 애플리케이션 코드와 완전히 독립적으로 정책만 테스트할 수 있음 Automation • 정책 코드가 텍스트 파일이므로 외부 도구 연동/자동화가 용이 https://docs.hashicorp.com/sentinel/concepts/policy-as-code 참고 Policy as Code의 장점
OPA (Open Policy Agent) : https://www.openpolicyagent.org • Sentinel : https://docs.hashicorp.com/sentinel • OPA와 Sentinel 모두 정책을 선언하는 자체 정책 언어를 가지고 있음 • 대부분의 Policy as Code 기술들은 OPA를 기반으로 함 Policy as Code 구현체
관리에서 벗어난 고도화된 권한 관리 가능 • 수년 내 반드시 적용되어야 함 • 기존 컨테이너 보안 기술 PSP(Pod Security Policy)가 제거되고 외부 시스템에 처리가 위임될 예정 • 표준화된 패턴이 존재 • Kubernetes는 권한/정책 위임을 위한 웹훅 설계를 초기부터 가지고 있음 • 수년 간 성숙된 오픈소스(OPA Gatekeeper) 존재 Kubernetes 환경의 Policy as Code 적용
들어 기본적으로 <조직_코드>_<서비스 이름>_<prd/stg/dev> 에 대한 권한을 부여한다면? • RBAC(Policy as Data)로 관리한다면 • 새로운 조직이 추가/삭제 될 때마다 권한도 동기화해야 함 • Policy as Code로 관리한다면 • 네임 스페이스 규칙을 정하고 조직 코드에 따라 유효한 네임스페이스인지 체 크하는 코드를 작성하면 됨 Policy as Code/RBAC 비교 예시
부서에서는 특정 mysql 버전에 대해서만 기술 지원이 가능 • 운영계에는 개발도구/디버깅 심볼/root 계정이 제외된 이미지가 배포되어야 함 • 네트워크 관련 정책 • 운영계에는 노드 포트를 만들 수 없음 • 조직별로 연결 가능한 로드 밸런서가 다름 • 자원 관리 정책 • DB 인스턴스는 메모리 8GB까지 할당 가능 • Go 애플리케이션은 512MB 이상 메모리 할당 불가 • Java 애플리케이션은 메모리 1GB 할당 가능 Policy as Code를 적용한 Kubernetes 정책 구현 예 (1/2)
지정된 prefix로 구분해야 함 • 컨테이너에 운영계/개발계 등 레이블링이 되어야 함 • 서비스 안정성을 위한 정책 • 운영계에서는 별도의 PV가 없는 DB 인스턴스는 생성 불가하고 개발계 에서만 가능 • 운영계에서는 항상 AutoScaling이 구성되어야 함 • 보안성 강화 정책 • 협력사 직원은 프로젝트 개발 기간 종료 후 시스템에 접근할 수 없음 Policy as Code를 적용한 Kubernetes 정책 구현 예 (2/2)
OPA(Open Policy Agent) 정책 엔진을 Kubernetes에 통합할 수 있음 • 정책 엔진 통합만으로 Policy as Code 구현을 완료했다고 할 수 없음 • 정책 템플릿/정책 등의 개발 및 적용 필요 • Policy as Code 관련 관리를 위한 기능들이 Kubernetes 관리 플랫폼에 추가되어야 함 Kubernetes 플랫폼에 Policy as Code 통합
정책 로그 관리 • 정책의 처리 내역에 대한 통계/보고서, 검색, 백업 기능 • 내부 시스템 데이터 연계 • LDAP/AD 등 내부 시스템 정보 연계 • 기존 구축된 DB 연계 • 정책 관리 • Git 등을 통한 정책 이력/버전 관리 기능 • 정책 관리를 위한 정책 저장소 • 프로덕션 수준의 정책 라이브러리 플랫폼에서 통합해야 하는 기능들