Kubernetes - OPA Gatekeeper

Reading time: 3 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Der ursprüngliche Autor dieser Seite ist Guillaume

Definition

Open Policy Agent (OPA) Gatekeeper ist ein Tool, das verwendet wird, um Zulassungspolitiken in Kubernetes durchzusetzen. Diese Politiken werden mit Rego definiert, einer von OPA bereitgestellten Richtlinensprache. Unten ist ein einfaches Beispiel für eine Richtlinendefinition mit OPA Gatekeeper:

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

Diese Rego-Richtlinie überprüft, ob bestimmte Labels auf Kubernetes-Ressourcen vorhanden sind. Wenn die erforderlichen Labels fehlen, wird eine Verletzungsnachricht zurückgegeben. Diese Richtlinie kann verwendet werden, um sicherzustellen, dass alle im Cluster bereitgestellten Ressourcen über spezifische Labels verfügen.

Constraint anwenden

Um diese Richtlinie mit OPA Gatekeeper zu verwenden, würden Sie ein ConstraintTemplate und ein Constraint in Kubernetes definieren:

yaml
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
yaml
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 diesem YAML-Beispiel definieren wir ein ConstraintTemplate, um Labels zu verlangen. Dann benennen wir diese Einschränkung ensure-pod-has-label, die auf das k8srequiredlabels ConstraintTemplate verweist und die erforderlichen Labels angibt.

Wenn Gatekeeper im Kubernetes-Cluster bereitgestellt wird, wird es diese Richtlinie durchsetzen und die Erstellung von Pods verhindern, die nicht über die angegebenen Labels verfügen.

References

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks