агент открытой политики - 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