cluster-admin の ClusterRoleBinding 権限の確認

クラスター全体の管理が必要な主体だけに cluster-admin を付与してください。

説明

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

参考資料