Kubernetes - OPA Gatekeeper
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Ο αρχικός συγγραφέας αυτής της σελίδας είναι Guillaume
Ορισμός
Το Open Policy Agent (OPA) Gatekeeper είναι ένα εργαλείο που χρησιμοποιείται για την επιβολή πολιτικών εισόδου στο Kubernetes. Αυτές οι πολιτικές ορίζονται χρησιμοποιώντας το Rego, μια γλώσσα πολιτικής που παρέχεται από το OPA. Παρακάτω είναι ένα βασικό παράδειγμα ορισμού πολιτικής χρησιμοποιώντας το OPA Gatekeeper:
package k8srequiredlabels
violation[{"msg": msg}] {
provided := {label | input.review.object.metadata.labels[label]}
required := {label | label := input.parameters.labels[label]}
missing := required - provided
count(missing) > 0
msg := sprintf("Required labels missing: %v", [missing])
}
default allow = false
Αυτή η πολιτική Rego ελέγχει αν ορισμένες ετικέτες είναι παρούσες στους πόρους Kubernetes. Εάν οι απαιτούμενες ετικέτες λείπουν, επιστρέφει ένα μήνυμα παράβασης. Αυτή η πολιτική μπορεί να χρησιμοποιηθεί για να διασφαλιστεί ότι όλοι οι πόροι που αναπτύσσονται στο cluster έχουν συγκεκριμένες ετικέτες.
Εφαρμογή Περιορισμού
Για να χρησιμοποιήσετε αυτή την πολιτική με το OPA Gatekeeper, θα πρέπει να ορίσετε ένα ConstraintTemplate και ένα Constraint στο Kubernetes:
apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
name: k8srequiredlabels
spec:
crd:
spec:
names:
kind: K8sRequiredLabels
targets:
- target: admission.k8s.gatekeeper.sh
rego: |
package k8srequiredlabels
violation[{"msg": msg}] {
provided := {label | input.review.object.metadata.labels[label]}
required := {label | label := input.parameters.labels[label]}
missing := required - provided
count(missing) > 0
msg := sprintf("Required labels missing: %v", [missing])
}
default allow = false
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sRequiredLabels
metadata:
name: ensure-pod-has-label
spec:
match:
kinds:
- apiGroups: [""]
kinds: ["Pod"]
parameters:
labels:
requiredLabel1: "true"
requiredLabel2: "true"
Σε αυτό το παράδειγμα YAML, ορίζουμε ένα ConstraintTemplate για να απαιτούμε ετικέτες. Στη συνέχεια, ονομάζουμε αυτή την περιοριστική πολιτική ensure-pod-has-label, η οποία αναφέρεται στο k8srequiredlabels ConstraintTemplate και καθορίζει τις απαιτούμενες ετικέτες.
Όταν ο Gatekeeper αναπτυχθεί στο Kubernetes cluster, θα επιβάλει αυτή την πολιτική, αποτρέποντας τη δημιουργία pods που δεν έχουν τις καθορισμένες ετικέτες.
Αναφορές
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks Cloud

