跳转至主要内容

Authorization of Service Mesh through Envoy

Envoy-authz 是一个Envoy的中间件,通过casbin执行外部RBAC和ABAC授权。 此中间件通过gRPC服务器使用Envoy的外部授权API。 此代理可以部署在任何类型的基于Envoy的服务网格上,如Istio。

需求

  • Envoy 1.17+
  • Istio或任何其他类型的服务网格
  • grpc依赖

依赖项使用go.mod进行管理。

中间件的工作方式

  • 客户端发出HTTP请求。
  • Envoy代理将请求发送到gRPC服务器。
  • gRPC服务器根据casbin策略授权请求。
  • 如果授权,请求将被转发;否则,请求将被拒绝。

gRPC服务器基于Envoy中的external_auth.proto协议缓冲区。

// 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);
}

从上述proto文件中,我们需要在授权服务器中使用Check()服务。

用法

  • 按照此指南在配置文件中定义Casbin策略。

您可以使用在线casbin-editor验证/测试您的策略。

  • 通过运行以下命令启动认证服务器:
go build .
./authz
  • 加载Envoy配置:
envoy -c authz.yaml -l info

一旦Envoy启动,它将拦截请求进行授权处理。

与Istio集成

为了使这个中间件工作,你需要发送包含JWT令牌或头部的用户名的自定义头部。 您可以参考官方Istio文档以获取更多关于修改请求头的信息。