跳转到主要内容

Envoy(服务网格授权)

envoy-authz 是一个使用 Casbin 实现 RBAC/ABAC 的 Envoy 外部授权服务。它实现了 Envoy 的外部认证 gRPC API,可与 Istio 或任何基于 Envoy 的服务网格配合使用。

前提条件​

  • Envoy 1.17 或更高版本
  • Istio 或其他基于 Envoy 的服务网格
  • gRPC 依赖

依赖项通过 go.mod 管理。

工作原理​

  • 客户端发起一个 HTTP 请求
  • Envoy 拦截该请求,并将其转发到 gRPC 授权服务器
  • 服务器用 Casbin policy 对该请求进行评估
  • 已授权的请求放行;未授权的请求被阻止

gRPC 服务器实现了 Envoy 的 external_auth.proto 中定义的 protocol buffer:

// A generic interface for performing authorization checks on incoming
// requests to a networked service.
service Authorization {
// Performs an authorization check based on the attributes associated with the
// incoming request and returns a status of `OK` or not `OK`.
rpc Check(v2.CheckRequest) returns (v2.CheckResponse);
}

授权服务器必须实现上面定义的 Check() 方法。

用法​

  • 按照 Casbin 文档的说明,在配置文件中配置你的 Casbin policy。

你可以使用在线 Casbin 编辑器测试你的 policy。

  • 启动授权服务器:
go build .
./authz
  • 应用 Envoy 配置:
envoy -c authz.yaml -l info

Envoy 启动后,它会通过授权中间件路由收到的请求。

与 Istio 集成​

要启用此中间件,请配置你的系统,通过 JWT token 或请求头中的自定义头部传递用户身份信息。修改请求头的方法请参阅 Istio 官方文档。