Authorization of Service Mesh through Envoy
Envoy-authz, casbin aracılığıyla dış RBAC & ABAC yetkilendirmesi yapan bir Envoy ara katman yazılımıdır. Bu ara katman yazılımı, bir gRPC sunucusu üzerinden Envoy'nin dış yetkilendirme API'si kullanır. Bu proxy, Istio gibi her türlü Envoy tabanlı servis ağına dağıtılabilir.
Gereksinimler
- Envoy 1.17+
- Istio veya başka herhangi bir hizmet mesh türü
- grpc bağımlılıkları
Bağımlılıklar go.mod
kullanılarak yönetilir.
Middleware'in Çalışma Şekli
- Bir istemci HTTP isteği yapar.
- Envoy proxy isteği gRPC sunucusuna gönderir.
- gRPC sunucusu isteği casbin politikalarına göre yetkilendirir.
- Eğer yetkilendirilmişse, istek iletilir; aksi takdirde reddedilir.
gRPC sunucusu, Envoy'deki external_auth.proto dosyasından protokol arabelleğine dayanmaktadır.
// 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);
}
Yukarıdaki proto dosyasından, yetkilendirme sunucusunda Check()
hizmetini kullanmamız gerekiyor.
Kullanım
- Casbin politikalarını bu kılavuz doğrultusunda config dosyalarında tanımlayın.
Politikalarınızı çevrimiçi casbin-editor kullanarak doğrulayabilir/test edebilirsiniz.
- Kimlik doğrulama sunucusunu şu şekilde başlatın:
go build .
./authz
- Envoy yapılandırmasını yükleyin:
envoy -c authz.yaml -l info
Envoy başladığında, yetkilendirme işlemi için istekleri engelleyecektir.
Istio ile Entegrasyon
Bu ara yazılımın çalışması için, JWT token'larında veya başlıklarda kullanıcı adlarını içeren özel başlıklar göndermeniz gerekir. Request Headers
değiştirme hakkında daha fazla bilgi için resmi Istio dokümantasyonuna başvurabilirsiniz.