агент открытой политики - false vs none - PullRequest
1 голос
/ 14 июля 2020

Попытка понять концепцию лжи в 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") не false, но «undefined» какого-то типа, что означает, что результат exists(allowed_locations, "westeurope") != true также «undefined», что означает, что all_resources_in_allowed_regions присвоено not "undefined", что верно.

Как бы вы решили эту проблему с OPA? Я что-то упустил о том, как его правильно использовать?

1 Ответ

0 голосов
/ 14 июля 2020

Ознакомьтесь с разделом «Для всех» в документации:

Дополнительные объяснения того, что происходит: https://www.openpolicyagent.org/docs/latest/policy-language/#universal -quantification-for-all

Quick Примеры: 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

...