如何在OPA的Rego中使用正则匹配路径,优化Pod挂载准入控制?
用正则匹配简化OPA NFS路径准入规则
原来的规则通过枚举允许路径限制Pod的NFS挂载,每次新增/ifs/public/rw下的路径都要修改规则,现在可以用OPA的re_match函数实现正则匹配,同时保留指定的只读路径允许项,修改后的规则如下:
package kubernetes.admission deny[msg] { input.request.kind.kind == "Pod" path := input.request.object.spec.volumes[_].nfs.path # 允许两种路径:以/ifs/public/rw开头的所有路径,或指定的只读路径 not (re_match("^/ifs/public/rw/.+$", path) || path == "/ifs/public/ro/webdevel") msg := sprintf("volume '%v' path not allowed to be mounted", [path]) }
关键说明:
re_match("^/ifs/public/rw/.+$", path):匹配所有以/ifs/public/rw/开头的子路径;如果需要允许/ifs/public/rw本身,可将正则调整为^/ifs/public/rw(/.*)?$path == "/ifs/public/ro/webdevel":保留原规则中指定的只读路径允许项- 用
not包裹两个允许条件的或运算,只有当路径既不匹配rw前缀、也不是指定的ro路径时,才会触发拒绝规则
后续新增/ifs/public/rw下的子路径时,无需修改规则,正则会自动匹配所有符合前缀的路径。
内容的提问来源于stack exchange,提问作者Ravi Mahankali
相关产品推荐
相关产品推荐

