설명
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 권한도 확인하세요.