繁体   English   中英

Rego 检查地图是否包含在单独列表中定义的键

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM