Open Policy Agent - 检查列表中是否存在元素
Open Policy Agent - check existence of elements in a list
刚开始处理 conftest and OPA,我正在尝试验证示例 kubernetes 部署清单以确保它包含列表中的特定键(即 image
所有 containers
)
存在
这是一个示例输入
apiVersion: apps/v1
kind: Deployment
spec:
template:
spec:
containers:
- image: hub.com/img1:tag1
imagePullPolicy: Always
我认为此策略应该检查所有容器的 image
是否存在:
deny[reason] {
input.kind == "Deployment"
some i
not input.spec.template.spec.containers[i].image
reason := "Container.image not found"
}
但是 conftest
抛出一个错误抱怨 not input.spec.template.spec.containers[i].image
expression is unsafe
任何关于如何处理这种情况的comments/suggestions表示感谢。
确保否定表达式 (not ...
) 中的变量在规则中的另一个非否定表达式中赋值。例如:
deny[reason] {
input.kind == "Deployment"
container := input.spec.template.spec.containers[_]
not container.image
reason := "Container.image not found"
}
在这个版本中,否定表达式中唯一的变量是container
。 container
变量在上一行赋值,所以表达式是安全的。
OPA 抱怨 not input.spec.template.spec.containers[i].image
,因为它将搜索使规则中的表达式成为 true 的所有变量赋值。由于变量 i
未在其他任何地方分配,因此将有 无限 次分配给 i
满足 not input.spec.template.spec.containers[i].image
... 例如, i = 100
、i = -1
、i = "foo"
等。由于我们要保证策略执行终止,因此 OPA 拒绝表达式。
有关安全的更多信息和示例,请点击此处:https://www.openpolicyagent.org/docs/latest/faq/#safety
刚开始处理 conftest and OPA,我正在尝试验证示例 kubernetes 部署清单以确保它包含列表中的特定键(即 image
所有 containers
)
这是一个示例输入
apiVersion: apps/v1
kind: Deployment
spec:
template:
spec:
containers:
- image: hub.com/img1:tag1
imagePullPolicy: Always
我认为此策略应该检查所有容器的 image
是否存在:
deny[reason] {
input.kind == "Deployment"
some i
not input.spec.template.spec.containers[i].image
reason := "Container.image not found"
}
但是 conftest
抛出一个错误抱怨 not input.spec.template.spec.containers[i].image
expression is unsafe
任何关于如何处理这种情况的comments/suggestions表示感谢。
确保否定表达式 (not ...
) 中的变量在规则中的另一个非否定表达式中赋值。例如:
deny[reason] {
input.kind == "Deployment"
container := input.spec.template.spec.containers[_]
not container.image
reason := "Container.image not found"
}
在这个版本中,否定表达式中唯一的变量是container
。 container
变量在上一行赋值,所以表达式是安全的。
OPA 抱怨 not input.spec.template.spec.containers[i].image
,因为它将搜索使规则中的表达式成为 true 的所有变量赋值。由于变量 i
未在其他任何地方分配,因此将有 无限 次分配给 i
满足 not input.spec.template.spec.containers[i].image
... 例如, i = 100
、i = -1
、i = "foo"
等。由于我们要保证策略执行终止,因此 OPA 拒绝表达式。
有关安全的更多信息和示例,请点击此处:https://www.openpolicyagent.org/docs/latest/faq/#safety