Translated ['src/pentesting-cloud/azure-security/az-services/az-cosmosDB

This commit is contained in:
Translator
2025-01-22 23:09:44 +00:00
parent 13a9d4e39f
commit 3ff2f868f5
5 changed files with 71 additions and 107 deletions

View File

@@ -398,7 +398,8 @@
- [Az - Enumeration Tools](pentesting-cloud/azure-security/az-enumeration-tools.md)
- [Az - Unauthenticated Enum & Initial Entry](pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md)
- [Az - OAuth Apps Phishing](pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-oauth-apps-phishing.md)
- [Az - VMs Unath](pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-vms-unath.md)
- [Az - Storage Unath](pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-storage-unauth.md)
- [Az - VMs Unath](pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-vms-unauth.md)
- [Az - Device Code Authentication Phishing](pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md)
- [Az - Password Spraying](pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-password-spraying.md)
- [Az - Services](pentesting-cloud/azure-security/az-services/README.md)

View File

@@ -17,7 +17,7 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/image (2) (1).p
## Azure CosmosDB
**Azure Cosmos DB** είναι μια πλήρως **διαχειριζόμενη NoSQL, σχεσιακή και διανυσματική βάση δεδομένων** που προσφέρει χρόνους απόκρισης σε χιλιοστά του δευτερολέπτου, αυτόματη κλιμάκωση και διαθεσιμότητα υποστηριζόμενη από SLA με ασφάλεια επιπέδου επιχείρησης. Διευκολύνει την ταχύτερη ανάπτυξη εφαρμογών μέσω έτοιμης διανομής δεδομένων σε πολλές περιοχές, ανοιχτών API, SDK για δημοφιλείς γλώσσες και χαρακτηριστικών βάσης δεδομένων AI όπως η ενσωματωμένη υποστήριξη διανυσμάτων και η απρόσκοπτη ενσωμάτωσή της με Azure AI.
**Azure Cosmos DB** είναι μια πλήρως **διαχειριζόμενη NoSQL, σχεσιακή και διανυσματική βάση δεδομένων** που προσφέρει χρόνους απόκρισης σε χιλιοστά του δευτερολέπτου, αυτόματη κλιμάκωση και διαθεσιμότητα υποστηριζόμενη από SLA με ασφάλεια επιπέδου επιχείρησης. Διευκολύνει την ταχύτερη ανάπτυξη εφαρμογών μέσω έτοιμης διανομής δεδομένων σε πολλές περιοχές, ανοιχτών API, SDK για δημοφιλείς γλώσσες και χαρακτηριστικά βάσης δεδομένων AI όπως η ενσωματωμένη υποστήριξη διανυσμάτων και η απρόσκοπτη ενσωμάτωσή της με Azure AI.
Η Azure Cosmos DB παρέχει πολλαπλά API βάσεων δεδομένων για την μοντελοποίηση πραγματικών δεδομένων χρησιμοποιώντας έγγραφα, σχεσιακά, key-value, γραφήματα και μοντέλα δεδομένων column-family, με αυτά τα API να είναι NoSQL, MongoDB, PostgreSQL, Cassandra, Gremlin και Table.
@@ -33,7 +33,7 @@ https://<Account-Name>.documents.azure.com:443/
{% endcode %}
#### Βάσεις Δεδομένων
Μέσα σε έναν λογαριασμό, μπορείτε να δημιουργήσετε μία ή περισσότερες βάσεις δεδομένων, οι οποίες λειτουργούν ως λογικές ομάδες κοντέινερ. Μια βάση δεδομένων λειτουργεί ως όριο για τη διαχείριση πόρων και τα δικαιώματα χρηστών. Οι βάσεις δεδομένων μπορούν είτε να μοιράζονται την παρεχόμενη απόδοση μεταξύ των κοντέινερ τους είτε να εκχωρούν αποκλειστική απόδοση σε μεμονωμένα κοντέινερ.
Μέσα σε έναν λογαριασμό, μπορείτε να δημιουργήσετε μία ή περισσότερες βάσεις δεδομένων, οι οποίες λειτουργούν ως λογικές ομάδες κοντέινερ. Μια βάση δεδομένων λειτουργεί ως όριο για τη διαχείριση πόρων και τα δικαιώματα χρηστών. Οι βάσεις δεδομένων μπορούν είτε να μοιράζονται την παρεχόμενη απόδοση σε όλα τα κοντέινερ τους είτε να εκχωρούν αποκλειστική απόδοση σε μεμονωμένα κοντέινερ.
#### Κοντέινερ
Η βασική μονάδα αποθήκευσης δεδομένων είναι το κοντέινερ, το οποίο περιέχει έγγραφα JSON και είναι αυτόματα ευρετηριασμένο για αποδοτική αναζήτηση. Τα κοντέινερ είναι ελαστικά κλιμακούμενα και κατανεμημένα σε κατατμήσεις, οι οποίες καθορίζονται από ένα κλειδί κατατμήσεων που ορίζει ο χρήστης. Το κλειδί κατατμήσεων είναι κρίσιμο για την εξασφάλιση βέλτιστης απόδοσης και ομοιόμορφης κατανομής δεδομένων. Για παράδειγμα, ένα κοντέινερ μπορεί να αποθηκεύει δεδομένα πελατών, με το "customerId" ως το κλειδί κατατμήσεων.
@@ -173,7 +173,7 @@ print(item)
```
{% endcode %}
Ένας άλλος τρόπος για να καθιερώσετε μια σύνδεση είναι να χρησιμοποιήσετε το **DefaultAzureCredential()**. Απλώς χρειάζεται να συνδεθείτε (az login) με τον λογαριασμό που έχει τις άδειες και να το εκτελέσετε. Για αυτή την περίπτωση, πρέπει να γίνει μια ανάθεση ρόλου, δίνοντας τις απαραίτητες άδειες (δείτε για περισσότερα)
Ένας άλλος τρόπος για να καθιερώσετε μια σύνδεση είναι να χρησιμοποιήσετε το **DefaultAzureCredential()**. Απλώς χρειάζεται να συνδεθείτε (az login) με τον λογαριασμό που έχει τις άδειες και να το εκτελέσετε. Για αυτή την περίπτωση, πρέπει να γίνει μια ανάθεση ρόλου, δίνοντας τις απαραίτητες άδειες (βλ. για περισσότερα)
{% code overflow="wrap" %}
```python
@@ -203,7 +203,7 @@ print("Document inserted.")
{% endcode %}
### MongoDB
Η API NoSQL του MongoDB είναι μια API βασισμένη σε έγγραφα που χρησιμοποιεί το BSON (Binary JSON) σε μορφή δεδομένων παρόμοια με το JSON. Παρέχει μια γλώσσα ερωτήσεων με δυνατότητες συγκέντρωσης, καθιστώντας την κατάλληλη για εργασία με δομημένα, ημι-δομημένα και αδόμητα δεδομένα. Το endpoint της υπηρεσίας συνήθως ακολουθεί αυτή τη μορφή:
Η API MongoDB NoSQL είναι μια API βασισμένη σε έγγραφα που χρησιμοποιεί το BSON (Binary JSON) σε μορφή δεδομένων παρόμοια με το JSON. Παρέχει μια γλώσσα ερωτήσεων με δυνατότητες συγκέντρωσης, καθιστώντας την κατάλληλη για εργασία με δομημένα, ημι-δομημένα και αδόμητα δεδομένα. Το endpoint της υπηρεσίας συνήθως ακολουθεί αυτή τη μορφή:
{% code overflow="wrap" %}
```bash
@@ -334,7 +334,7 @@ print(f"Inserted document with ID: {result.inserted_id}")
* [https://learn.microsoft.com/en-us/azure/cosmos-db/introduction](https://learn.microsoft.com/en-us/azure/cosmos-db/introduction)
* [https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/security/how-to-grant-data-plane-role-based-access?tabs=built-in-definition%2Ccsharp&pivots=azure-interface-cli](https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/security/how-to-grant-data-plane-role-based-access?tabs=built-in-definition%2Ccsharp&pivots=azure-interface-cli)
## Ανύψωση Δικαιωμάτων
## Ανύψωση Προνομίων
{% content-ref url="../az-privilege-escalation/az-cosmosDB-privesc.md" %}
[az-cosmosDB-privesc.md](../az-privilege-escalation/az-cosmosDB-privesc.md)
@@ -348,8 +348,8 @@ print(f"Inserted document with ID: {result.inserted_id}")
## ToDo
* Η υπόλοιπη βάση δεδομένων εδώ, πίνακες, cassandra, gremlin...
* Ρίξτε μια ματιά στην εκμετάλλευση "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read" και τους ορισμούς ρόλων γιατί εδώ μπορεί να υπάρχει ανύψωση δικαιωμάτων
* Η υπόλοιπη DB εδώ, πίνακες, cassandra, gremlin...
* Ρίξτε μια ματιά στην εκμετάλλευση "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read" και τους ορισμούς ρόλων γιατί εδώ μπορεί να υπάρχει ανύψωση προνομίων
* Ρίξτε μια ματιά στις αποκαταστάσεις
{% hint style="success" %}

View File

@@ -1,37 +0,0 @@
# Az - VMs Unath
{{#include ../../../banners/hacktricks-training.md}}
## Virtual Machines
Για περισσότερες πληροφορίες σχετικά με τα Azure Virtual Machines, ελέγξτε:
{{#ref}}
../az-services/vms/
{{#endref}}
### Exposed vulnerable service
Μια υπηρεσία δικτύου που είναι ευάλωτη σε κάποιο RCE.
### Public Gallery Images
Μια δημόσια εικόνα μπορεί να έχει μυστικά μέσα της:
```bash
# List all community galleries
az sig list-community --output table
# Search by publisherUri
az sig list-community --output json --query "[?communityMetadata.publisherUri=='https://3nets.io']"
```
### Δημόσιες Επεκτάσεις
Αυτό θα ήταν πιο περίεργο αλλά όχι αδύνατο. Μια μεγάλη εταιρεία μπορεί να βάλει μια επέκταση με ευαίσθητα δεδομένα μέσα σε αυτήν:
```bash
# It takes some mins to run
az vm extension image list --output table
# Get extensions by publisher
az vm extension image list --publisher "Site24x7" --output table
```
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -1,23 +1,23 @@
# Κατάχρηση Ρόλων/ClusterRoles στο Kubernetes
# Abusing Roles/ClusterRoles in Kubernetes
{{#include ../../../banners/hacktricks-training.md}}
Εδώ μπορείτε να βρείτε κάποιες δυνητικά επικίνδυνες ρυθμίσεις Ρόλων και ClusterRoles.\
Θυμηθείτε ότι μπορείτε να αποκτήσετε όλους τους υποστηριζόμενους πόρους με `kubectl api-resources`
Εδώ μπορείτε να βρείτε κάποιες δυνητικά επικίνδυνες ρυθμίσεις Roles και ClusterRoles.\
Θυμηθείτε ότι μπορείτε να αποκτήσετε όλους τους υποστηριζόμενους πόρους με το `kubectl api-resources`
## **Αύξηση Προνομίων**
## **Privilege Escalation**
Αναφερόμενη ως η τέχνη του να αποκτάς **πρόσβαση σε έναν διαφορετικό κύριο** εντός του cluster **με διαφορετικά προνόμια** (εντός του kubernetes cluster ή σε εξωτερικά νέφη) από αυτά που ήδη έχεις, στο Kubernetes υπάρχουν βασικά **4 κύριες τεχνικές για την αύξηση προνομίων**:
Αναφερόμενος ως η τέχνη του να αποκτάς **πρόσβαση σε έναν διαφορετικό κύριο** εντός του cluster **με διαφορετικά προνόμια** (εντός του kubernetes cluster ή σε εξωτερικά νέφη) από αυτά που ήδη έχετε, στο Kubernetes υπάρχουν βασικά **4 κύριες τεχνικές για την κλιμάκωση προνομίων**:
- Να μπορείς να **παριστάνεις** άλλους χρήστες/ομάδες/SAs με καλύτερα προνόμια εντός του kubernetes cluster ή σε εξωτερικά νέφη
- Να μπορείς να **δημιουργείς/διορθώνεις/εκτελείς pods** όπου μπορείς να **βρεις ή να συνδέσεις SAs** με καλύτερα προνόμια εντός του kubernetes cluster ή σε εξωτερικά νέφη
- Να μπορείς να **διαβάζεις μυστικά** καθώς τα tokens των SAs αποθηκεύονται ως μυστικά
- Να μπορείς να **διαφύγεις στον κόμβο** από ένα κοντέινερ, όπου μπορείς να κλέψεις όλα τα μυστικά των κοντέινερ που εκτελούνται στον κόμβο, τα διαπιστευτήρια του κόμβου και τα δικαιώματα του κόμβου εντός του νέφους στο οποίο εκτελείται (αν υπάρχει)
- Μια πέμπτη τεχνική που αξίζει να αναφερθεί είναι η ικανότητα να **τρέχεις port-forward** σε ένα pod, καθώς μπορεί να έχεις πρόσβαση σε ενδιαφέροντες πόρους εντός αυτού του pod.
- Να είστε σε θέση να **παριστάνετε** άλλους χρήστες/ομάδες/SAs με καλύτερα προνόμια εντός του kubernetes cluster ή σε εξωτερικά νέφη
- Να είστε σε θέση να **δημιουργείτε/διορθώνετε/εκτελείτε pods** όπου μπορείτε να **βρείτε ή να συνδέσετε SAs** με καλύτερα προνόμια εντός του kubernetes cluster ή σε εξωτερικά νέφη
- Να είστε σε θέση να **διαβάζετε μυστικά** καθώς τα tokens των SAs αποθηκεύονται ως μυστικά
- Να είστε σε θέση να **διαφύγετε στον κόμβο** από ένα κοντέινερ, όπου μπορείτε να κλέψετε όλα τα μυστικά των κοντέινερ που εκτελούνται στον κόμβο, τα διαπιστευτήρια του κόμβου και τα δικαιώματα του κόμβου εντός του νέφους στο οποίο εκτελείται (αν υπάρχει)
- Μια πέμπτη τεχνική που αξίζει να αναφερθεί είναι η ικανότητα να **τρέχετε port-forward** σε ένα pod, καθώς μπορεί να είστε σε θέση να αποκτήσετε πρόσβαση σε ενδιαφέροντες πόρους εντός αυτού του pod.
### Πρόσβαση σε Οποιονδήποτε Πόρο ή Ρήμα (Wildcard)
### Access Any Resource or Verb (Wildcard)
Η **άγρια κάρτα (\*) δίνει άδεια σε οποιονδήποτε πόρο με οποιοδήποτε ρήμα**. Χρησιμοποιείται από διαχειριστές. Μέσα σε ένα ClusterRole αυτό σημαίνει ότι ένας επιτιθέμενος θα μπορούσε να καταχραστεί οποιοδήποτε namespace στο cluster
Η **άγρια κάρτα (\*) δίνει άδεια σε οποιονδήποτε πόρο με οποιοδήποτε ρήμα**. Χρησιμοποιείται από τους διαχειριστές. Μέσα σε ένα ClusterRole αυτό σημαίνει ότι ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί οποιοδήποτε namespace στο cluster
```yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -33,7 +33,7 @@ verbs: ["*"]
Στο RBAC, ορισμένες άδειες ενέχουν σημαντικούς κινδύνους:
1. **`create`:** Δίνει τη δυνατότητα δημιουργίας οποιουδήποτε πόρου του cluster, θέτοντας σε κίνδυνο την κλιμάκωση προνομίων.
1. **`create`:** Χορηγεί τη δυνατότητα δημιουργίας οποιουδήποτε πόρου του cluster, θέτοντας σε κίνδυνο την κλιμάκωση προνομίων.
2. **`list`:** Επιτρέπει την καταγραφή όλων των πόρων, ενδεχομένως διαρρέοντας ευαίσθητα δεδομένα.
3. **`get`:** Επιτρέπει την πρόσβαση σε μυστικά από λογαριασμούς υπηρεσιών, θέτοντας σε κίνδυνο την ασφάλεια.
```yaml
@@ -72,14 +72,14 @@ serviceAccountName: bootstrap-signer
automountServiceAccountToken: true
hostNetwork: true
```
### Δημιουργία Pod & Διαφυγή
### Pod Create & Escape
Τα παρακάτω υποδεικνύουν όλα τα προνόμια που μπορεί να έχει ένα κοντέινερ:
- **Προνομιακή πρόσβαση** (απενεργοποίηση προστασιών και ρύθμιση ικανοτήτων)
- **Απενεργοποίηση namespaces hostIPC και hostPid** που μπορούν να βοηθήσουν στην κλιμάκωση προνομίων
- **Απενεργοποίηση του hostNetwork** namespace, δίνοντας πρόσβαση για κλοπή προνομίων cloud των κόμβων και καλύτερη πρόσβαση σε δίκτυα
- **Σύνδεση hosts / μέσα στο κοντέινερ**
- **Privileged access** (απενεργοποίηση προστασιών και ρύθμιση ικανοτήτων)
- **Disable namespaces hostIPC and hostPid** που μπορούν να βοηθήσουν στην κλιμάκωση προνομίων
- **Disable hostNetwork** namespace, δίνοντας πρόσβαση για κλοπή προνομίων cloud των κόμβων και καλύτερη πρόσβαση σε δίκτυα
- **Mount hosts / inside the container**
```yaml:super_privs.yaml
apiVersion: v1
kind: Pod
@@ -127,20 +127,20 @@ kubectl run r00t --restart=Never -ti --rm --image lol --overrides '{"spec":{"hos
#### Stealth
Πιθανώς θέλετε να είστε **πιο διακριτικοί**, στις επόμενες σελίδες μπορείτε να δείτε τι θα μπορούσατε να έχετε πρόσβαση αν δημιουργήσετε ένα pod ενεργοποιώντας μόνο ορισμένα από τα αναφερόμενα δικαιώματα στο προηγούμενο πρότυπο:
Πιθανώς θέλετε να είστε **πιο διακριτικοί**. Στις επόμενες σελίδες μπορείτε να δείτε τι θα μπορούσατε να έχετε πρόσβαση αν δημιουργήσετε ένα pod ενεργοποιώντας μόνο ορισμένα από τα προνόμια που αναφέρθηκαν στο προηγούμενο πρότυπο:
- **Privileged + hostPID**
- **Privileged μόνο**
- **Privileged only**
- **hostPath**
- **hostPID**
- **hostNetwork**
- **hostIPC**
_Μπορείτε να βρείτε παραδείγματα για το πώς να δημιουργήσετε/εκμεταλλευτείτε τις προηγούμενες ρυθμίσεις privileged pods στο_ [_https://github.com/BishopFox/badPods_](https://github.com/BishopFox/badPods)
_Μπορείτε να βρείτε παραδείγματα για το πώς να δημιουργήσετε/καταχραστείτε τις προηγούμενες ρυθμίσεις privileged pods στο_ [_https://github.com/BishopFox/badPods_](https://github.com/BishopFox/badPods)
### Pod Create - Μετακίνηση στο cloud
### Pod Create - Move to cloud
Αν μπορείτε να **δημιουργήσετε** ένα **pod** (και προαιρετικά έναν **λογαριασμό υπηρεσίας**) μπορεί να είστε σε θέση να **αποκτήσετε δικαιώματα σε περιβάλλον cloud** αναθέτοντας **ρόλους cloud σε ένα pod ή σε έναν λογαριασμό υπηρεσίας** και στη συνέχεια να έχετε πρόσβαση σε αυτό.\
Αν μπορείτε να **δημιουργήσετε** ένα **pod** (και προαιρετικά έναν **λογαριασμό υπηρεσίας**) μπορεί να είστε σε θέση να **αποκτήσετε προνόμια σε περιβάλλον cloud** αναθέτοντας **ρόλους cloud σε ένα pod ή σε έναν λογαριασμό υπηρεσίας** και στη συνέχεια να έχετε πρόσβαση σε αυτό.\
Επιπλέον, αν μπορείτε να δημιουργήσετε ένα **pod με το namespace δικτύου του host**, μπορείτε να **κλέψετε τον ρόλο IAM** της **περίπτωσης** του **κόμβου**.
Για περισσότερες πληροφορίες ελέγξτε:
@@ -149,9 +149,9 @@ _Μπορείτε να βρείτε παραδείγματα για το πώς
pod-escape-privileges.md
{{#endref}}
### **Δημιουργία/Επικαιροποίηση Ανάπτυξης, Daemonsets, Statefulsets, Replicationcontrollers, Replicasets, Jobs και Cronjobs**
### **Create/Patch Deployment, Daemonsets, Statefulsets, Replicationcontrollers, Replicasets, Jobs and Cronjobs**
Είναι δυνατόν να εκμεταλλευτείτε αυτές τις άδειες για να **δημιουργήσετε ένα νέο pod** και να εδραιώσετε δικαιώματα όπως στο προηγούμενο παράδειγμα.
Είναι δυνατόν να καταχραστείτε αυτά τα δικαιώματα για να **δημιουργήσετε ένα νέο pod** και να εδραιώσετε προνόμια όπως στο προηγούμενο παράδειγμα.
Το παρακάτω yaml **δημιουργεί ένα daemonset και εξάγει το token του SA** μέσα στο pod:
```yaml
@@ -211,7 +211,7 @@ As [**indicated in this research**](https://jackleadford.github.io/containers/20
Επομένως, ένας επιτιθέμενος με **access to write in the /var/log/ folder** του container θα μπορούσε να εκμεταλλευτεί αυτή τη συμπεριφορά με 2 τρόπους:
- Modifying the `0.log` file of its container (συνήθως βρίσκεται στο `/var/logs/pods/namespace_pod_uid/container/0.log`) ώστε να είναι ένα **symlink pointing to `/etc/shadow`** για παράδειγμα. Τότε, θα μπορείτε να εξάγετε το αρχείο shadow των hosts κάνοντας:
- Modifying the `0.log` file of its container (συνήθως βρίσκεται στο `/var/logs/pods/namespace_pod_uid/container/0.log`) ώστε να είναι ένα **symlink pointing to `/etc/shadow`** για παράδειγμα. Τότε, θα μπορείτε να exfiltrate hosts shadow file κάνοντας:
```bash
kubectl logs escaper
failed to get parse function: unsupported log format: "root::::::::\n"
@@ -239,7 +239,7 @@ curl -k -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Im[...]' 'https://
```bash
mount -o rw,remount /hostlogs/
```
#### Παράκαμψη προστασίας hostPath readOnly <a href="#bypassing-hostpath-readonly-protection" id="bypassing-hostpath-readonly-protection"></a>
#### Bypassing hostPath readOnly protection <a href="#bypassing-hostpath-readonly-protection" id="bypassing-hostpath-readonly-protection"></a>
Όπως αναφέρεται σε [**αυτή την έρευνα**](https://jackleadford.github.io/containers/2020/03/06/pvpost.html), είναι δυνατόν να παρακαμφθεί η προστασία:
```yaml
@@ -247,7 +247,7 @@ allowedHostPaths:
- pathPrefix: "/foo"
readOnly: true
```
Που προοριζόταν να αποτρέψει τις διαφυγές όπως οι προηγούμενες, χρησιμοποιώντας, αντί για μια προσάρτηση hostPath, έναν PersistentVolume και έναν PersistentVolumeClaim για να προσθέσει έναν φάκελο του host στο κοντέινερ με δικαιώματα εγγραφής:
Που προοριζόταν να αποτρέψει τις διαφυγές όπως οι προηγούμενες, χρησιμοποιώντας, αντί για μια προσάρτηση hostPath, έναν PersistentVolume και μια PersistentVolumeClaim για να προσθέσει έναν φάκελο του host στο κοντέινερ με δικαιώματα εγγραφής:
```yaml
apiVersion: v1
kind: PersistentVolume
@@ -295,7 +295,7 @@ name: task-pv-storage-vol
```
### **Υποκατάσταση προνομιακών λογαριασμών**
Με ένα [**δικαίωμα υποκατάστασης χρήστη**](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#user-impersonation), ένας επιτιθέμενος θα μπορούσε να υποκαταστήσει έναν προνομιακό λογαριασμό.
Με ένα [**προνόμιο υποκατάστασης χρήστη**](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#user-impersonation), ένας επιτιθέμενος θα μπορούσε να υποκαταστήσει έναν προνομιακό λογαριασμό.
Απλά χρησιμοποιήστε την παράμετρο `--as=<username>` στην εντολή `kubectl` για να υποκαταστήσετε έναν χρήστη, ή `--as-group=<group>` για να υποκαταστήσετε μια ομάδα:
```bash
@@ -319,7 +319,7 @@ curl -v -H "Authorization: Bearer <jwt_token>" https://<master_ip>:<port>/api/v1
### Δημιουργία και Ανάγνωση Μυστικών
Υπάρχει ένας ειδικός τύπος μυστικού Kubernetes του τύπου **kubernetes.io/service-account-token** που αποθηκεύει τα tokens του serviceaccount.
Αν έχετε άδειες για να δημιουργείτε και να διαβάζετε μυστικά, και γνωρίζετε επίσης το όνομα του serviceaccount, μπορείτε να δημιουργήσετε ένα μυστικό ως εξής και στη συνέχεια να κλέψετε το token του serviceaccount του θύματος από αυτό:
Αν έχετε άδειες για να δημιουργείτε και να διαβάζετε μυστικά, και γνωρίζετε επίσης το όνομα του serviceaccount, μπορείτε να δημιουργήσετε ένα μυστικό ως εξής και στη συνέχεια να κλέψετε το token του θύματος serviceaccount από αυτό:
```yaml
apiVersion: v1
kind: Secret
@@ -380,19 +380,19 @@ $ kubectl get secret stolen-admin-sa-token --token=$SECRETS_MANAGER_TOKEN -o jso
```
Σημειώστε ότι αν έχετε άδεια να δημιουργείτε και να διαβάζετε μυστικά σε ένα συγκεκριμένο namespace, ο λογαριασμός υπηρεσίας του θύματος πρέπει επίσης να βρίσκεται σε αυτό το ίδιο namespace.
### Ανάγνωση ενός μυστικού brute-forcing token IDs
### Ανάγνωση ενός μυστικού βίαιη επίθεση σε αναγνωριστικά token
Ενώ ένας επιτιθέμενος που κατέχει ένα token με δικαιώματα ανάγνωσης απαιτεί το ακριβές όνομα του μυστικού για να το χρησιμοποιήσει, σε αντίθεση με το ευρύτερο προνόμιο _**listing secrets**_, υπάρχουν ακόμα ευπάθειες. Οι προεπιλεγμένοι λογαριασμοί υπηρεσίας στο σύστημα μπορούν να καταμετρηθούν, καθένας συνδεδεμένος με ένα μυστικό. Αυτά τα μυστικά έχουν μια δομή ονόματος: ένα στατικό πρόθεμα ακολουθούμενο από έναν τυχαίο αλφαριθμητικό token πέντε χαρακτήρων (εξαιρουμένων ορισμένων χαρακτήρων) σύμφωνα με τον [κώδικα πηγής](https://github.com/kubernetes/kubernetes/blob/8418cccaf6a7307479f1dfeafb0d2823c1c37802/staging/src/k8s.io/apimachinery/pkg/util/rand/rand.go#L83).
Ενώ ένας επιτιθέμενος που κατέχει ένα token με δικαιώματα ανάγνωσης απαιτεί το ακριβές όνομα του μυστικού για να το χρησιμοποιήσει, σε αντίθεση με το ευρύτερο προνόμιο _**καταγραφής μυστικών**_, υπάρχουν ακόμα ευπάθειες. Οι προεπιλεγμένοι λογαριασμοί υπηρεσίας στο σύστημα μπορούν να καταμετρηθούν, καθένας συνδεδεμένος με ένα μυστικό. Αυτά τα μυστικά έχουν μια δομή ονόματος: ένα στατικό πρόθεμα ακολουθούμενο από έναν τυχαίο αλφαριθμητικό κωδικό πέντε χαρακτήρων (εξαιρουμένων ορισμένων χαρακτήρων) σύμφωνα με τον [κώδικα πηγής](https://github.com/kubernetes/kubernetes/blob/8418cccaf6a7307479f1dfeafb0d2823c1c37802/staging/src/k8s.io/apimachinery/pkg/util/rand/rand.go#L83).
Το token παράγεται από ένα περιορισμένο σύνολο 27 χαρακτήρων (`bcdfghjklmnpqrstvwxz2456789`), αντί για το πλήρες αλφαριθμητικό εύρος. Αυτός ο περιορισμός μειώνει τον συνολικό δυνατό αριθμό συνδυασμών σε 14,348,907 (27^5). Ως εκ τούτου, ένας επιτιθέμενος θα μπορούσε λογικά να εκτελέσει μια επίθεση brute-force για να deduce το token μέσα σε λίγες ώρες, ενδεχομένως οδηγώντας σε κλιμάκωση προνομίων μέσω της πρόσβασης σε ευαίσθητους λογαριασμούς υπηρεσίας.
Ο κωδικός παράγεται από ένα περιορισμένο σύνολο 27 χαρακτήρων (`bcdfghjklmnpqrstvwxz2456789`), αντί για το πλήρες αλφαριθμητικό εύρος. Αυτός ο περιορισμός μειώνει τον συνολικό δυνατό αριθμό συνδυασμών σε 14,348,907 (27^5). Ως εκ τούτου, ένας επιτιθέμενος θα μπορούσε να εκτελέσει μια βίαιη επίθεση για να deduce τον κωδικό μέσα σε λίγες ώρες, ενδεχομένως οδηγώντας σε κλιμάκωση προνομίων μέσω της πρόσβασης σε ευαίσθητους λογαριασμούς υπηρεσίας.
### Αιτήματα Υπογραφής Πιστοποιητικών
Αν έχετε τα ρήματα **`create`** στον πόρο `certificatesigningrequests` (ή τουλάχιστον στο `certificatesigningrequests/nodeClient`). Μπορείτε να **δημιουργήσετε** ένα νέο CeSR ενός **νέου κόμβου.**
Σύμφωνα με την [τεκμηρίωση είναι δυνατό να εγκρίνετε αυτόματα αυτά τα αιτήματα](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/), οπότε σε αυτή την περίπτωση **δεν χρειάζεστε επιπλέον δικαιώματα**. Αν όχι, θα χρειαστεί να μπορείτε να εγκρίνετε το αίτημα, που σημαίνει ενημέρωση στο `certificatesigningrequests/approval` και `approve` στο `signers` με resourceName `<signerNameDomain>/<signerNamePath>` ή `<signerNameDomain>/*`
Σύμφωνα με την [τεκμηρίωση είναι δυνατό να εγκρίνετε αυτόματα αυτά τα αιτήματα](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/), οπότε σε αυτή την περίπτωση **δεν χρειάζεστε επιπλέον δικαιώματα**. Αν όχι, θα πρέπει να μπορείτε να εγκρίνετε το αίτημα, που σημαίνει ενημέρωση στο `certificatesigningrequests/approval` και `approve` στο `signers` με resourceName `<signerNameDomain>/<signerNamePath>` ή `<signerNameDomain>/*`
Ένα **παράδειγμα ρόλου** με όλα τα απαιτούμενα δικαιώματα είναι:
Ένα **παράδειγμα ρόλου** με όλες τις απαιτούμενες άδειες είναι:
```yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -423,10 +423,10 @@ resourceNames:
verbs:
- approve
```
Έτσι, με την έγκριση του νέου CSR κόμβου, μπορείτε να **καταχραστείτε** τις ειδικές άδειες των κόμβων για να **κλέψετε μυστικά** και να **αναβαθμίσετε προνόμια**.
Έτσι, με την έγκριση του νέου CSR κόμβου, μπορείτε να **καταχραστείτε** τις ειδικές άδειες των κόμβων για να **κλέψετε μυστικά** και να **ανεβάσετε δικαιώματα**.
Στο [**αυτό το άρθρο**](https://www.4armed.com/blog/hacking-kubelet-on-gke/) και [**σε αυτό**](https://rhinosecuritylabs.com/cloud-security/kubelet-tls-bootstrap-privilege-escalation/) η διαμόρφωση TLS Bootstrap του GKE K8s είναι ρυθμισμένη με **αυτόματη υπογραφή** και καταχράται για να δημιουργήσει διαπιστευτήρια ενός νέου κόμβου K8s και στη συνέχεια να τα καταχραστεί για να αναβαθμίσει προνόμια κλέβοντας μυστικά.\
Αν **έχετε τα αναφερόμενα προνόμια, μπορείτε να κάνετε το ίδιο**. Σημειώστε ότι το πρώτο παράδειγμα παρακάμπτει το σφάλμα που εμποδίζει έναν νέο κόμβο να έχει πρόσβαση σε μυστικά μέσα σε κοντέινερ, επειδή ένας **κόμβος μπορεί να έχει πρόσβαση μόνο στα μυστικά των κοντέινερ που είναι τοποθετημένα σε αυτόν.**
Στο [**αυτό το άρθρο**](https://www.4armed.com/blog/hacking-kubelet-on-gke/) και [**σε αυτό**](https://rhinosecuritylabs.com/cloud-security/kubelet-tls-bootstrap-privilege-escalation/) η διαμόρφωση TLS Bootstrap του GKE K8s είναι ρυθμισμένη με **αυτόματη υπογραφή** και καταχράται για να δημιουργήσει διαπιστευτήρια ενός νέου κόμβου K8s και στη συνέχεια να τα καταχραστεί για να ανεβάσει δικαιώματα κλέβοντας μυστικά.\
Αν **έχετε τα αναφερόμενα δικαιώματα, μπορείτε να κάνετε το ίδιο**. Σημειώστε ότι το πρώτο παράδειγμα παρακάμπτει το σφάλμα που εμποδίζει έναν νέο κόμβο να έχει πρόσβαση σε μυστικά μέσα σε κοντέινερ, επειδή ένας **κόμβος μπορεί να έχει πρόσβαση μόνο στα μυστικά των κοντέινερ που είναι τοποθετημένα σε αυτόν.**
Ο τρόπος για να παρακάμψετε αυτό είναι απλώς να **δημιουργήσετε διαπιστευτήρια κόμβου για το όνομα του κόμβου όπου είναι τοποθετημένο το κοντέινερ με τα ενδιαφέροντα μυστικά** (αλλά απλώς ελέγξτε πώς να το κάνετε στο πρώτο άρθρο):
```bash
@@ -540,29 +540,29 @@ kubectl delete pods -n kube-system <privileged_pod_name>
```
### Κατάσταση Υπηρεσιών (CVE-2020-8554)
Οι κύριοι που μπορούν να **τροποποιήσουν** **`services/status`** μπορεί να ρυθμίσουν το πεδίο `status.loadBalancer.ingress.ip` για να εκμεταλλευτούν το **μη διορθωμένο CVE-2020-8554** και να ξεκινήσουν **MiTM επιθέσεις κατά του cluster**. Οι περισσότερες μετρήσεις για το CVE-2020-8554 αποτρέπουν μόνο τις υπηρεσίες ExternalIP (σύμφωνα με [**αυτό**](https://github.com/PaloAltoNetworks/rbac-police/blob/main/lib/modify_service_status_cve_2020_8554.rego)).
Οι κύριοι που μπορούν να **τροποποιήσουν** **`services/status`** μπορεί να ρυθμίσουν το πεδίο `status.loadBalancer.ingress.ip` για να εκμεταλλευτούν το **μη διορθωμένο CVE-2020-8554** και να ξεκινήσουν **MiTM επιθέσεις κατά του clus**ter. Οι περισσότερες μετρήσεις για το CVE-2020-8554 αποτρέπουν μόνο τις υπηρεσίες ExternalIP (σύμφωνα με [**αυτό**](https://github.com/PaloAltoNetworks/rbac-police/blob/main/lib/modify_service_status_cve_2020_8554.rego)).
### Κατάσταση Κόμβων και Pods
Οι κύριοι με **`update`** ή **`patch`** δικαιώματα πάνω σε `nodes/status` ή `pods/status`, θα μπορούσαν να τροποποιήσουν τις ετικέτες για να επηρεάσουν τους περιορισμούς προγραμματισμού που επιβάλλονται.
## Ενσωματωμένη Πρόληψη Κλιμάκωσης Δικαιωμάτων
## Ενσωματωμένη Πρόληψη Κλιμάκωσης Προνομίων
Το Kubernetes διαθέτει έναν [ενσωματωμένο μηχανισμό](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#privilege-escalation-prevention-and-bootstrapping) για την πρόληψη της κλιμάκωσης δικαιωμάτων.
Το Kubernetes διαθέτει έναν [ενσωματωμένο μηχανισμό](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#privilege-escalation-prevention-and-bootstrapping) για την πρόληψη της κλιμάκωσης προνομίων.
Αυτό το σύστημα διασφαλίζει ότι **οι χρήστες δεν μπορούν να αυξήσουν τα δικαιώματά τους τροποποιώντας ρόλους ή δεσμεύσεις ρόλων**. Η επιβολή αυτού του κανόνα συμβαίνει σε επίπεδο API, παρέχοντας μια προστασία ακόμη και όταν ο RBAC authorizer είναι ανενεργός.
Αυτό το σύστημα διασφαλίζει ότι **οι χρήστες δεν μπορούν να αυξήσουν τα προνόμιά τους τροποποιώντας ρόλους ή δεσμεύσεις ρόλων**. Η επιβολή αυτού του κανόνα συμβαίνει σε επίπεδο API, παρέχοντας μια προστασία ακόμη και όταν ο RBAC authorizer είναι ανενεργός.
Ο κανόνας stipulates ότι ένας **χρήστης μπορεί να δημιουργήσει ή να ενημερώσει έναν ρόλο μόνο εάν κατέχει όλα τα δικαιώματα που περιλαμβάνει ο ρόλος**. Επιπλέον, το πεδίο των υπαρχόντων δικαιωμάτων του χρήστη πρέπει να ευθυγραμμίζεται με αυτό του ρόλου που προσπαθεί να δημιουργήσει ή να τροποποιήσει: είτε σε επίπεδο cluster για ClusterRoles είτε περιορισμένο στην ίδια namespace (ή σε επίπεδο cluster) για Roles.
Ο κανόνας stipulates ότι ένας **χρήστης μπορεί να δημιουργήσει ή να ενημερώσει έναν ρόλο μόνο εάν κατέχει όλα τα δικαιώματα που περιλαμβάνει ο ρόλος**. Επιπλέον, το εύρος των υφιστάμενων δικαιωμάτων του χρήστη πρέπει να ευθυγραμμίζεται με αυτό του ρόλου που προσπαθεί να δημιουργήσει ή να τροποποιήσει: είτε σε επίπεδο cluster για ClusterRoles είτε περιορισμένο στην ίδια namespace (ή σε επίπεδο cluster) για Roles.
> [!WARNING]
> Υπάρχει μια εξαίρεση στον προηγούμενο κανόνα. Εάν ένας κύριος έχει το **ρήμα `escalate`** πάνω σε **`roles`** ή **`clusterroles`** μπορεί να αυξήσει τα δικαιώματα των ρόλων και των clusterroles ακόμη και χωρίς να έχει τα δικαιώματα ο ίδιος.
> Υπάρχει μια εξαίρεση στον προηγούμενο κανόνα. Εάν ένας κύριος έχει το **ρήμα `escalate`** πάνω σε **`roles`** ή **`clusterroles`** μπορεί να αυξήσει τα προνόμια των ρόλων και των clusterroles ακόμη και χωρίς να έχει τα δικαιώματα ο ίδιος.
### **Λάβετε & Ενημερώστε RoleBindings/ClusterRoleBindings**
> [!CAUTION]
> **Φαίνεται ότι αυτή η τεχνική δούλευε πριν, αλλά σύμφωνα με τις δοκιμές μου δεν λειτουργεί πια για τον ίδιο λόγο που εξηγήθηκε στην προηγούμενη ενότητα. Δεν μπορείτε να δημιουργήσετε/τροποποιήσετε μια rolebinding για να δώσετε στον εαυτό σας ή σε έναν διαφορετικό SA κάποια δικαιώματα αν δεν έχετε ήδη.**
> **Φαίνεται ότι αυτή η τεχνική λειτουργούσε πριν, αλλά σύμφωνα με τις δοκιμές μου δεν λειτουργεί πια για τον ίδιο λόγο που εξηγήθηκε στην προηγούμενη ενότητα. Δεν μπορείτε να δημιουργήσετε/τροποποιήσετε μια rolebinding για να δώσετε στον εαυτό σας ή σε έναν διαφορετικό SA κάποια προνόμια αν δεν έχετε ήδη.**
Το δικαίωμα να δημιουργήσετε Rolebindings επιτρέπει σε έναν χρήστη να **δεσμεύσει ρόλους σε έναν λογαριασμό υπηρεσίας**. Αυτό το δικαίωμα μπορεί δυνητικά να οδηγήσει σε κλιμάκωση δικαιωμάτων επειδή **επιτρέπει στον χρήστη να δεσμεύσει δικαιώματα διαχειριστή σε έναν συμβιβασμένο λογαριασμό υπηρεσίας.**
Το προνόμιο να δημιουργήσετε Rolebindings επιτρέπει σε έναν χρήστη να **δεσμεύσει ρόλους σε έναν λογαριασμό υπηρεσίας**. Αυτό το προνόμιο μπορεί δυνητικά να οδηγήσει σε κλιμάκωση προνομίων επειδή **επιτρέπει στον χρήστη να δεσμεύσει προνόμια διαχειριστή σε έναν συμβιβασμένο λογαριασμό υπηρεσίας.**
## Άλλες Επιθέσεις
@@ -608,7 +608,7 @@ add: ["NET_ADMIN"]
# securityContext:
# allowPrivilegeEscalation: true
```
Δείτε τα αρχεία καταγραφής του διακομιστή μεσολάβησης:
Δείτε τα αρχεία καταγραφής του proxy:
```bash
kubectl logs app -C proxy
```
@@ -618,7 +618,7 @@ kubectl logs app -C proxy
Ένας ελεγκτής εισόδου **παρεμβαίνει σε αιτήματα προς τον διακομιστή API του Kubernetes** πριν από την αποθήκευση του αντικειμένου, αλλά **μετά την πιστοποίηση** **και την εξουσιοδότηση** του αιτήματος.
Εάν ένας επιτιθέμενος καταφέρει με κάποιο τρόπο να **εισάγει έναν Κακόβουλο Ελεγκτή Εισόδου**, θα είναι σε θέση να **τροποποιήσει ήδη πιστοποιημένα αιτήματα**. Έχοντας τη δυνατότητα να αποκτήσει προνόμια, και πιο συχνά να παραμείνει στο cluster.
Εάν ένας επιτιθέμενος καταφέρει με κάποιο τρόπο να **εισάγει έναν Κακόβουλο Ελεγκτή Εισόδου**, θα είναι σε θέση να **τροποποιήσει ήδη πιστοποιημένα αιτήματα**. Έχοντας τη δυνατότητα να αποκτήσει προνόμια, και πιο συχνά να παραμείνει στον κόμβο.
**Παράδειγμα από** [**https://blog.rewanthtammana.com/creating-malicious-admission-controllers**](https://blog.rewanthtammana.com/creating-malicious-admission-controllers):
```bash
@@ -639,7 +639,7 @@ kubectl get deploy,svc -n webhook-demo
kubectl run nginx --image nginx
kubectl get po -w
```
Όταν βλέπετε το σφάλμα `ErrImagePull`, ελέγξτε το όνομα της εικόνας με μία από τις ερωτήσεις:
Όταν μπορείτε να δείτε το σφάλμα `ErrImagePull`, ελέγξτε το όνομα της εικόνας με μία από τις ερωτήσεις:
```bash
kubectl get po nginx -o=jsonpath='{.spec.containers[].image}{"\n"}'
kubectl describe po nginx | grep "Image: "
@@ -668,20 +668,20 @@ Value: "rewanthtammana/malicious-image",
## Καλές Πρακτικές
### **Απενεργοποίηση Αυτόματης Τοποθέτησης Δεδομένων Λογαριασμού Υπηρεσίας**
### **Απενεργοποίηση Αυτοματισμού των Tokens Λογαριασμού Υπηρεσίας**
- **Pods και Λογαριασμοί Υπηρεσίας**: Από προεπιλογή, τα pods τοποθετούν ένα διακριτικό λογαριασμού υπηρεσίας. Για να ενισχυθεί η ασφάλεια, το Kubernetes επιτρέπει την απενεργοποίηση αυτής της αυτόματης τοποθέτησης.
- **Pods και Λογαριασμοί Υπηρεσίας**: Από προεπιλογή, τα pods τοποθετούν ένα token λογαριασμού υπηρεσίας. Για την ενίσχυση της ασφάλειας, το Kubernetes επιτρέπει την απενεργοποίηση αυτής της λειτουργίας αυτοματισμού.
- **Πώς να Εφαρμόσετε**: Ορίστε `automountServiceAccountToken: false` στη διαμόρφωση των λογαριασμών υπηρεσίας ή των pods από την έκδοση 1.6 του Kubernetes.
### **Περιοριστική Ανάθεση Χρηστών σε RoleBindings/ClusterRoleBindings**
- **Επιλεκτική Συμπερίληψη**: Βεβαιωθείτε ότι μόνο οι απαραίτητοι χρήστες περιλαμβάνονται σε RoleBindings ή ClusterRoleBindings. Ελέγχετε τακτικά και αφαιρείτε μη σχετικούς χρήστες για να διατηρείτε σφιχτή ασφάλεια.
### **Ρόλοι Ειδικών Χώρων Ονομάτων σε Σύγκριση με Ρόλους Παγκόσμιας Κλάσης**
### **Ρόλοι Ειδικά για Namespace σε Σύγκριση με Ρόλους Cluster-Wide**
- **Ρόλοι vs. ClusterRoles**: Προτιμήστε τη χρήση Ρόλων και RoleBindings για άδειες ειδικών χώρων ονομάτων αντί για ClusterRoles και ClusterRoleBindings, που ισχύουν παγκοσμίως. Αυτή η προσέγγιση προσφέρει πιο λεπτομερή έλεγχο και περιορίζει την έκταση των αδειών.
- **Ρόλοι vs. ClusterRoles**: Προτιμήστε τη χρήση Ρόλων και RoleBindings για άδειες που σχετίζονται με namespace αντί για ClusterRoles και ClusterRoleBindings, που ισχύουν σε επίπεδο cluster. Αυτή η προσέγγιση προσφέρει πιο λεπτομερή έλεγχο και περιορίζει την έκταση των αδειών.
### **Χρησιμοποιήστε αυτοματοποιημένα εργαλεία**
### **Χρήση αυτοματοποιημένων εργαλείων**
{{#ref}}
https://github.com/cyberark/KubiScan

View File

@@ -16,7 +16,7 @@
Λαμβάνεται από την [τεκμηρίωση του 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, αν δεν καθορίσετε μια υπηρεσία, ανατίθεται αυτόματα η_ προεπιλεγμένη _υπηρεσία στην ίδια namespace.”_
**ServiceAccount** είναι ένα αντικείμενο που διαχειρίζεται το Kubernetes και χρησιμοποιείται για να παρέχει μια ταυτότητα για τις διαδικασίες που εκτελούνται σε ένα pod.\
Κάθε service account έχει ένα μυστικό σχετικό με αυτό και αυτό το μυστικό περιέχει ένα bearer token. Αυτό είναι ένα JSON Web Token (JWT), μια μέθοδος για την ασφαλή αναπαράσταση αξιώσεων μεταξύ δύο μερών.
@@ -72,7 +72,7 @@ _**Hot pods είναι**_ pods που περιέχουν ένα προνομια
### Differences between `list` and `get` verbs
Με **`get`** άδειες μπορείτε να αποκτήσετε πληροφορίες συγκεκριμένων περιουσιακών στοιχείων (_`describe` επιλογή στο `kubectl`_) API:
Με **`get`** δικαιώματα μπορείτε να αποκτήσετε πληροφορίες συγκεκριμένων περιουσιακών στοιχείων (_`describe` επιλογή στο `kubectl`_) API:
```
GET /apis/apps/v1/namespaces/{namespace}/deployments/{name}
```
@@ -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 network στο **`/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.
Μπορείτε να βρείτε ένα [**επίσημο cheatsheet kubectl εδώ**](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 )
```
### Πάρτε Υποστηριζόμενους Πόρους
### Λάβετε Υποστηριζόμενους Πόρους
Με αυτές τις πληροφορίες θα γνωρίζετε όλες τις υπηρεσίες που μπορείτε να καταγράψετε
@@ -247,7 +247,7 @@ kurl -k -v https://$APISERVER/api/v1/namespaces/
{{#endtab }}
{{#endtabs }}
### Πάρτε μυστικά
### Λάβετε μυστικά
{{#tabs }}
{{#tab name="kubectl" }}
@@ -461,7 +461,7 @@ k top pod --all-namespaces
## Αλληλεπίδραση με το cluster χωρίς τη χρήση του kubectl
Δεδομένου ότι το Kubernetes control plane εκθέτει ένα REST-ful API, μπορείτε να δημιουργήσετε χειροκίνητα HTTP αιτήματα και να τα στείλετε με άλλα εργαλεία, όπως το **curl** ή το **wget**.
Βλέποντας ότι το Kubernetes control plane εκθέτει ένα REST-ful API, μπορείτε να δημιουργήσετε χειροκίνητα HTTP αιτήματα και να τα στείλετε με άλλα εργαλεία, όπως το **curl** ή το **wget**.
### Διαφυγή από το pod