OPA 冲突政策

Posted

技术标签:

【中文标题】OPA 冲突政策【英文标题】:OPA conflicting policy 【发布时间】:2020-06-17 22:21:00 【问题描述】:

我已经写了一个示例 rego 代码

default allow = false

allow 
  some username
  input.method = "GET"
  input.path =["example", username]
  input.user = username



allow 
  some username
  input.method = "GET"
  input.path = ["example", username]
  input.user != username



当我尝试使用带有参数的 http://localhost:8181/v1/data/http/authz/allow API 验证策略时


    "input": 
    "method": "GET",
    "path": ["example", "sara"],
    "user": "sara"
    


    "input": 
    "method": "GET",
    "path": ["example", "sara"],
    "user": "notsara"
    

我得到响应:"decision_id":"xxxxx","re​​sult":true

这是预期的结果吗?如果存在冲突的策略,不应该出现错误吗?

【问题讨论】:

【参考方案1】:

当您有多个规则定义时,您表示的是logical OR。因此,它们并不冲突;他们都被评估,如果任何规则匹配,你的结果是肯定的。

当您尝试将相同的规则定义为部分规则和完整规则时会发生规则冲突:

allow 
  some username
  input.user = username


allow[id] 
  some username
  input.user != username

1 error occurred: module.rego:3: rego_type_error: conflicting rules named allow found

(这个例子不是很好,也没有什么意义,但我想它可以作为一个例子)

【讨论】:

以上是关于OPA 冲突政策的主要内容,如果未能解决你的问题,请参考以下文章

处理Gradle依赖冲突

svn 更新代码冲突 怎么编辑冲突代码 解决

软考知识点梳理--项目冲突管理

git代码冲突怎么解决

git 提交冲突怎么办

4-EGit解决冲突