Skip to main content

More Info:

Non-default bindings to the group system:unauthenticated grant permissions to any unauthenticated caller. They should be removed or replaced with authenticated, least-privilege bindings.

Risk Level

Critical

Address

Security

Compliance Standards

  • CIS GKE

Triage and Remediation

Remediation

Manual Steps

  1. List all non-default bindings to system:unauthenticated (run on any machine with kubectl access):
  2. For each listed binding, inspect its current permissions to understand the impact of removal (any machine with kubectl access):
  3. Decide whether each binding is necessary. For any binding that must remain functionally, design a safer alternative:
    • Identify or create an authenticated, user-defined group (for example myorg-public-viewers) outside the cluster.
    • Plan to bind that group to the same Role/ClusterRole instead of system:unauthenticated, and, if possible, reduce the role’s permissions to least privilege.
  4. Create replacement bindings using authenticated groups where needed (any machine with kubectl access). Example YAML for a replacement ClusterRoleBinding:
    Adjust names, kind, and namespace for RoleBinding cases:
  5. After confirming that the replacement bindings satisfy your operational requirements (for example by testing access with an account in the new group), delete the unsafe bindings that reference system:unauthenticated (any machine with kubectl access):
  6. Verification (any machine with kubectl access):
    Confirm that the output is:
On any machine with kubectl access:
  1. List all non-default bindings to system:unauthenticated (review targets before deleting):
Optionally inspect each binding and its permissions before removal, for example:
  1. Delete unsafe ClusterRoleBindings that bind system:unauthenticated (after review):
  1. Delete unsafe RoleBindings that bind system:unauthenticated (after review):
  1. (Optional) Create safer, authenticated bindings instead of system:unauthenticated:
Example manifest to replace a deleted ClusterRoleBinding, binding to a user-defined group:
Apply it:
  1. Verification (rerun the benchmark audit command):