More Info:
Access to the Node proxy sub-resource exposes the kubelet API and can bypass audit logging and admission control. It should be limited to trusted administrators only.Risk Level
HighAddress
SecurityCompliance Standards
- CIS AKS
Triage and Remediation
- Remediation
Remediation
Manual Steps
Manual Steps
-
List all roles/clusterroles that can access the Node
proxysub-resource- Run on: any machine with
kubectlaccess
Focus on entries whereresources:includesnodes/proxyornodesandverbs:includesget,list,create, or*. - Run on: any machine with
-
Extract detailed definitions of suspicious roles/clusterroles
- From the names found in step 1, get the full YAML for review.
- Run on: any machine with
kubectlaccess
Review whethernodes/proxy(or broadnodeswith*verbs) is really needed for the intended purpose of that role. -
Identify who is actually getting this proxy access (bindings)
- Run on: any machine with
kubectlaccess
For each role/clusterrole from step 2 that hasnodes/proxyaccess, find the correspondingroleRefin these bindings and note whichusers,groups, orserviceAccountsreceive that access. - Run on: any machine with
-
Decide which subjects truly need Node
proxyaccess- For each bound subject identified in step 3, validate with your operational/incident-response requirements:
- Trusted cluster administrators: generally may retain this access.
- Automation/service accounts, application accounts, and regular users: usually should not need direct kubelet API access via Node proxy.
- Document a list of subjects and whether
nodes/proxyis required, optional, or not justified.
- For each bound subject identified in step 3, validate with your operational/incident-response requirements:
-
Tighten or remove excessive
nodes/proxypermissions- Run on: any machine with
kubectlaccess - Option A – Remove
nodes/proxyfrom the role/clusterrole (preferred):
In the editor, underrules:, removenodes/proxy(or overly broadnodesrules) fromresources:for subjects that should not have it; narrowverbs:if needed. Save and exit.- Option B – If a shared role is too broad, create a new, restricted role and rebind:
UpdateroleRefto point to the new restricted role for non-admin subjects. - Run on: any machine with
-
Re-verify that only trusted admins retain Node
proxyaccess- Run on: any machine with
kubectlaccess
For any remainingnodes/proxyentries, repeat the binding review:Confirm that all roles withnodes/proxyare bound only to explicitly approved, trusted administrator identities. - Run on: any machine with
Using kubectl
Using kubectl
Each line is a
ClusterRole or Role that can reach the nodes proxy sub-resource (either explicitly via proxy or implicitly via * on verbs). Any entry here must be reviewed; these are the only candidates that can expose the kubelet API through the Node proxy.rules::-
Problematic resource/verb combinations (need human judgement):
-
Higher risk patterns:
resources: ["*"]withverbs: ["*"]or includingproxyresources: ["nodes"]+verbs: ["*"]- Any role intended for non-admins (developers, CI, apps) that has
nodeswithproxyor*verbs.
- Non-admin or broad subjects, for example:
system:authenticatedorsystem:unauthenticated- Wildcard groups (e.g.,
system:serviceaccounts,system:serviceaccounts:<ns>) - Application service accounts in app namespaces
- External user groups used by regular developers
nodes proxy should normally be restricted to a small, trusted administrator group or break-glass account.- Any role where:
- The rule snippet shows
nodes/nodes/proxywithproxyor*verbs, and - Bindings list subjects that are not clearly trusted administrators.
- The rule snippet shows
- The output is empty, or
- Any remaining roles are intentionally approved for trusted administrators only, with bindings you have reviewed and accepted.
Automation
Automation
- Any listed
ClusterRoleorRoleis granting some form of Node proxy access. - Especially concerning:
resourcescontainsnodes/proxyornodes/*.resourcescontainsnodesandverbscontainsproxyor*.
- For each such role, review who is bound to it (via
RoleBinding/ClusterRoleBinding) and decide whether they are trusted administrators. If not, adjust or remove the permission manually.

