问题标签 [rego]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
docker - 允许 docker exec 的 OPA 策略
我已经按照说明部署了 OPA docker 插件。在我尝试为 docker exec 创建自定义 docker API 权限之前,一切都很好。
我已将以下部分添加到authz.rego
文件中:
但是当我尝试运行以下 bash 命令时它仍然给我错误:docker exec -it busybox sh
按照说明在Bob
测试用户下。
journalctl -u docker.service
提供以下错误:
level=error msg="AuthZRequest for POST /v1.41/containers/busybox/exec returned error: authorization denied by plugin openpolicyagent/opa-docker-authz-v2:0.4: request rejected by administrative policy"
有趣的是,当我注释掉input.path
部分时,它作为完整的 RW 用户工作,因此该规则有效,但严格提及 API 路径 - 没有。也许我以错误的方式指定它?
尝试了不同的变体,例如:
还希望获得有关如何允许exec
对任何容器进行操作的建议,而不仅仅是指定的容器。
提前致谢!
jenkins - 在 Jenkins 流水线中运行 Rego 测试
我正在尝试将 rego 测试用例作为 jenkins 管道运行的一部分运行。我以前将我的测试用例和测试用例的输入数据放在一个文件中,它们都运行成功。
我修改了我的测试用例以从外部 json 文件中读取数据,当前文件夹结构如下:test.rego 文件和 input.json 文件在同一文件夹中。
这就是我在 Jenkins 中用来运行测试的方法*./opa test -b -v .*
测试失败并出现错误data.utilities.test_no_OwnerContact: FAIL
我假设这是因为 rego 测试无法从 input.json 读取数据
当我尝试使用显式传递输入文件时-i/--input
,我在 jenkins 中看到一个错误Error: unknown flag: --input
我不确定我使用的是必需的标签还是其他标签。任何帮助,将不胜感激。谢谢!
编辑:我打印了包中的文件,并且看到了 data.json 文件。因此 OPA 引擎无法从 Bundle 中读取数据文件。我该如何解决这个问题?
open-policy-agent - 无法读取 kubernetes 属性
我正在制定一项政策,该政策规定kaniko
图像必须始终在 nodePool 上运行kaniko-nodepool
。
如果将 kaniko 图像部署在其他任何地方,则将违反。我使用容器图像和 nodeSelector 的组合来执行策略
我的政策运作良好https://play.openpolicyagent.org/p/GOJNyAF5TW。
更改input.review.object.spec.nodeSelector.pool
导致违规
剩下的唯一问题是,如果 pod 没有 nodeSelector 并且正在部署的图像是 kaniko,那么也会发生违规。
所以我加了
意思是如果没有nodeSelector,那么违规应该是正确的。一旦我删除了整个 nodeSelector 部分,它就不会导致违规。
https://play.openpolicyagent.org/p/AuhepivPHN
单击覆盖显示没有任何行正在处理。
我在这里缺少什么吗?
open-policy-agent - Rego Set 查找是否会迭代集合中的所有项目?
按照这个例子,哪一个会更快地进行查找?
open-policy-agent - Rego 验证数组比较
我是 Rego 的新手,我正在尝试编写策略以检查是否已在某些 Azure NSG 上创建了一组规则。
输入测试:
我编写了一个自定义函数来检查值。下面是我在 The Rego Playground 中测试的代码
这适用于我在上面定义的属性,但是在尝试比较数组时遇到问题,特别是在此示例中与destinationAddressPrefixes 我尝试了以下操作:
总是返回 false
通过以下行,我可以根据特定 ip 从输入中检查一个目标地址,但是我无法将输入的所有地址与示例中定义的规则进行比较
test2 和 test3 始终返回 true,即使输入中没有规则。我也试过和数组差异
但我收到以下错误:
rego_type_error:减号:无效参数有:(任何,数组<字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串>,???)想要: (any<number, set[any]>, any<number, set[any]>, any<number, set[any]>)
你知道实现我想要的东西是否可行吗?或者是否有不同的方法来查看数组并逐个比较值?
kubernetes - 如何使用 Gatekeeper 在没有 ResourceQuota 的情况下禁止命名空间中的 Pod?
我想禁止在没有ResourceQuota的命名空间中创建 Pod 。如果可能的话,我希望 Gatekeeper在允许创建 Pod 之前确保有一个 ResourceQuota 设置limits.cpu
。limits.memory
我创建了以下配置,但它们没有解决我的问题:
模板
约束
同步.yaml
open-policy-agent - 如何从 data.inventory 的 resoucequota 对象中检索命名空间值
在gatekeeper 模板中,尝试从resoucequota 对象(使用sync.yaml 复制)中获取命名空间。
目前尝试使用以下方式获取:
existingrqs := {e | e := data.inventory.cluster["v1beta1"]["ResourceQuota"].metadata.namespace}
sync.yaml使用:
无法从 resoucequota 缓存对象中检索命名空间。
open-policy-agent - 返回数据中的所有键
我是 OPA/Rego 的新手,很难理解这里的问题到底是什么:https ://play.openpolicyagent.org/p/h08NbfmF4j
我希望有与该*
类别相关联的团队,我希望accessible[team]
规则返回所有现有类别。如果团队分配了特定类别,则应仅返回该类别。
要求真的很简单,但我不知道为什么会出现“eval_conflict_error:对象键必须是唯一的”错误。
open-policy-agent - 为什么 OPA/Rego 中的“违反”和“拒绝”之间有确切的区别?
在开放策略代理 ( https://www.openpolicyagent.org/ )
关于 Kubernetes,取决于使用的引擎:
或者
- 带有 kube-mgmt 的普通 OPA:https ://www.openpolicyagent.org/docs/latest/kubernetes-introduction/#how-does-it-work-with-plain-opa-and-kube-mgmt
定义验证规则有不同的方法:
在 Gatekeeper
violation
中使用。在此处查看示例规则:https ://github.com/open-policy-agent/gatekeeper-library/tree/master/library/general在普通 OPA 示例中,
deny
规则请参见此处的示例: https ://www.openpolicyagent.org/docs/latest/kubernetes-introduction/#how-does-it-work-with-plain-opa-and-kube-mgmt
似乎 OPA 约束框架将其定义为violation
:
https ://github.com/open-policy-agent/frameworks/tree/master/constraint#rule-schema
那么这背后的确切“故事”是什么,为什么不同引擎之间不一致?
笔记:
open-policy-agent - OPA/Rego 对数组的每个元素执行函数
我是 OPA/Rego 的新手,我正在尝试编写一个策略来检查 Azure 网络安全组是否包含我在数组上定义的所有规则
问题似乎是,existRule(rules[i])
如果其中一个规则匹配,则执行时返回 true,如果其他规则不匹配,则不要考虑如果我existRule(rules[i])
用existRule(rules[0])
or替换existRule(rules[1])
,它返回 true 或 false,具体取决于该位置上的规则是否匹配。
有没有办法获得existRule(rules[i])
数组所有元素的执行结果?
我已经尝试过result := [existRule(rules[i])]
了,但它只返回一个具有 true 的元素