Skip to content

Commit bc6081c

Browse files
authored
Merge pull request kubernetes#2515 from deads2k/clarify-spec-signer
elaborate on the decision to make spec.signer required for CSRs
2 parents ba05189 + f3048be commit bc6081c

File tree

1 file changed

+22
-0
lines changed
  • keps/sig-auth/1513-certificate-signing-request

1 file changed

+22
-0
lines changed

keps/sig-auth/1513-certificate-signing-request/README.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
- [Signers](#signers)
1212
- [Limiting approval and signer powers for certain signers.](#limiting-approval-and-signer-powers-for-certain-signers)
1313
- [API changes between v1beta1 and v1](#api-changes-between-v1beta1-and-v1)
14+
- [Importance of .spec.signerName](#importance-of-specsignername)
1415
- [CertificateSigningRequest API Definition](#certificatesigningrequest-api-definition)
1516
- [Manual CSR Approval With Kubectl](#manual-csr-approval-with-kubectl)
1617
- [Automatic CSR Approval Implementations](#automatic-csr-approval-implementations)
@@ -272,6 +273,27 @@ Cluster admins can either:
272273
to ensure version-independent authorization policy grants consistent permissions
273274
across v1beta1 and v1 versions)
274275

276+
#### Importance of .spec.signerName
277+
278+
The CSR v1 API uses the `.spec.signerName` to clarify the usage of all well-known signers provided by Kubernetes.
279+
Each signer has a specific purpose and limitations in our [public docs](https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/#kubernetes-signers).
280+
The most noteworthy clarifications are around certificates signed for purposes other than client certificates valid
281+
against the `kube-apiserver`, `kubelet` certificates, and trust distribution.
282+
283+
1. Client certificates were signed and became valid kube-apiserver credentials.
284+
If a different actor wanted to terminate client credentials for itself, using the CSR API created
285+
additional client certificates valid against the `kube-apiserver` which probably wasn't intended.
286+
2. Serving certificates were signed and they were valid to impersonate the `kubelet` in `kube-apiserver` to `kubelet` traffic.
287+
This creates the potential for those certificates to impersonate a `kubelet` when the `kube-apiserver` tries to access one.
288+
3. Using the service account token’s `ca.crt` to verify signed CSRs has never been a design intent.
289+
It has worked on some Kubernetes distributions, but as the trust-distribution indicates any CSR user trying to be
290+
compatible across Kubernetes distributions should not rely on `ca.crt` to verify signed certificates.
291+
292+
By adding and requiring a `.spec.signerName`, the intended usage and trust distribution is clear.
293+
As part of the changes in 1.19, those CSRs which do not fall into an out-of-the-box signer for Kubernetes can create an
294+
approver and signer using the same API constructs.
295+
The individual authorization requirements are in the [docs](https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/#authorization).
296+
275297
### CertificateSigningRequest API Definition
276298

277299
```go

0 commit comments

Comments
 (0)