#open-policy-agent #rego
#open-policy-agent #rego
Вопрос:
Я пытаюсь создать несколько общую политику rego, которая может оценивать поле вложенного объекта, заданное из входных данных. Например:
field_from_input := "spec.securityContext.runAsRoot"
violation[{"msg": msg}] {
fields := split(field_from_input, ".")
# Somehow get the inner "runAsRoot" field value
nested_value := input.object[fields]
nested_value == "test"
msg := "some message..."
}
Я пытался использовать встроенные функции «object.filter» и «json.filter», но они, похоже, не работают для вложенных атрибутов.
Я также пытался разделить путь атрибута на «.» и каким-то образом выполнить итерацию объекта по полям, но безуспешно.
Любая помощь будет высоко оценена.
Ответ №1:
Это кажется хорошим примером для walk
встроенного. Использование этого для обхода объекта позволяет вам проверять как путь, так и / или значение на соответствие любым условиям, которые вы можете пожелать.
package play
spec := {
"securityContext": {
"runAsRoot": true,
},
}
violation[{"msg": msg}] {
walk(spec, [path, value])
node := path[count(path) - 1]
node == "runAsRoot"
value == true
msg := "some message..."
}
Смотрите Пример игровой площадки здесь.