RBAC 권한 상승 허용 Role

RBAC의 bind와 escalate 권한은 각각 역할 연결과 역할 정의의 권한 상승 방지 제약을 완화합니다.

설명

RBAC에서 bind와 escalate는 매우 민감한 권한입니다. bind는 자신이 보유하지 않은 권한을 가진 역할도 연결할 수 있게 하며, 별도의 바인딩 생성·수정 권한이 필요합니다. escalate는 역할 생성·수정 권한과 함께 사용하면 자신이 보유하지 않은 권한을 역할에 포함할 수 있게 합니다.

이 권한은 사실상 권한 관리 자체를 위임하는 것과 비슷합니다. 운영 환경에서는 극히 제한된 관리자만 가져야 하며, 일반 사용자나 서비스 계정에는 부여하지 않는 편이 안전합니다.

잠재적 영향

  • 사용자가 자신의 원래 권한보다 높은 권한을 가진 역할을 만들거나 연결할 수 있습니다.
  • 침해된 계정이 빠르게 관리자 수준 권한으로 올라갈 수 있습니다.
  • 클러스터 전체 RBAC 통제가 무너질 수 있습니다.

해결 방법

  • bind와 escalate 권한은 최소 인원에게만 제한하세요.
  • 일반 사용자용 Role과 관리자용 Role을 명확히 분리하세요.
  • RBAC 검토 시 clusterroles, roles, rolebindings, clusterrolebindings의 생성·수정 권한과 고위험 동사를 함께 점검하세요.

예시

역할 정의의 비교이며, 이 권한을 주체에게 부여하는 바인딩은 생략했습니다.

변경 전

yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: rbac-binder
rules:
  - apiGroups: ["rbac.authorization.k8s.io"]
    resources: ["clusterroles"]
    verbs: ["bind"]
  - apiGroups: ["rbac.authorization.k8s.io"]
    resources: ["clusterrolebindings"]
    verbs: ["create"]

변경 후

yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: not-rbac-binder
rules:
  - apiGroups: ["rbac.authorization.k8s.io"]
    resources: ["clusterrolebindings"]
    verbs: ["create"]

설명:

  • 변경 전: bind와 ClusterRoleBinding 생성 권한을 함께 부여해 자신보다 강한 역할을 연결할 수 있습니다.
  • 변경 후: 이 역할에서 bind를 제거합니다. 바인딩 생성 권한은 남아 있지만, 별도로 bind를 받지 않았다면 연결할 역할의 권한을 이미 보유해야 합니다.

참조