approve signers
Authorises approval for a named signer.
Meaningless without the approval subresource write, since either verb alone is rejected by the API server.
T0 with following verbs:
Authenticate to the API server as any user, in any group
scoped to signerName kubernetes.io/kube-apiserver-client
Scope this verb by signerName.
Granting approve on the kube-apiserver-client signer is granting client-certificate issuance for the whole cluster.
- API Group
- certificates.k8s.io
- Scope
- cluster
- Audit Level
- RequestResponse
Escalation Paths
Enumerate User subjects already bound to cluster-admin or other high-privilege ClusterRoles via kubectl get clusterrolebinding.
Create a CSR using a CN matching one of those usernames and request the kubernetes.io/kube-apiserver-client signer.
Approve the CSR.
This requires both update on certificatesigningrequests/approval and approve on signers for that exact signerName.
The built-in signing controller issues a real, CA-signed certificate automatically.
No CA key or extra access is needed from the caller.
The cert authenticates as the matched username, inheriting all its RBAC permissions.
It works until expiry.
Individual revocation requires CA rotation.
Additional rights needed:
- T2create certificatesigningrequests+T2update certificatesigningrequests/approval+T3get certificatesigningrequests
· scoped to signerName kubernetes.io/kube-apiserver-client
· all four; no CA key needed
Note:
The CSR API remains dangerous for kube-apiserver client certificates, but the direct built-in system:masters request is rejected by signer policy.
Custom signers or certificates for other bound high-privilege identities can still be escalation paths.
