The Open Policy Agent (OPA, pronounced “oh-pa”) is an open source, general-purpose policy engine that unifies policy enforcement across the stack.
OPA(OpenPolicyAgent), 云原生时代的通用规则引擎,重新定义策略引擎,灵活而强大的声明式语言全面支持通用策略定义。
关键词:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CQlZZiL1-1681869060450)(/images/app/policy.png)]
优点:
强大的声明式策略
输入和输出支持任意格式
配合强大的声明式策略语言Rego,描述任意规则都不是问题
全面支持规则和系统解耦
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yGuZU9Wo-1681869060451)(/images/app/OPA-why.png)]
集承方式多
应用广泛
除了继承做auth外,还可以应用到k8s,terraform,docker,kafka,sql,linux上做规则决策
工具齐全
命令行,有交互式运行环境、支持测试,性能分析(底层实现Go)
下载:
On macOS (64-bit):
curl -L -o opa https://openpolicyagent.org/downloads/latest/opa_darwin_amd64
On Linux (64-bit):
curl -L -o opa https://openpolicyagent.org/downloads/latest/opa_linux_amd64
快速开始
./opa eval -i quick-start/input.json -d quick-start/data.json -d quick-start/example.rego "data.example_rbac"
官方文档: https://www.openpolicyagent.org/docs/latest/integration/
opa分为两个部分:
有三种方式可以将opa整合到我们的项目中:
REST API
通过HTTP以JSON的形式返回决策。Go API
以简单的Go类型(bool, string, map[string]接口{}等)返回决策。WebAssembly
将Rego策略编译为WASM指令,这样它们就可以被任何WebAssembly运行时嵌入和评估。第三种先不做讨论,目前用不到,目前可以使用的接入方法有两种: 1、REST API, 2、Go API,下面分别说明。
可以将OPA
部署为主机级守护进程或sidecar容器。
opa
项目提供了这样的API服务。api访问接口可以对数据进行增删改成
.
接口:
POST /v1/data/<path>
Content-Type: application/json
加参数:
{
"input": <the input document>
}
返回结果:
200 OK
Content-Type: application/json
{
"result": true
}
详细rest api参考: https://www.openpolicyagent.org/docs/latest/rest-api/
引入 rego库:
import "github.com/open-policy-agent/opa/rego"
操作:
rego
可以看做一个运行在golang
上的查询语言,golang
是rego
语言的编译器和执行器。
Go API
是基础,REST API
这是在Go API
上封装了一层http的调用接口而已。
定制rego函数, 针对Go API
定制运行时,针对REST API