Authorization of Service Mesh through Envoy
Envoy-authz - це проміжне програмне забезпечення для Envoy, яке здійснює зовнішню авторизацію RBAC & ABAC через casbin. Це проміжне програмне забезпечення використовує зовнішній API авторизації Envoy через gRPC сервер. Цей проксі може бути розгорнутий на будь-якому типі Envoy-базованої service mesh, такому як Istio.
Вимоги
- Envoy 1.17+
- Istio або будь-який інший тип service mesh
- grpc залежності
Залежності керуються за допомогою go.mod
.
Робота проміжного програмного забезпечення
- Клієнт робить HTTP запит.
- Проксі Envoy відправляє запит на gRPC сервер.
- gRPC сервер авторизує запит на основі політик casbin.
- Якщо авторизація пройшла успішно, запит пересилається; в іншому випадку він відхиляється.
gRPC сервер базується на protocol buffer з external_auth.proto в 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);
}
З вищезазначеного proto файлу, нам потрібно використовувати сервіс Check()
в сервері авторизації.
Використання
- Визначте політики Casbin у файлах конфігурації, слідуючи цьому посібнику.
Ви можете перевірити/протестувати свої політики, використовуючи онлайн casbin-editor.
- Запустіть сервер автентифікації, виконавши:
go build .
./authz
- Завантажте конфігурацію Envoy:
envoy -c authz.yaml -l info
Після запуску Envoy він буде перехоплювати запити для процесу авторизації.
Інтеграція з Istio
Щоб це проміжне програмне забезпечення працювало, вам потрібно надсилати користувацькі заголовки, що містять імена користувачів у JWT токені або заголовках. Для отримання додаткової інформації про модифікацію Request Headers
ви можете звернутися до офіційної документації Istio.