Authorization of Service Mesh through Envoy
Envoy-authz - это промежуточное ПО для Envoy, которое выполняет внешнюю авторизацию RBAC и ABAC через casbin. Это промежуточное ПО использует внешний API авторизации Envoy через сервер gRPC. Этот прокси-сервер можно развернуть на любом типе сети Service Mesh на основе Envoy, такой как Istio.
Требования
- Envoy 1.17+
- Istio или любая другая сеть Service Mesh
- зависимости grpc
Зависимости управляются с помощью go.mod
.
Работа промежуточного ПО
- Клиент делает HTTP-запрос.
- Прокси-сервер Envoy отправляет запрос на сервер gRPC.
- Сервер gRPC авторизует запрос на основе политик casbin.
- Если авторизация прошла успешно, запрос перенаправляется; в противном случае он отклоняется.
Сервер gRPC основан на протоколе буфера от 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 или заголовках. Вы можете обратиться к официальной документации Istio для получения дополнительной информации о модификации Заголовков запроса
.