Open Policy Agent
- Open Policy Agent(简称OPA)是一款go语言编写的开源通用策略引擎,它通过高级声明式语言rego编写策略代码为应用程序实现细粒度的访问控制机制,可用于为微服务、Kubernetes、CI/CD pipeline和API Gateway等应用场景实施策略机制;
-
OPA可以同微服务一起部署为独立运行的服务,例如以sidecar形式运行;
-
通常,出于保护应用程序的目的,发往微服务的每个请求都需要获得授权后才能进行处理
- 而为了检查授权,微服务则需要对OPA服务发出API调用,以确定收到的请求是否被授权;但策略的执行需要由应用程序完成,例如某HTTP请求被策略拒绝时,应用程序需要响应以“HTTP 403 Forbidden”;
-
OPA决策机制
- 在OPA中,决策过程依赖于三个输入
-
Query:查询输入,它会触发决策过程;
-
查询数据指定了OPA应该决策的事情,它必须格式化为JSON格式;
- 例如,对于“是否允许用户Alice调用“GET /resrources”这个问题,查询输入包含了Alice、GET和/resources三个参数;
-
-
Data:OPA进行决策时需要参考的适配于特定环境的事实定义;
- 例如,需要决策将Pod调度至哪个Kubernetes集群节点,数据应该是可用节点及相应容量的列表;
- Data同样必须以JSON格式提供,且可能会随时间而变化,OPA会将其最新状态缓存在内存中;
- Policy:指定了决策计算逻辑,对于给定的Data和Query,该计算逻辑会产生策略决定,即查询结果;但OPA只是策略引擎,策略需要由用户自己定义;
-
- 策略引擎负责解释Policy中包含的规则,并基于Data和Query做出策略决策,并将决策结果格式化为JSON格式进行输出;
Envoy ext_authz OPA配置示例
参考文档
https://www.openpolicyagent.org/docs/latest/
标签:策略,基础,决策,应用程序,OPA,Policy,Data From: https://www.cnblogs.com/wangguishe/p/16738072.html