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文档以获取更多关于修改请求头
的信息。