More Info:
Access to the node proxy sub-resource allows direct interaction with the kubelet API, bypassing normal controls. Restrict it.Risk Level
MediumAddress
SecurityCompliance Standards
- CIS Kubernetes
Triage and Remediation
- Remediation
Remediation
Manual Steps
Manual Steps
-
Identify ClusterRoles granting node/proxy access
- Run on: any machine with
kubectlaccess - Command:
- Save the resulting ClusterRole names for review.
- Run on: any machine with
-
Review detailed rules on those ClusterRoles
- For each ClusterRole name found in step 1, inspect its full spec:
- Confirm which
rulesentries referenceresources: ["nodes/proxy"](or include it among multiple resources) and whatverbsare allowed. Determine whether each use is strictly required (for example, by an infrastructure component that legitimately needsnodes/proxy).
- For each ClusterRole name found in step 1, inspect its full spec:
-
Map ClusterRoles to subjects using them
- Run:
- For each ClusterRole from step 1, list the bindings and subjects (users, groups, service accounts) that receive it:
- Decide, per subject, whether they truly require node proxy access.
- Run:
-
Remove unnecessary nodes/proxy permissions from ClusterRoles
- For any ClusterRole where
nodes/proxyaccess is not justified, edit it to drop that resource from the rules (or restrict verbs to only what is essential; ideally remove it entirely): - In your editor, remove
nodes/proxyfromresources:lists, or delete the entirerulesentry if that is its only resource. Save and exit to apply. - If some subjects only need a subset of permissions, consider:
- Creating a new, more restrictive ClusterRole without
nodes/proxy. - Rebinding those subjects to the new role with
kubectl edit clusterrolebinding <BINDING_NAME>.
- Creating a new, more restrictive ClusterRole without
- For any ClusterRole where
-
Verify no unintended nodes/proxy access remains
- Re-run the discovery query:
- Confirm that only explicitly justified ClusterRoles (if any) appear, and that you have a documented rationale for each.
- Re-run the discovery query:
-
Optionally test from a non-privileged subject
- Using a user or service account that should not have node proxy access, attempt a proxy call and confirm it is forbidden:
- Ensure the response indicates lack of authorization (e.g., “forbidden”) for all subjects that are not explicitly approved to use the node proxy sub-resource.
- Using a user or service account that should not have node proxy access, attempt a proxy call and confirm it is forbidden:
Using kubectl
Using kubectl
rules section, find entries where resources includes nodes/proxy. For example:resourcesincludesnodes/proxywith broadverbs(e.g.,*,proxy,create,update,delete).- ClusterRole is bound to many subjects or to wide scopes (e.g., groups like
system:authenticated).
- Bindings where
subjectsinclude:- Broad groups (e.g.,
system:authenticated,system:unauthenticated). - ServiceAccounts in many namespaces.
- Human users who do not need direct kubelet access.
- Broad groups (e.g.,
nodes/proxy is too wide and should be reconsidered.nodes/proxy plus broad subjects or unnecessary use cases.After you complete your review and any manual adjustments, re-run the initial listing:
nodes/proxy access has been minimized per your policy.Automation
Automation
- Any
ClusterRoleorRolewhose rules include:resources: ["nodes/proxy"]with any verbs, orresources: ["nodes"](or includingnodes) withverbscontaining"proxy", is a potential problem and should be reviewed.
- For each such role:
- Check the bindings sections to see which users, groups, or service accounts (Subjects) are granted this access.
- Access is overly broad if:
- The role is bound to generic groups (e.g.
system:authenticated,system:masters, large user groups), or - The role’s permissions are not strictly required for a narrowly scoped, documented use case (such as specific node debugging workflows).
- The role is bound to generic groups (e.g.

