쿠버네티스 정책 및 권한 관리를 위한 기술들
개요
쿠버네티스의 권한 관리는 전통적으로 쿠버네티스 RBAC 을 통해 수행되었다. 최근에는 RBAC 의 제한적인 권한 관리보다 정밀한 권한 관리가 요구되고 있고, 웹훅과 Policy as Code 를 활용한 기술들이 적용되고 있다. 이러한 목적으로 널리 사용되고 있는 OPA Gatekeeper, Kyverno 등의 Policy as Code 기반 기술들을 통해 보다 정밀한 권한 관리와 권한을 넘어서는 쿠버네티스 정책 관리를 구현하는 방안에 대해서 설명한다. 이를 위해 우선 권한 관리와 정책 관리에 대해서 고민해 볼 만한 내용들을 짚어보고, 각각에 대해 구체적인 예를 들어 설명한다. 이를 통해 쿠버네티스에서 정책 관리를 어떤 수준까지 구현할 수 있는지에 대해서 구체적으로 설명한다. 또 이와 관련된 사용자 시나리오도 예를 들어 설명한다. 다음은 권한과 정책을 독립적인 도메인으로 구현할 수 있는 Policy as Code 의 개념에 대해서 설명하고, Policy as Code 구현체인 OPA 에 대해 간단히 설명한다. 마지막으로 쿠버네티스에서 정책 및 권한 관리를 위해 실제 적용할 수 있는 오픈소스인 OPA Gatekeeper 와 Kyverno 에 대해서 비교 설명한다.
발표
rbac 한계와 웹훅 기반 쿠버 정책 관리
롤 바인딩 기반
뭘 할 수 있다를 정의한 정책을 붙이는 방식
롤
리소스 테임을 패턴이나 매칭으로 할 수는 없음
자원 아니라 api url을 이요해서 하는 것 가능
rbac로 할 수 없는 것들
시나리오
- 리소스이름 패턴 매칭
- dev로 시작하는 모든 자원에 대해 매칭 안 되냐
- 정의된 속성 따라 제어
- 라벨 이거 붙은 것만 조작하게 하면 안 되냐
- 패터 따라 구너한 제어
- 계정 만들때마다 rbac하지 말고
- 계정 명과 동일한 네임스페이스에 권한 부여한다던가이런거 안 되냐
- 외부 시스템 정보와 연동된 접근 제어
- 인사 시스템 연동해서 휴가 직원은 제한 하면 안 되냐
- 퇴사할 놈은 read만 박으면 안 되냐
웹훅 작용 시점
rbac은 처음 요청 발생하자마자 발동
이후 섦명한 기술ㄷ릉느 etcd 적용되기 직전에 검증체크도 할 수 있다.
이게 바로 웨훅 기반
웹훅 기반으로 정책 관리하면 뭐가 좋은가?
- policy as cod
- 복잡한 제어 가능
- 권한 외 자원, 운영 정책 구현 가능
- 외부 데이터 연동 지원
- opa gatekeeper는 trviy랑 연동하는 것도 가능
- 이미지 취약한 넘 거르기라던가
- mutation 지원
- 아래에서 볼 vap는 불가능
어차피 아래에서 볼 많은 기술이 있어 직접 개발할 필요 없음
policy as code
적용하 구현 예시
- 컨테이너 이미지 정책
- 특정 mysql 버전만 배포
- 운영계에서 root 계정 이미지 거부
- 네트워크 관련 정책
- 운영계 노드포트 생성 거부
- 조직별로 연결 가능 로드밸런서 제한
- 자원 관리 정책
- db는 메모리 8기가 까지 할당 가능
- go 앱은 메모리 1이상 불가
- 관리 용이성 정책
- 조직별로 지정된 prefix로 네임스페이스 구성하도록
- 운영, 개발 계 각각 레이블링
- 네이밍 룰 적용
- 서비스 안정성 정책
- pv 없는 db 생성 금지
- 운영할 때 무조건 오토스케일링 구성 요구
- 보안성 강화 정책
- http 사용금지
- 외주 직원은 기간 이후 접근 금지
그래서 이게 뭐냐?
- 정책을 앱로직과 분리된 별도의 코드로 관리하는 것
과정을 조금 구체적으로 보겠다.
- 자체 언어로 정책 구현
- 그러면 정책 엔진에 코드 처리 전적으로위임한다.
- 앱은 정책 판단을 위한 정보만 넘김
- 안 넘어오면 당여니히 처리 안함
- 이렇게 하면 앱과 별도로 어디에든 적용할 수 있게 된다.
- 그럼 도메인, 언어 종속적이지도 않다
적용 분야
- 쿠버에서도 쓰일 수 있지만, 다르데에서도 가능
- oauth, oidc와 통합한 서비스에 관리할 때도 적용 가능
- 클라우드 보안 솔루션
- cicd, devops 정책관리
구현체
- open policy agent
- common expression language
- cedar
- 러스트로 만들어졌다고 함
- 아직 인기 없댄다
- hashicorp sentinel
장점
- 자동화 및 일관성
- 버전 관리
- 협업
- 이식성, 반복성
- 검증 용이성
- 문서화
k8s에서 pac 제한 사항
- 원래 pac는 자유롭게 정의 가능하나 쿠버로쓰면 입출력 제한
- 보안 위험 있는 일부 기능 사용 불가
- 정책 호출 방법 다를 수도
- k8s웹훅은 호출 정책이 미리 정해져있음
기술 간 비교
validation admission policy
kyverno
opa gatekeeper
그럼 어떤 상황에 쓰면 좋은 거지..?