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

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.