Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Reglas, conjuntos y evaluación en Rego

5 tareas · 36 min · Principiante

En el módulo 13 viste qué debe vigilar una política de infraestructura. Aquí aprendes el lenguaje en que se escribe: Rego. No funciona como los lenguajes que conoces: no ejecuta instrucciones en orden, declara reglas y el motor decide qué se cumple. Esa diferencia explica errores que no dan ningún aviso: una regla que no se cumple por una condición mal pensada simplemente no dice nada, y una política callada se confunde con una política que aprueba. En Bahareque Constructora lees dos archivos de reglas, la entrada que evalúan y el único error que el motor sí grita.

0 de 5 · 0%

Objetivo de la sala

En el módulo 13 viste qué debe vigilar una política de infraestructura. Aquí aprendes el lenguaje en que se escribe: Rego. No funciona como los lenguajes que conoces: no ejecuta instrucciones en orden, declara reglas y el motor decide qué se cumple. Esa diferencia explica errores que no dan ningún aviso: una regla que no se cumple por una condición mal pensada simplemente no dice nada, y una política callada se confunde con una política que aprueba. En Bahareque Constructora lees dos archivos de reglas, la entrada que evalúan y el único error que el motor sí grita.

En Rego hay dos formas de definir una regla. Una regla de conjunto parcial (deny contains msg if { ... }) construye un conjunto: cada vez que el cuerpo se cumple, añade un elemento. Puedes escribir varias definiciones con el mismo nombre, incluso en archivos distintos, y el resultado es la unión de todas. Así funcionan deny y warn en Conftest: cada elemento del conjunto es un mensaje de fallo o de advertencia.

Una regla completa (nivel := "alto" if { ... }) produce un único valor. Si dos definiciones se cumplen a la vez con valores distintos, el motor no elige: devuelve un error de conflicto. Eso es lo contrario de lo que pasa con los conjuntos, y es la razón de que una misma entrada pueda ir bien con una política y romperla con otra.

Responde para continuar

¿Por qué varias definiciones de `deny` conviven sin conflicto y dos definiciones de una regla completa pueden chocar?

Ver pista de ayuda

Piensa en qué devuelve cada tipo de regla, un conjunto de elementos o un único valor.

Para saber qué hace una política no hace falta ejecutarla: se lee la regla y se aplican sus condiciones a la entrada. Cada línea del cuerpo es una condición, y todas deben cumplirse para que el elemento entre en el conjunto. some regla in input.reglas_entrada recorre la lista: el cuerpo se evalúa una vez por cada regla de entrada, y cada coincidencia añade un mensaje.

Abre la política de despliegue y la entrada de la bodega. Aplica las condiciones a cada regla de entrada.

Responde para continuar

¿Cuántos mensajes de denegación (`deny`) produce la política sobre sg-bodega.json?

Ver pista de ayuda

Con la terminal, `cat politicas/despliegue.rego` y `cat entrada/sg-bodega.json`. Una regla de entrada se deniega solo si su origen es todo internet Y su puerto está en el conjunto de administración.

En Rego una expresión puede ser verdadera, falsa o indefinida (cuando se refiere a algo que no existe). El cuerpo de una regla se detiene en cuanto una condición es falsa o indefinida, y la regla simplemente no produce nada. not x es verdadero cuando x es indefinido o falso. Pero un texto vacío no es ni lo uno ni lo otro: es un valor definido y, para Rego, cuenta como presente.

La regla de advertencia de la política usa not regla.descripcion para detectar reglas sin descripción. Mira qué valor trae cada regla de entrada en ese campo.

Responde para continuar

Escribe el id de la regla de entrada que tiene el campo descripcion presente pero vacío y por eso la advertencia no la detecta.

Ver pista de ayuda

Abre `entrada/sg-bodega.json` y busca la descripción que está entre comillas pero no dice nada.

El conflicto entre reglas completas es uno de los pocos fallos de Rego que no se queda en silencio: el motor lo reporta como un error de evaluación. Es una ventaja: se ve. Pero solo se ve si alguien lee la salida; un trabajo de CI que ignora el código de salida lo enterraría.

Mira el archivo de reglas de riesgo y la salida de la consulta que hizo el equipo.

Responde para continuar

Escribe el nombre de la regla completa que produce el error de conflicto con la entrada de la bodega.

Ver pista de ayuda

Lee `salida/conflicto.txt` y confirma con `cat politicas/riesgo.rego` que las dos definiciones se cumplen a la vez con esa entrada.

La advertencia debería cubrir dos casos: el campo ausente y el campo vacío. Corregirla pide decidir qué significa «sin descripción» y escribir esa decisión en la regla, no esperar a que el motor adivine la intención del autor.

Responde para continuar

¿Cómo se corrige la advertencia para que detecte también las descripciones vacías?

Ver pista de ayuda

Hay que cubrir los dos casos y dejar una prueba que lo demuestre.

Inicia sesión para registrar tus puntos y progreso en el ranking.

Whoami-Labs Pro

Whoami-Labs Pro utiliza cookies

Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad