Lewati ke konten utama

Authorization of Service Mesh through Envoy

Envoy-authz adalah middleware untuk Envoy yang melakukan otorisasi RBAC & ABAC eksternal melalui casbin. Middleware ini menggunakan API otorisasi eksternal Envoy melalui server gRPC. Proksi ini dapat diterapkan pada berbagai jenis Service Mesh berbasis Envoy, seperti Istio.

Persyaratan

  • Envoy 1.17+
  • Istio atau jenis service mesh lainnya
  • dependensi grpc

Dependensi dikelola menggunakan go.mod.

Cara Kerja Middleware

  • Seorang klien membuat permintaan HTTP.
  • Proksi Envoy mengirimkan permintaan tersebut ke server gRPC.
  • Server gRPC mengotorisasi permintaan berdasarkan kebijakan casbin.
  • Jika diotorisasi, permintaan diteruskan; jika tidak, ditolak.

Server gRPC didasarkan pada buffer protokol dari external_auth.proto di 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);
}

Dari file proto di atas, kita perlu menggunakan layanan Check() di server otorisasi.

Penggunaan

  • Tentukan kebijakan Casbin dalam file konfigurasi mengikuti panduan ini.

Anda dapat memverifikasi/menguji kebijakan Anda menggunakan editor online Casbin.

  • Mulai server autentikasi dengan menjalankan:
go build .
./authz
  • Muat konfigurasi Envoy:
envoy -c authz.yaml -l info

Setelah Envoy dimulai, ia akan mengintersep permintaan untuk proses otorisasi.

Integrasi dengan Istio

Untuk membuat middleware ini bekerja, Anda perlu mengirim header kustom yang berisi nama pengguna dalam token JWT atau header. Anda dapat merujuk ke dokumentasi resmi Istio untuk informasi lebih lanjut tentang memodifikasi Request Headers.