설명
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를 받지 않았다면 연결할 역할의 권한을 이미 보유해야 합니다.