K03/K8s 보안 강화 - 개방적인 RBAC

K8s OWASP Top 10 - K03: Overly Permissive RBAC
이민석's avatar
Nov 29, 2024
K03/K8s 보안 강화 - 개방적인 RBAC

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의 범위를 조금 벗어난다고 생각해 간단한 도식화만 첨부하고 나가겠습니다.

Kubler - Kubernetes RBAC 101 : Authorization (https://kublr.com/blog/kubernetes-rbac-101-authorization/)

Tech. Ref.

OWASP. Ref.

Share article

Unchaptered