# Kubelet Authentication & Authorization
{{#include ../../../banners/hacktricks-training.md}}
## Kubelet Authentication
[**Kutoka kwenye docss:**](https://kubernetes.io/docs/reference/access-authn-authz/kubelet-authn-authz/)
Kwa default, maombi kwa mwisho wa HTTPS wa kubelet ambayo hayakukataliwa na mbinu nyingine za uthibitishaji zilizowekwa yanachukuliwa kama maombi ya kutotambulika, na yanapewa **jina la mtumiaji `system:anonymous`** na **kikundi cha `system:unauthenticated`**.
Mbinu **3** za uthibitishaji ni:
- **Kutotambulika** (default): Tumia kuweka param **`--anonymous-auth=true` au usanidi:**
```json
"authentication": {
"anonymous": {
"enabled": true
},
```
- **Webhook**: Hii itawawezesha **API bearer tokens** za kubectl kama idhini (token yoyote halali itakuwa halali). Ruhusu kwa:
- hakikisha kundi la API `authentication.k8s.io/v1beta1` limewezeshwa katika seva ya API
- anzisha kubelet na bendera za **`--authentication-token-webhook`** na **`--kubeconfig`** au tumia mipangilio ifuatayo:
```json
"authentication": {
"webhook": {
"cacheTTL": "2m0s",
"enabled": true
},
```
> [!NOTE]
> Kubelet inaita **`TokenReview` API** kwenye seva ya API iliyowekwa ili **kubaini taarifa za mtumiaji** kutoka kwa alama za kubeba
- **X509 client certificates:** Ruhusu kuthibitisha kupitia X509 client certs
- angalia [apiserver authentication documentation](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#x509-client-certs) kwa maelezo zaidi
- anza kubelet na bendera `--client-ca-file`, ukitoa pakiti ya CA ili kuthibitisha vyeti vya wateja. Au kwa usanidi:
```json
"authentication": {
"x509": {
"clientCAFile": "/etc/kubernetes/pki/ca.crt"
}
}
```
## Kubelet Authorization
Maombi yoyote ambayo yamefanikiwa kuthibitishwa (ikiwemo maombi ya kutotambulika) **yanaruhusiwa**. Njia ya **kuthibitisha** ya **`AlwaysAllow`** **inaruhusu maombi yote**.
Hata hivyo, thamani nyingine inayowezekana ni **`webhook`** (ambayo ndio utakuwa **ukiona zaidi huko nje**). Njia hii itafanya **ukaguzi wa ruhusa za mtumiaji aliyeidhinishwa** ili kuruhusu au kukataa kitendo.
> [!WARNING]
> Kumbuka kwamba hata kama **uthibitisho wa kutotambulika umewezeshwa**, **upatikanaji wa kutotambulika** huenda **usiwe na ruhusa** za kufanya kitendo chochote.
Kuthibitisha kupitia webhook kunaweza kuwekewa mipangilio kwa kutumia **param `--authorization-mode=Webhook`** au kupitia faili ya usanidi na:
```json
"authorization": {
"mode": "Webhook",
"webhook": {
"cacheAuthorizedTTL": "5m0s",
"cacheUnauthorizedTTL": "30s"
}
},
```
Kubelet inaita **`SubjectAccessReview`** API kwenye seva ya API iliyowekwa ili **kuamua** ikiwa kila ombi lime **idhinishwa.**
Kubelet inaruhusu maombi ya API kwa kutumia njia ile ile ya [attributes za ombi](https://kubernetes.io/docs/reference/access-authn-authz/authorization/#review-your-request-attributes) kama apiserver:
- **Kitendo**
| Kitenzi cha HTTP | kitenzi cha ombi |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| POST | kuunda |
| GET, HEAD | pata (kwa rasilimali binafsi), orodha (kwa makundi, ikiwa ni pamoja na maudhui kamili ya kitu), angalia (kwa kuangalia rasilimali binafsi au kundi la rasilimali) |
| PUT | sasisha |
| PATCH | patch |
| DELETE | futa (kwa rasilimali binafsi), futakoleksiyoni (kwa makundi) |
- **Rasilimali** inayozungumza na Kubelet api ni **daima** **nodes** na **subresource** inapatikana kutoka kwa njia ya ombi linalokuja:
| Kubelet API | rasilimali | subresource |
| ------------ | --------- | ----------- |
| /stats/\* | nodes | stats |
| /metrics/\* | nodes | metrics |
| /logs/\* | nodes | log |
| /spec/\* | nodes | spec |
| _rasilimali zingine zote_ | nodes | proxy |
Kwa mfano, ombi lifuatalo lilijaribu kufikia taarifa za pods za kubelet bila ruhusa:
```bash
curl -k --header "Authorization: Bearer ${TOKEN}" 'https://172.31.28.172:10250/pods'
Forbidden (user=system:node:ip-172-31-28-172.ec2.internal, verb=get, resource=nodes, subresource=proxy)
```
- Tulipata **Forbidden**, hivyo ombi **lilipita ukaguzi wa Uthibitishaji**. La sivyo, tungekuwa na ujumbe wa `Unauthorised` tu.
- Tunaweza kuona **jina la mtumiaji** (katika kesi hii kutoka kwa token)
- Angalia jinsi **rasilimali** ilikuwa **nodes** na **subresource** **proxy** (ambayo ina maana na taarifa za awali)
## References
- [https://kubernetes.io/docs/reference/access-authn-authz/kubelet-authn-authz/](https://kubernetes.io/docs/reference/access-authn-authz/kubelet-authn-authz/)
{{#include ../../../banners/hacktricks-training.md}}