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

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