Authorization of Service Mesh through Envoy
Envoy-authz adalah middleware untuk Envoy yang melakukan penggunaan luar RBAC & ABAC melalui casbin. Middleware ini menggunakan API penggunaan luar Envoy melalui pelayan gRPC. Proksi ini boleh dilaksanakan pada sebarang jenis perkhidmatan mesh berasaskan Envoy, seperti Istio.
Keperluan
- Envoi 1.17+
- Istio atau sebarang jenis mesh perkhidmatan lain
- kebergantungan grpc
Kebergantungan dikendalikan menggunakan go.mod
.
Kerja Middleware
- Pelanggan membuat permintaan HTTP.
- Proksi Envoy menghantar permintaan ke pelayan gRPC.
- Pelayan gRPC membenarkan permintaan berdasarkan dasar casbin.
- Jika dibenarkan, permintaan diteruskan; jika tidak, ia ditolak.
Pelayan gRPC adalah berdasarkan protokol penampan dari external_auth.proto dalam 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 fail protokol di atas, kita perlu menggunakan perkhidmatan Check()
di pelayan pengesahan.
Penggunaan
- Tentukan polisi Casbin dalam fail konfigurasi mengikut panduan ini guide.
Anda boleh mengesahkan/menguji polisi anda menggunakan casbin-editor dalam talian.
- Mulakan pelayan pengesahan dengan menjalankan:
go build .
./authz
- Muatkan konfigurasi Envoy:
envoy -c authz.yaml -l info
Setelah Envoy bermula, ia akan menahan permintaan untuk proses pengesahan.
Mengintegrasikan dengan Istio
Untuk membuat middleware ini berfungsi, anda perlu menghantar tajuk khas yang mengandungi nama pengguna dalam token JWT atau tajuk. Anda boleh merujuk kepada dokumentasi rasmi Istio untuk maklumat lanjut mengenai pengubahsuaian Request Headers
.