Kubernetes v1.35: Tightening Security with Exec Plugin Allowlists
In an era where security breaches are a constant threat, Kubernetes v1.35's new feature to restrict executables invoked by kubeconfigs is a game changer. This capability allows you to define a clear policy on which credential plugins kubectl can execute, significantly reducing the risk of unauthorized access and potential exploits.
The mechanism is straightforward. You can enforce this policy by modifying your kuberc configuration file to include two key fields: credentialPluginPolicy and credentialPluginAllowlist. The credentialPluginPolicy can be set to AllowAll, DenyAll, or Allowlist, with the default being AllowAll. When you specify Allowlist, you must also define the credentialPluginAllowlist, which details the exact plugins that are permitted. For instance, you might configure it to allow only specific plugins like /usr/local/bin/cloudco-login and get-identity. This level of granularity helps ensure that only trusted plugins can be executed, thus bolstering your security posture.
In production, be mindful of the implications of setting your policy to DenyAll. If you do, any attempt to use a plugin not explicitly allowed will result in errors, such as "plugin 'cloudco-login' not allowed: policy set to 'DenyAll'." This feature is in beta and available without feature gates, so you can adopt it right away. However, always test configurations in a staging environment before rolling them out to production to avoid disruptions.
Key takeaways
- →Configure `credentialPluginPolicy` to control plugin execution.
- →Use `credentialPluginAllowlist` to specify allowed credential plugins.
- →Beware of the `DenyAll` policy, which can block necessary plugins.
- →Test your configuration in a staging environment before production deployment.
Why it matters
Implementing an exec plugin allowlist can drastically reduce the attack surface of your Kubernetes cluster, protecting sensitive credentials from being compromised by unauthorized plugins.
Code examples
1apiVersion: kubectl.config.k8s.io/v1beta1
2kind: Preference
3credentialPluginPolicy: Allowlist
4credentialPluginAllowlist:
5- name: /usr/local/bin/cloudco-login
6- name: get-identityapiVersion: kubectl.config.k8s.io/v1beta1
kind: Preference
credentialPluginPolicy: AllowAllapiVersion: kubectl.config.k8s.io/v1beta1
kind: Preference
credentialPluginPolicy: DenyAllWhen NOT to use this
The official docs don't call out specific anti-patterns here. Use your judgment based on your scale and requirements.
Want the complete reference?
Read official docs35% off certifications and e-learning with code SEPT26BTS35, or 40% off bundles and instructor-led training with SEPT26BTS40. New this month: the MCPA (Model Context Protocol Associate) certification.
Kubernetes Access via Public Clients: Mastering OIDC with PKCE
Unlock secure Kubernetes access by leveraging public clients and PKCE. This approach mitigates the risk of intercepted authorization codes, ensuring robust authentication. Dive in to learn how to configure your identity provider effectively.
Mastering Vulnerability Reports in Open Source: A Kubernetes Perspective
Handling vulnerability reports is crucial for maintaining the integrity of your open source projects. Establish a clear reporting path in your SECURITY.md file to streamline the process. This article dives into the mechanics of vulnerability management and the importance of embargo periods.
KubeletInUserNamespace: Elevating Security in Kubernetes v1.37
Kubernetes v1.37 takes a significant step in security by promoting the KubeletInUserNamespace feature gate to beta. This feature allows node components to run as non-root users, reducing the risk of potential damage. Discover how this works and what you need to know for production.
Get the daily digest
One email. 5 articles. Every morning.
No spam. Unsubscribe anytime.