1

我正在尝试创建一个可以评估从输入中给出的嵌套对象字段的通用 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”函数,但它们似乎不适用于嵌套属性。我也试过用“。”分割属性路径。并以某种方式通过字段迭代对象,但没有成功。

任何帮助都感激不尽。

4

1 回答 1

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..."
}

在此处查看操场示例。

于 2020-12-06T15:43:12.060 回答