1. 用途
OPA 工作流程
Open Policy Agent 简称 OPA,是一个策略系统,通过定义一些规则,然后输入数据匹配规则,以生成最终结果。
流程描述
上图最上面的 Service
代表着需要进行决策的系统,如:业务系统、CI/CD 系统、ElasticSearch、Kubernetes 等。Service
与 OPA
交互,OPA 作为策略计算系统并最终返回决策结果。
Policy
是一系列规则的集合,它使用 Rego 语言编写。Data
是预先定义好的数据,它是输出决策的重要依据,用来支撑规则的计算。 Policy 是决策逻辑,Data 是知识,Query 是查询,Decision 是决策结果
举个栗子:
一般业务系统都使用基于角色的权限规则(RBAC),通过定义权限字符并关联 URL,然后又根据现实中的角色组合权限,使不同角色可以使用不同的功能。使用 OPA 来描述,即:
- 角色与权限是为上图中的 Data
- 当前用户,及其操作动作,使用 Query 描述,这个 Query 可以自由定义,只要你的规则能正确读取即可
- Policy 计算判断动作是否符合该用户权限
- 最终产生该用户是否可以操作的决策结果
2. 使用
通过点击下载 OPA 程序,它是一个可执行文件,可直接运行。
|
|
或者直接使用命令行来计算结果
|
|
data.policy.allow
是执行目标,其中 data 是固定前缀,policy 是 policy 的包名,allow 是 rego 文件里面的规则名
由于在 opa 程序里面,rego 文件和 data 文件都是属于 data
变量下,所以我们定义规则名和数据顶级变量名时最好不要同名
样例文件
policy.rego file
|
|
data.rego file
|
|
input.json file
|
|