Перейти к основному контенту

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 для получения дополнительной информации о модификации Заголовков запроса.