Este documento ha sido traducido utilizando tecnología de traducción automática. Si bien nos esforzamos por proporcionar traducciones precisas, no ofrecemos garantías sobre la integridad, precisión o confiabilidad del contenido traducido. En caso de discrepancia, la versión original en inglés prevalecerá y constituirá el texto autorizado.

Esta es documentación inédita para Admission Controller 1.34-dev.

Escribiendo directivas en bruto

Las directivas en bruto son directivas que pueden evaluar documentos JSON arbitrarios. Para más información sobre las directivas en bruto, consulta la página de directivas en bruto.

Ejemplo

Los siguientes ejemplos deberían parecerte familiares si completaste la página de validación de este tutorial.

Recuerda marcar la directiva como raw, utilizando el campo policyType en la configuración metadata.yml. Consulta la especificación de metadatos para más información.

Validación

Vas a escribir una directiva que acepte una solicitud en el siguiente formato:

{
  "request": {
    "user": "alice",
    "action": "read",
    "resource": "products"
  }
}

Valida que solo el usuario admin puede eliminar recursos.

Comienza por estructurar una directiva utilizando la plantilla de directiva OPA.

Primero necesitas cambiar el archivo policy.rego para que se vea así:

package validation

deny[msg] {
    input.request.action == "delete"
    input.request.user != "admin"
    msg := sprintf("user %v is not allowed to delete resources", [input.request.user])
}

El módulo utility/policy.rego necesita modificación para eliminar el código específico de Kubernetes:

package policy

import data.validation

main = {
    "response": response,
}

# OPA policy responses need the uid field to be set.
# If the request doesn't contain a uid, set it to an empty string.
default uid = ""

uid = input.request.uid

response = {
    "uid": uid,
    "allowed": false,
    "status": {"message": reason},
} {
    reason = concat(", ", validation.deny)
    reason != ""
} else = {
    "uid": uid,
    "allowed": true,
} {
    true
}