Files
hacktricks-cloud/src/pentesting-cloud/kubernetes-security/kubernetes-opa-gatekeeper/README.md

2.6 KiB

Kubernetes - OPA Gatekeeper

{{#include ../../../banners/hacktricks-training.md}}

Die oorspronklike skrywer van hierdie bladsy is Guillaume

Definisie

Open Policy Agent (OPA) Gatekeeper is 'n hulpmiddel wat gebruik word om toelatingsbeleide in Kubernetes af te dwing. Hierdie beleide word gedefinieer met behulp van Rego, 'n beleids taal wat deur OPA verskaf word. Hieronder is 'n basiese voorbeeld van 'n beleidsdefinisie wat OPA Gatekeeper gebruik:

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

Hierdie Rego-beleid kontroleer of sekere etikette op Kubernetes-hulpbronne teenwoordig is. As die vereiste etikette ontbreek, keer dit 'n oortredingsboodskap terug. Hierdie beleid kan gebruik word om te verseker dat alle hulpbronne wat in die kluster ontplooi word, spesifieke etikette het.

Pas Beperking Toe

Om hierdie beleid met OPA Gatekeeper te gebruik, sal jy 'n ConstraintTemplate en 'n Constraint in Kubernetes definieer:

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"

In hierdie YAML voorbeeld, definieer ons 'n ConstraintTemplate om etikette te vereis. Dan noem ons hierdie beperking ensure-pod-has-label, wat die k8srequiredlabels ConstraintTemplate verwys en die vereiste etikette spesifiseer.

Wanneer Gatekeeper in die Kubernetes-kluster ontplooi word, sal dit hierdie beleid afdwing, wat die skepping van pods wat nie die gespesifiseerde etikette het nie, voorkom.

References

{{#include ../../../banners/hacktricks-training.md}}