説明
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 を参照します。そのロールには必要な権限だけを定義する必要があります。