问题标签 [open-policy-agent]

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.

0 投票
1 回答
358 浏览

eval - 开放策略代理 - CI 管道中的显式逻辑与

我正在尝试编写一个管理管理员用户名兼容性的策略,该策略由三个规则组成:字母数字值,不是不允许的名称(管理员、管理员等)的一部分,以及超过 5 个字符。

我发现当使用 OPA 作为 CI 管道(这是我的用例)的一部分时,最舒适的解决方案是创建一个包含策略结果的对象(字典),以便我可以直接查询它们。我在 CI 管道中的行将如下所示:

它不会打印我在 rego 文件中使用的所有变量和临时资源(这会节省大量日志和输出)。为了制作这个“策略”对象,我在我的 rego 文件中有以下模式:

现在,我的问题如下:这对我来说似乎不是最佳实践。有没有另一种方法可以简单地从输出中省略变量?以前我使用过单独的值(即像这样:

第二个问题:如何创建一个可以满足多个条件的输出字典(毕竟字典的 JSON 输出是一种很好的格式)?回顾我的例子,我不能写这样的东西:

由于这是双重分配,这是无效的。即使我使用=而不是:=,如果一个术语为真而另一个为假,它也会产生冲突,并且错误不是我要寻找的(我需要布尔答案)。我如何创建一个复杂的规则,我可以把它的输出放在这个字典中?

提前致谢。

0 投票
1 回答
181 浏览

open-policy-agent - Rego 策略/规则中的 UTF-8 字符支持

我是 OPA 和 Rego 的新手,正在为我的一个应用程序评估 OPA。我的应用程序支持本地化和多种语言。其中之一是简体中文。当我试图评估一个由一些简单汉字组成的简单 Rego 规则时,我收到了一个错误。

错误:

示例规则:

Rego 是否支持 UTF-8 字符集,是否可以在包含上述特殊字符的值上编写规则?

0 投票
1 回答
120 浏览

cloud - 开放策略代理 - 错误与无

试图理解 OPA 中虚假的概念。我的情况是这样的——我需要验证所有云资源是否都在 AWS 的允许区域内。我现在拥有的是:

问题是,我认为当策略/函数的结果不正确时,我会遗漏一些东西 - 例如,结果exists(allowed_locations, "westeurope")不是假的,而是某种“未定义”,这意味着结果exists(allowed_locations, "westeurope") != true也是“未定义” ",这意味着分配了 all_resources_in_allowed_regions,not "undefined"这是真的。

您将如何使用 OPA 解决此问题?我是否缺少有关正确使用它的方法?

0 投票
1 回答
294 浏览

kubernetes - OPA Gatekeeper 可以用来审计 K8s PodDisruptionBudget 状态字段吗?

我们希望使用 OPA 网守来审计 K8s PodDisruptionBudget (PDB) 对象。特别是,我们正在寻求审计该领域disruptionsAllowed内的数量status

我相信这个字段在准入时将不可用,因为一旦 PDB 应用于集群,它就会由 apiserver 计算和添加。

似乎对于例如 Pod,该status字段作为AdmissionReview对象 [1] 的一部分传递。在该特定示例中,似乎只有准入前状态字段才能进入AdmissionReview对象。

1.) 对于 PDB,是否可以审计当前的集群内状态字段?

2.) 考虑到 OPA Gatekeeper 作为准入控制器的预期用途,这是否会被视为反模式?

[1] https://www.openpolicyagent.org/docs/latest/kubernetes-introduction/

0 投票
1 回答
394 浏览

open-policy-agent - 用于检查列表中员工姓名的 Rego 规则

我是 rego 代码的新手,并编写了一条规则来检查员工姓名是否出现在批准的员工列表中。如果没有,它应该打印出不在列表中的员工。这是我给出的输入:

{“valid_employee_names”:{“first_name.2113690404”:“emp_Maria”、“first_name.2641279496”:“emp_Rosie”、“first_name.3921413181”:“emp_Shaun”、“first_name.588579514”:“emp_John”}、“destroy” : 错误的 }

这是rego规则:

我总是得到与未记录在案的员工相同的输出。谁能指出我需要更正/更新的内容?

谢谢!

0 投票
1 回答
221 浏览

kubernetes - helm 访问模板内的 rego 文件

我正在关注https://helm.sh/docs/chart_template_guide/accessing_files/中提到的示例。

我可以在 configmap 中加载 toml 文件,但是当我使用 rego 文件时,出现错误:

0 投票
1 回答
660 浏览

open-policy-agent - 将列表中以 x 开头的每个项目放入一个新列表中 - Rego

列表:= [“a:aqsdf”、“a:asdf”、“b:gfs”、“b:sdf”、“a:adfd”、“b:asdfd”]

我希望新列表仅包含以 'a' 开头的项目:["a:aqsdf", "a:asdf", "a:adfd"]

我尝试过使用套装但没有成功。这在 python 中将是一件轻而易举的事,但我似乎无法理解 rego。我可以把它变成一个集合,但不知道如何挤进 if 语句(startswith(list[_], "a") == true)

0 投票
2 回答
325 浏览

open-policy-agent - 如何测试一个对象是rego中另一个对象的子集

我想编写一个 Rego 规则,根据模板中声明的标签检查 Kubernetes 部署选择器。如果存在的每个键/值spec.selector.matchLabels都存在于spec.template.metadata.labels.

如果我用 Javascript 编写它,它看起来像这样:

我不确定如何在 Rego 中编写等价物。我想出了一种方法来检查键是否存在,但我不知道如何检查值。这是我到目前为止所拥有的:

0 投票
1 回答
432 浏览

open-policy-agent - 使用 Rego 根据另一个列表验证列表的每个元素

我是 rego 的新手,并试图编写一个策略来验证列表中的元素是否与另一个列表相对应。这是我要解决的问题:我有一个已批准的安全组列表,我需要根据我的输入检查安全组。如果我输入的 SG 不在批准列表中,我需要输出一条消息说“正在使用无效的 SG”。我找不到任何说明如何将一个列表与另一个列表进行比较的文档。这是 rego 游乐场的政策:https ://play.openpolicyagent.org/p/m09f2K1g0h

政策:

输入:

任何帮助表示赞赏。谢谢。

0 投票
1 回答
60 浏览

open-policy-agent - OPA 引擎支持并发调用

OPA 引擎可以支持多少个并发 REST Put/Patch 调用来更新策略/数据?

我尝试查看文档,但找不到与此相关的任何信息。