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
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
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:
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:
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 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
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
HackTricks Cloud