Bug description
The Capsule Helm chart v0.13.7 exposes manager.rbac.strict: true as a configuration option intended to run the controller without cluster-admin privileges. However, enabling this flag does not remove the cluster-admin ClusterRoleBinding from the controller's ServiceAccount — it only adds an aggregate ClusterRole. The controller continues to operate with cluster-admin permissions regardless of the flag value.
Reproduction steps
- Install Capsule via the Helm chart with
manager.rbac.strict: true (chart version 0.13.7, controller image v0.13.7)
- Check the ClusterRoleBinding for the capsule controller:
kubectl get clusterrolebinding | grep capsule-manager
# capsule-manager-rolebinding ClusterRole/cluster-admin ...
3. The binding is still present and references ClusterRole/cluster-admin — strict mode has no effect on it.
Expected behavior
When manager.rbac.strict: true is set, the Helm chart should either:
- Remove the cluster-admin ClusterRoleBinding entirely, OR
- Replace it with a scoped ClusterRole that grants only the permissions Capsule actually needs
Actual behavior
The capsule-manager-rolebinding ClusterRoleBinding persists and still references ClusterRole/cluster-admin, regardless of the manager.rbac.strict flag value.
Evidence
ClusterRoleBinding (confirmed on live cluster):
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: capsule-manager-rolebinding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: capsule
namespace: capsule-system
Helm chart values.yaml (capsule-0.13.7):
rbac:
strict: false # <-- When set to true, expected to remove cluster-admin binding
Controller image: ghcr.io/projectcapsule/capsule:v0.13.7
All Capsule ClusterRoleBindings:
capsule-manager-rolebinding ClusterRole/cluster-admin
capsule-namespace-provisioner ClusterRole/capsule-namespace-provisioner
capsule-pre-delete ClusterRole/capsule-pre-delete
capsule:capsule:aggregate ClusterRole/capsule:capsule:aggregate
capsule:capsule:crds ClusterRole/capsule:capsule:crds
Impact
The Capsule controller runs with full cluster-admin privileges, which violates the principle of least privilege. This is a security concern for production multi-tenant clusters where defense-in-depth is important.
Environment
- Helm chart version: capsule-0.13.7
- Capsule controller image: ghcr.io/projectcapsule/capsule:v0.13.7
- Kubernetes version: v1.34.5
- CNI: Cilium v1.19.4
- CapsuleConfiguration: default (active, reconciled)
Additional context
The manager.rbac.strict flag appears to only add an aggregate ClusterRole but does not modify or remove the existing cluster-admin binding. This may be a bug in the Helm chart template or in the Capsule controller's RBAC initialization logic.
Labels: bug, rbac, helm-chart
Bug description
The Capsule Helm chart v0.13.7 exposes
manager.rbac.strict: trueas a configuration option intended to run the controller withoutcluster-adminprivileges. However, enabling this flag does not remove thecluster-adminClusterRoleBinding from the controller's ServiceAccount — it only adds an aggregate ClusterRole. The controller continues to operate withcluster-adminpermissions regardless of the flag value.Reproduction steps
manager.rbac.strict: true(chart version 0.13.7, controller image v0.13.7)Impact
The Capsule controller runs with full cluster-admin privileges, which violates the principle of least privilege. This is a security concern for production multi-tenant clusters where defense-in-depth is important.
Environment
Additional context
The manager.rbac.strict flag appears to only add an aggregate ClusterRole but does not modify or remove the existing cluster-admin binding. This may be a bug in the Helm chart template or in the Capsule controller's RBAC initialization logic.
Labels:
bug,rbac,helm-chart