开放策略代理 (OPA) Rego - 在运行时访问输入对象嵌套字段

Posted

技术标签:

【中文标题】开放策略代理 (OPA) Rego - 在运行时访问输入对象嵌套字段【英文标题】:Open Policy Agent (OPA) Rego - Accessing Input Object Nested Fields At Runtime 【发布时间】:2020-12-06 11:06:51 【问题描述】:

我正在尝试创建一个有点通用的 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 built-in 来说似乎是一个很好的案例。使用它来遍历对象允许您检查路径和/或值以匹配您可能希望的任何条件。

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

查看游乐场示例here。

【讨论】:

以上是关于开放策略代理 (OPA) Rego - 在运行时访问输入对象嵌套字段的主要内容,如果未能解决你的问题,请参考以下文章

开放策略代理 - 错误与无

开放策略代理 - CI 管道中的显式逻辑与

OPA 冲突政策

Dapr 集成 Open Policy Agent 实现 接口的访问控制

云原生计算和Kubernetes的现状

使用 walk 以 rego 递归聚合 terraform 状态下的资源