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

Ο αρχικός συγγραφέας αυτής της σελίδας είναι 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