Kubernetes - OPA Gatekeeper

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Bu sayfanın orijinal yazarı Guillaume

Tanım

Open Policy Agent (OPA) Gatekeeper, Kubernetes’te kabul politikalarını uygulamak için kullanılan bir araçtır. Bu politikalar, OPA tarafından sağlanan bir politika dili olan Rego kullanılarak tanımlanır. Aşağıda OPA Gatekeeper kullanarak bir politika tanımının temel bir örneği bulunmaktadır:

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

Bu Rego politikası, Kubernetes kaynaklarında belirli etiketlerin mevcut olup olmadığını kontrol eder. Gerekli etiketler eksikse, bir ihlal mesajı döner. Bu politika, kümede dağıtılan tüm kaynakların belirli etiketlere sahip olmasını sağlamak için kullanılabilir.

Kısıtlama Uygula

Bu politikayı OPA Gatekeeper ile kullanmak için, Kubernetes’te bir ConstraintTemplate ve bir Constraint tanımlamanız gerekir:

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"

Bu YAML örneğinde, etiketleri gerektiren bir ConstraintTemplate tanımlıyoruz. Ardından, bu kısıtlamaya ensure-pod-has-label adını veriyoruz; bu, k8srequiredlabels ConstraintTemplate’ine atıfta bulunur ve gerekli etiketleri belirtir.

Gatekeeper Kubernetes kümesine dağıtıldığında, bu politikayı uygulayacak ve belirtilen etiketlere sahip olmayan pod’ların oluşturulmasını engelleyecektir.

Referanslar

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin