如何在Open Policy Agent(OPA)查询中返回自定义数值而非布尔值
OPA返回自定义数值的策略定义方案
OPA的Rego规则本身支持返回任意类型的结果,不局限于鉴权场景的布尔值,你可以按以下方式定义策略返回连接数、带宽额度等数值:
- 放弃传统鉴权场景下的
allow布尔规则写法,直接将需要返回的数值作为规则的输出值即可。你可以针对每个指标单独定义规则,也可以打包成对象统一返回,示例策略如下:
package resource_limit # 定义每秒允许的连接数规则 connection_per_second := 50 { input.user.tier == "basic" } connection_per_second := 500 { input.user.tier == "enterprise" } # 定义带宽额度规则(单位Mbps) bandwidth_quota := 100 { input.user.tier == "basic" } bandwidth_quota := 2000 { input.user.tier == "enterprise" } # 也可以将所有指标打包成一个对象统一返回 limit_config := { "connection_per_second": connection_per_second, "bandwidth_quota": bandwidth_quota } # 兜底默认值配置:未匹配到任何规则时返回的数值 default connection_per_second := 10 default bandwidth_quota := 20
- 调用OPA查询时,指定对应的规则路径即可拿到数值结果,比如查询
data.resource_limit.limit_config,OPA会直接返回包含两个数值的JSON对象,不会返回布尔结果。
提示:如果同一条规则存在多个赋值条件,OPA会自动匹配所有满足input参数的条件返回对应数值,不需要额外写分支判断逻辑。
内容的提问来源于stack exchange,提问作者JD Allen
相关产品推荐
相关产品推荐

