如何在Rego中提取包含指定关键词的resourceName字段
问题:如何用Rego提取包含指定关键词的resourceName字段?
我从API获取了如下响应数据,需要从中提取包含关键词-ecs-cloudwatch-policy的resourceName字段,请问该如何用Rego实现?
响应数据示例:
[ { "resourceId": "ABCDEF12345", "resourceName": "IAM-ctf-109-ecs-cloudwatch-policy", "resourceType": "AWS::IAM::Policy", "name": "Is attached to Policy" }, { "resourceId": "ABCDEF54321", "resourceName": "IAM-KMS-Policy-115", "resourceType": "AWS::IAM::Policy", "name": "Is attached to CustomerPolicy" } ]
解决方案
可以通过Rego的字符串匹配与数组遍历能力实现需求,以下是具体代码实现:
# 假设API响应数据存储在input.resources数组中 package example # 筛选出resourceName包含指定关键词的资源对象 has_ecs_cloudwatch_policy[resource] { some resource in input.resources contains(resource.resourceName, "-ecs-cloudwatch-policy") } # 提取符合条件的resourceName字段值 ecs_cloudwatch_policy_names[name] { resource := has_ecs_cloudwatch_policy[_] name := resource.resourceName }
代码说明
has_ecs_cloudwatch_policy规则:遍历input.resources中的每一个资源对象,用contains函数检查resourceName是否包含目标关键词,匹配成功的资源会被纳入该规则的结果集合。ecs_cloudwatch_policy_names规则:从筛选出的资源对象中提取resourceName字段的值,最终输出所有符合要求的名称集合。
使用方式
将API返回的数组赋值给input.resources后,执行Rego查询即可得到结果:
- 查询
has_ecs_cloudwatch_policy会返回完整的匹配资源对象 - 查询
ecs_cloudwatch_policy_names会直接返回目标字段值集合
内容的提问来源于stack exchange,提问作者Jessica
相关产品推荐
相关产品推荐

