|
11 | 11 | - [Signers](#signers)
|
12 | 12 | - [Limiting approval and signer powers for certain signers.](#limiting-approval-and-signer-powers-for-certain-signers)
|
13 | 13 | - [API changes between v1beta1 and v1](#api-changes-between-v1beta1-and-v1)
|
| 14 | + - [Importance of .spec.signerName](#importance-of-specsignername) |
14 | 15 | - [CertificateSigningRequest API Definition](#certificatesigningrequest-api-definition)
|
15 | 16 | - [Manual CSR Approval With Kubectl](#manual-csr-approval-with-kubectl)
|
16 | 17 | - [Automatic CSR Approval Implementations](#automatic-csr-approval-implementations)
|
@@ -272,6 +273,27 @@ Cluster admins can either:
|
272 | 273 | to ensure version-independent authorization policy grants consistent permissions
|
273 | 274 | across v1beta1 and v1 versions)
|
274 | 275 |
|
| 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 | + |
275 | 297 | ### CertificateSigningRequest API Definition
|
276 | 298 |
|
277 | 299 | ```go
|
|
0 commit comments