Kubernetes - OPA Gatekeeper
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
Lâauteur original de cette page est Guillaume
Définition
Open Policy Agent (OPA) Gatekeeper est un outil utilisĂ© pour appliquer des politiques dâadmission dans Kubernetes. Ces politiques sont dĂ©finies Ă lâaide de Rego, un langage de politique fourni par OPA. Ci-dessous un exemple de base dâune dĂ©finition de politique utilisant 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
Cette politique Rego vĂ©rifie si certaines Ă©tiquettes sont prĂ©sentes sur les ressources Kubernetes. Si les Ă©tiquettes requises sont manquantes, elle renvoie un message de violation. Cette politique peut ĂȘtre utilisĂ©e pour sâassurer que toutes les ressources dĂ©ployĂ©es dans le cluster ont des Ă©tiquettes spĂ©cifiques.
Appliquer la contrainte
Pour utiliser cette politique avec OPA Gatekeeper, vous devez définir un ConstraintTemplate et une Constraint dans 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"
Dans cet exemple YAML, nous définissons un ConstraintTemplate pour exiger des étiquettes. Ensuite, nous nommons cette contrainte ensure-pod-has-label, qui fait référence au ConstraintTemplate k8srequiredlabels et spécifie les étiquettes requises.
Lorsque Gatekeeper est dĂ©ployĂ© dans le cluster Kubernetes, il appliquera cette politique, empĂȘchant la crĂ©ation de pods qui nâont pas les Ă©tiquettes spĂ©cifiĂ©es.
Références
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
HackTricks Cloud

