RBAC의 Impersonate 권한 허용

impersonate 권한은 다른 사용자나 서비스 계정으로 가장할 수 있어 사실상 sudo와 유사한 위험을 가집니다.

설명

impersonate 권한이 있으면 허용된 사용자, 그룹, 서비스 계정의 신분으로 요청을 보낼 수 있습니다. 대상 주체가 더 높은 권한을 가졌다면 자신의 원래 권한을 넘어서는 작업을 수행할 수 있습니다.

이 권한은 감사 추적과 권한 통제 모두에 큰 영향을 줍니다. 운영 환경에서는 엄격히 제한해야 하는 고위험 권한입니다.

잠재적 영향

  • 사용자가 다른 계정이나 서비스 계정 권한으로 요청을 수행할 수 있습니다.
  • 권한 상승이 발생할 수 있으며, 감사 시 원래 요청자와 가장한 주체를 함께 확인해야 합니다.
  • 침해된 계정이 빠르게 더 높은 권한으로 확장될 수 있습니다.

해결 방법

  • RBAC에서 impersonate 권한을 일반 계정에 부여하지 마세요.
  • 꼭 필요한 관리자 계정에만 허용하고 resourceNames 등으로 가장할 수 있는 대상을 제한하세요.
  • 감사 로그에서 impersonation 관련 요청을 별도로 모니터링하세요.

예시

역할을 부여하는 바인딩은 생략했습니다. 변경 후에는 실제 API 리소스인 ServiceAccount 조회만 남깁니다. 일반 사용자와 그룹은 조회할 수 있는 Kubernetes API 오브젝트가 아닙니다.

변경 전

yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: impersonator-role
rules:
  - apiGroups: [""]
    resources: ["users", "groups", "serviceaccounts"]
    verbs: ["impersonate"]

변경 후

yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: impersonator-role-neg
rules:
  - apiGroups: [""]
    resources: ["serviceaccounts"]
    verbs: ["get"]

설명:

  • 변경 전: impersonate 권한으로 다른 주체처럼 행동할 수 있어 권한 상승 위험이 큽니다.
  • 변경 후: 이 역할에서는 impersonation을 제거하고 ServiceAccount 조회만 허용합니다. 다른 역할에서 부여된 impersonate 권한도 확인하세요.

참조