如何在OPA中检查可选数组的元素存在性?
OPA策略:检查可选数组元素的字段存在性
针对你遇到的问题,核心是要先区分「load_balancer数组不存在」和「数组存在但所有元素都符合要求」这两种场景,再针对性编写规则。以下是修正后的实现:
deny[message] { message := "Target ARN is missing" # 首先确认load_balancer是存在的数组(可选字段,不存在则不触发规则) array.is_array(input.load_balancer) # 存在至少一个负载均衡器元素缺少target_group_arn字段(或字段值为假) some i lb_element := input.load_balancer[i] not lb_element.target_group_arn }
规则逻辑说明:
array.is_array(input.load_balancer):先判断输入中存在load_balancer且是数组类型。如果该字段未定义或者不是数组,这条规则直接不生效,符合你“数组可选”的需求。some i+not lb_element.target_group_arn:遍历数组中的每个元素,只要存在任意一个元素没有target_group_arn字段(或字段值为false/空),就触发拒绝规则并返回提示信息。
为什么你原来的写法有问题?
你之前用数组推导式收集符合条件的元素,但无法区分「数组不存在」和「所有元素都合规」的场景——因为这两种情况推导出来的数组都是空的。通过先判断数组存在,再检查违规元素的方式,就能彻底规避这个歧义问题。
内容的提问来源于stack exchange,提问作者deals my
相关产品推荐
相关产品推荐

