Authorization of Service Mesh through Envoy
Envoy-authz là một middleware cho Envoy thực hiện ủy quyền RBAC & ABAC bên ngoài thông qua casbin. Middleware này sử dụng API ủy quyền bên ngoài của Envoy thông qua một máy chủ gRPC. Proxy này có thể được triển khai trên bất kỳ loại Service Mesh dựa trên Envoy nào, chẳng hạn như Istio.
Yêu cầu
- Envoy 1.17+
- Istio hoặc bất kỳ loại service mesh nào khác
- phụ thuộc grpc
Quản lý phụ thuộc bằng cách sử dụng go.mod
.
Hoạt động của Middleware
- Một client thực hiện một yêu cầu HTTP.
- Proxy Envoy gửi yêu cầu đến máy chủ gRPC.
- Máy chủ gRPC xác thực yêu cầu dựa trên chính sách casbin.
- Nếu được xác thực, yêu cầu sẽ được chuyển tiếp; nếu không, nó sẽ bị từ chối.
Máy chủ gRPC dựa trên protocol buffer từ external_auth.proto trong Envoy.
// 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);
}
Từ tệp proto ở trên, chúng ta cần sử dụng dịch vụ Check()
trong máy chủ ủy quyền.
Sử dụng
- Định nghĩa các chính sách Casbin trong tệp cấu hình theo hướng dẫn này guide.
Bạn có thể xác minh/kiểm tra các chính sách của mình bằng cách sử dụng casbin-editor trực tuyến.
- Khởi động máy chủ xác thực bằng cách chạy:
go build .
./authz
- Tải cấu hình Envoy:
envoy -c authz.yaml -l info
Một khi Envoy bắt đầu, nó sẽ chặn các yêu cầu cho quá trình ủy quyền.
Tích hợp với Istio
Để middleware này hoạt động, bạn cần gửi các header tùy chỉnh chứa tên người dùng trong token JWT hoặc header. Bạn có thể tham khảo tài liệu chính thức của Istio để biết thêm thông tin về việc sửa đổi Request Headers
.