大型项目中基本都包含有复杂的访问控制策略,特别是在一些多租户场景中,例如Kubernetes中就支持RBAC,ABAC等多种授权类型。Dapr 的 中间件 Open Policy Agent 将 Rego/OPA策略 应用到传入的Dapr HTTP请求中。
Open Policy Agent
Open Policy Agent(简称OPA)是一个开源的策略引擎,托管于CNCF,通常用来做在微服务、API网关、Kubernetes、CI/CD等系统中做策略管理。
OPA将策略从代码中分离出来,按照官网的说法OPA实现了 策略即代码 ,通过Rego声明式语言实现决策逻辑,当系统需要做出策略时,只需携带请求查询OPA即可,OPA会返回决策结果。
OPA 通过评估查询输入并对照策略和数据来生成决策。OPA 和 Rego 是不分领域的,所以你可以在策略中描述几乎任何事件。比如:
- 哪些用户可以访问哪些资源。
- 哪些子网允许出口流量进入。
- 工作负载必须部署到哪个集群。
- 哪些注册表可以下载二进制文件。
- 容器可以用哪些操作系统的能力来执行。