[英]Rego to check if a map, contains a key that is defined in a separate list
给定一张地图,我们想检查该地图中的任何键是否与列表中的任何项目匹配。
在 kubernetes 注释是“地图”的情况下:
metadata:
annotations:
external-dns.alpha.kubernetes.io/hostname: something
external-dns.alpha.kubernetes.io/ttl: 60
假设我们想在使用external-dns.alpha.kubernetes.io/ttl
时触发违规。 为此,我们会将该项目添加到拒绝注释列表中。 该值不相关。
denied:
- external-dns.alpha.kubernetes.io/ttl
- other-denied-annotation-1
- other-denied-annotation-2
如果资源的 .metadata.annotations 中存在任何被拒绝的注释,则应触发违规。
尽管我搜索并尝试了它,但我无法做到。 已经提出的问题并没有完全解决这个问题,我无法让它发挥作用。 我们正在使用Gatekeeper。
您通常会为“拒绝”列表使用一组,然后只需检查每个注释的成员资格:
package play
import future.keywords
denied_annotations := {
"external-dns.alpha.kubernetes.io/ttl",
"other-denied-annotation-1",
"other-denied-annotation-2",
}
deny[reason] {
# iterate over all annotations in input
input.review.object.metadata.annotations[key]
# for each key, check if it's present in deny list -
# if using older OPA, you may need to use
# `denied_annotations[key]` instead, which does the same
key in denied_annotations
reason = sprintf("%s in denied annotations", [key])
}
游乐场示例在这里。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.