설명
kubernetes_cluster_role_binding이 cluster-admin 역할을 바인딩하면 해당 주체는 클러스터 전체에 대한 매우 강한 권한을 갖게 됩니다. cluster-admin은 슈퍼유저 권한을 제공하므로 꼭 필요한 경우에만 사용해야 합니다.
이 권한은 모든 네임스페이스와 리소스에 영향을 줄 수 있습니다. 잘못 부여되면 단일 사용자나 서비스 계정의 문제가 클러스터 전체 위험으로 이어질 수 있습니다.
잠재적 영향
- 특정 사용자나 서비스 계정이 클러스터 전체를 제어할 수 있습니다.
- 권한 오남용이나 계정 탈취 시 피해 범위가 매우 커질 수 있습니다.
해결 방법
cluster-admin은 꼭 필요한 운영 주체에만 제한적으로 사용하세요. 일반 작업은 필요한 권한만 포함한 Role 또는 ClusterRole과 적절한 범위의 바인딩으로 분리하세요.- 관리자 권한을 정기적으로 검토하세요. role_ref 변경은 바인딩 교체가 필요하므로 관리 접근 경로를 유지하면서 전환하세요.
예시
변경 후의 cluster는 기본 제한 역할을 뜻하지 않습니다. 해당 ClusterRole을 별도로 정의하고 실제 rules를 검토해야 합니다. 이름만 바꾸어서는 최소 권한이 보장되지 않습니다.
변경 전
hcl
resource "kubernetes_cluster_role_binding" "example" {
metadata {
name = "terraform-example"
}
role_ref {
api_group = "rbac.authorization.k8s.io"
kind = "ClusterRole"
name = "cluster-admin"
}
subject {
kind = "User"
name = "admin"
api_group = "rbac.authorization.k8s.io"
}
}
변경 후
hcl
resource "kubernetes_cluster_role_binding" "example" {
metadata {
name = "terraform-example"
}
role_ref {
api_group = "rbac.authorization.k8s.io"
kind = "ClusterRole"
name = "cluster"
}
subject {
kind = "User"
name = "admin"
api_group = "rbac.authorization.k8s.io"
}
}
설명:
- 변경 전: admin 사용자에게 cluster-admin의 클러스터 전체 권한을 부여합니다.
- 변경 후: cluster라는 ClusterRole을 참조합니다. 그 역할에 필요한 권한만 정의되어 있어야 합니다.