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

2.5 KiB

Kubernetes - OPA Gatekeeper

El autor original de esta página es Guillaume

Definición

Open Policy Agent (OPA) Gatekeeper es una herramienta utilizada para hacer cumplir políticas de admisión en Kubernetes. Estas políticas se definen utilizando Rego, un lenguaje de políticas proporcionado por OPA. A continuación se muestra un ejemplo básico de una definición de política utilizando OPA Gatekeeper:

regoCopy codepackage 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

Esta política de Rego verifica si ciertas etiquetas están presentes en los recursos de Kubernetes. Si faltan las etiquetas requeridas, devuelve un mensaje de violación. Esta política se puede utilizar para garantizar que todos los recursos desplegados en el clúster tengan etiquetas específicas.

Aplicar Restricción

Para usar esta política con OPA Gatekeeper, debes definir un ConstraintTemplate y un Constraint en 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"

En este ejemplo de YAML, definimos un ConstraintTemplate para requerir etiquetas. Luego, nombramos esta restricción ensure-pod-has-label, que hace referencia al ConstraintTemplate k8srequiredlabels y especifica las etiquetas requeridas.

Cuando Gatekeeper se despliega en el clúster de Kubernetes, hará cumplir esta política, impidiendo la creación de pods que no tengan las etiquetas especificadas.

Referencias