агент открытой политики - false vs none

Пытаюсь понять концепцию лжи в 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 также "undefined", что означает, что all_resources_in_allowed_regions назначен not "undefined" что является правдой.

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

1 ответ

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

Подробнее о том, что происходит: https://www.openpolicyagent.org/docs/latest/policy-language/

Быстрые примеры: https://www.openpolicyagent.org/docs/latest/policy-reference/

Следуя вашему ответу 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

Другие вопросы по тегам