OWASP(Open Web Application Security Project)은
인터넷 세상에서 발생가능한 가장 중요한 보안 취약점을 정리한 문서입니다.
Overview
K8s에 대한 OWASP TOP 10 보안 위협 중 3번째인 개방적인 RBAC(Overly Permissive RBAC Configuration)에 대해서 다루고자 합니다.
역할 기반 접근 제어(RBAC)는 쿠버네티스 기본 인가 매커니즘이며 리소스에 대한 권한을 담당한다.
이런 권한을 동사(get, create, delete 등)과 리소스(pod, service, node 등)과 결합하여 네임스페이스 또는 클러스터 범위가 지정될 수 있습니다.
Overly Permissive RBAC
ServiceAccount, User, Group 등의 오브젝트가 cluster-admin 이라는 k8s 슈퍼 유저에 엑세스할 수 있으면 클러스터 내의 모든 리소스에 모든 작업이 가능합니다.
RBAC를 구현하는 오브젝트는 Role과 ClusterRoleBinding이 있습니다.
RBAC 설정은 다음과 같이 잘못 사용할 경우
컨테이너 내부의 공격 표면을 넓혀 보안 취약점으로 작용합니다.
클러스터 전체에 적용되는 ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: redacted-rbac
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
name: default
namespace: default
prd 네임스페이스에 적용되는 ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: default-sa-namespace-admin
namespace: prd
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: admin
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: system:serviceaccount:prd:default
따라서 전체적으로 최소 권한의 법칙[2]을 준수하여 Role을 정의해야 합니다.
Role은 항상 특정한 역할 내에서 권한을 설정하며, 해당 역할이 속한 네임스페이스를 지정해야 합니다. RoleBinding은 단일 네임스페이스 내의 역할을 참조하거나 클러스터 롤을 참조할 수 있습니다. ClusterRoleBinding은 네임스페이스가 있거나 없을 수 있으며, 모든 네임스페이스 내에서 클러스터 롤을 참조할 수 있습니다.
Role 모범 사례 예제
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""] # "" indicates the core API group
resources: ["pods"]
verbs: ["get", "watch", "list"]
ClusterRoleBinding 모범 사례 예제
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
# "namespace" omitted since ClusterRoles are not namespaced
name: secret-reader
rules:
- apiGroups: [""]
Secret
resources: ["secrets"]
verbs: ["get", "watch", "list"]
특별한 내용은 없었으며 결국은 RBAC 설정을 할 것이라면,
최소 권한의 원칙[2]을 준수하고 이를 어긴 사례를 탐지할 방안이 있어야 한다는 점이 특이했습니다.
전체적으로 ClusterRole, Role, ClusterRoleBinding, RoleBinding, ServiceAccount, User, Group 등에 대해서는 OWASP TOP 10의 범위를 조금 벗어난다고 생각해 간단한 도식화만 첨부하고 나가겠습니다.