开放策略代理-虚假vs无

时间:2020-07-14 09:21:31

标签: cloud opa open-policy-agent rego

试图了解OPA中虚假的概念。我的情况就是这样-我需要验证所有云资源是否都在AWS的允许区域内。我现在拥有的是:

allowed_locations := ["eastus", "westus"]

exists(array, value) {
    array[_] == value
}

all_resources_in_allowed_regions {
    not any_resource_not_in_allowed_regions
}

any_resource_not_in_allowed_regions {
    some index
    exists(allowed_locations, input.planned_values.root_module.resources[index].values.location) != true
}

问题是,我认为我在策略/功能的结果不正确时会漏掉一些东西,例如exists(allowed_locations, "westeurope")的结果不是假的,而是某种“未定义”的,这意味着exists(allowed_locations, "westeurope") != true的结果也是“未定义”,这意味着为all_resources_in_allowed_regions分配了not "undefined",这是正确的。

您将如何使用OPA解决此问题?我是否缺少使用它的正确方法?

1 个答案:

答案 0 :(得分:1)

查看文档的“全部”部分:

有关正在发生的事情的更多解释:https://www.openpolicyagent.org/docs/latest/policy-language/#universal-quantification-for-all

快速示例:https://www.openpolicyagent.org/docs/latest/policy-reference/#for-all

根据您的回复open policy agent - false vs none,更新的政策如下所示:

allowed_locations := ["eastus", "westus"]

exists(array, value) {
    array[_] == value
}

not_exists(array, value) {
    not exists(array, value)
}

all_resources_in_region {
    not any_resource_not_in_region
}

any_resource_not_in_region {
    not_exists(allowed_locations, input.planned_values.root_module.resource[_].values.location)
}

游乐场示例:https://play.openpolicyagent.org/p/f1bI2Ddc9D