天天看点

OPA基础

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决策机制

  • 在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格式进行输出;
OPA基础

Envoy ext_authz OPA配置示例

OPA基础

参考文档

​​https://www.openpolicyagent.org/docs/latest/​​

继续阅读