如何在Rego策略输出中隐藏my_cats对象,仅保留cats结果?
如何隐藏Rego输出中的指定对象
我创建了一个Rego策略,但希望输出中只保留cats结果,隐藏my_cats对象。
示例Rego代码:
package cats default cats := false cats{ input.cat == my_cats[_]} my_cats:= { "Pumpkin Spice", "Dr Meow" }
输入内容:
{ "cat": "Pumpkin Spice" }
当前输出:
{ "cats": true, "my_cats": [ "Dr Meow", "Pumpkin Spice" ] }
需求:输出仅保留cats字段,隐藏my_cats。试过mask功能但没用,因为它只适用于input内容。
可行解决方法
1. 直接筛选输出路径
在执行OPA评估时,指定只输出data.cats而非整个包的内容。比如用命令行的话:
opa eval -i input.json -d policy.rego 'data.cats'
如果需要结构化的JSON输出,可以改成:
opa eval -i input.json -d policy.rego --format pretty '{"cats": data.cats}'
2. 将my_cats设为私有规则
Rego中以下划线开头的规则属于私有规则,不会被包含在输出的data对象里。修改代码如下:
package cats default cats := false cats{ input.cat == _my_cats[_]} _my_cats:= { "Pumpkin Spice", "Dr Meow" }
这样再评估整个包时,输出就只会有cats字段,_my_cats不会出现在结果中。
3. 用输出过滤配置
如果是通过OPA API或者集成工具调用,可以通过过滤参数来指定只保留需要的字段。比如API请求添加?filter=data.cats参数,或者在配置里设置输出白名单,只允许cats字段输出。
内容的提问来源于stack exchange,提问作者Matwo
相关产品推荐
相关产品推荐

