OPA 冲突政策
OPA conflicting policy
我写了一个示例 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","result":true}
这是预期的结果吗?如果存在冲突策略,难道不应该报错吗?
当您对一个规则有多个定义时,您就是在表达一个 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
(这个例子不是很好,也没有什么意义,但我想它可以作为一个例子)
我写了一个示例 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","result":true}
这是预期的结果吗?如果存在冲突策略,难道不应该报错吗?
当您对一个规则有多个定义时,您就是在表达一个 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
(这个例子不是很好,也没有什么意义,但我想它可以作为一个例子)