HTTP ana makine adları, yollar veya yöntemler gibi kriterlere göre istekleri yetkilendirmek amacıyla erişim kontrolü ilkelerini özelleştirmek için bir ASM giriş ağ geçidinde özel bir yetkilendirme hizmeti kullanabilirsiniz. Bu sayede kritik hizmetlerinize yalnızca yetkili kullanıcılar erişebilir.
Önkoşullar
Genel bakış
Bir istemci istek gönderdiğinde arka uç sisteminin, örneğin kullanıcının talep edilen kaynağa erişim iznine sahip olup olmadığını kontrol ederek isteğin geçerliliğini doğrulaması gerekir. Yetkilendirme başarılı olduktan sonra yanıtın orijinal istekte bulunmayan bilgileri (örneğin üst bilgi bölümünde bir hizmet sürüm numarası veya kullanıcı kimliği) içermesi de gerekebilir. ASM, özel bir yetkilendirme hizmeti sunar. Kritik hizmetlere yalnızca uygun yetkilendirme ile erişilmesini sağlamak amacıyla bir ASM giriş ağ geçidine bir yetkilendirme akışı ekleyebilirsiniz.
Özel yetkilendirme hizmeti, sizin geliştirdiğiniz bir hizmettir. Bu konuda örnek olarak basit ve önceden hazırlanmış bir yetkilendirme hizmeti kullanılmaktadır. Giriş ağ geçidine ulaşan belirli istekler özel yetkilendirme hizmetine yönlendirilir; bu hizmet daha sonra isteğe izin verilip verilmeyeceğine karar verir. Giriş ağ geçidi bu kararı uygular. Aşağıdaki iki bölümü yapılandırmanız gerekir:
Giriş ağ geçidi ile özel yetkilendirme hizmeti arasındaki entegrasyon ayrıntıları.
Hangi isteklerin özel yetkilendirme gerektirdiğini belirten kurallar.
Özel yetkilendirme hizmeti, Service Mesh ürününün gelişmiş bir güvenlik özelliğidir. Gereksinimleriniz basitse bunun yerine bir ağ geçidi engelleme/izin listesi veya standart bir yetkilendirme ilkesi kullanmayı düşünün. Daha karmaşık mantıklar için bu konudaki adımları uygulayın.
Uygulama akışı
ASM, Istio'nun özel yetkilendirme özelliğini kapsüller. Yerel Istio uygulamasını anlamak isterseniz ASM tarafından oluşturulan yerel Istio kaynaklarını inceleyebilirsiniz. Bir ASM özel yetkilendirme hizmetinin uygulama akışı şu şekildedir:
ASM'de bir özel yetkilendirme hizmeti tanımlayın ve bunu Adım 1'de dağıtılan hizmetle ilişkilendirin. Bu işlem, ASM'nin yetkilendirme için söz konusu hizmeti kullanmasına olanak tanır.
ASM'de, özel yetkilendirme gerektiren uygulamayı yapılandırmak ve yetkilendirmeyi Adım 2'de yapılandırılan özel yetkilendirme hizmetine yönlendirmek için bir yetkilendirme ilkesi oluşturun.

Adım 1: Özel yetkilendirme hizmetini dağıtın
ACK kümenizde özel bir yetkilendirme hizmeti dağıtın. Hizmet, Istio özel yetkilendirme hizmeti API teknik özelliklerine uygun olmalı ve özel mantığı uygulamak için hem HTTP hem de gRPC protokollerini desteklemelidir. Bu konuda kullanılan örnek hizmet, isteklerin yetkilendirmeden geçmesi için x-ext-authz: allow üst bilgisini içermesini zorunlu kılar.
Bu konuda özel bir yetkilendirme hizmeti örneği sunulmaktadır. Kendi hizmetinizi oluşturmak için referans olarak kodunu kullanabilirsiniz. Daha fazla bilgi için bkz. Özel yetkilendirme.
-
Aşağıdaki içeriğe sahip ext-authz.yaml adlı bir dosya oluşturun.
-
Kümenizde özel yetkilendirme hizmetini dağıtmak için aşağıdaki komutu çalıştırın.
kubectl ile kümeleri ve uygulamaları nasıl yöneteceğinizi öğrenmek için bkz. kubectl kullanarak bir kümeye bağlanma.
kubectl apply -f ext-authz.yaml -
Pod durumunu kontrol etmek için aşağıdaki komutu çalıştırın.
kubectl get podBeklenen çıktı:
NAME READY STATUS RESTARTS AGE ext-authz-6d458d5f8f-bh2m9 2/2 Running 0 1m -
Uygulamanın doğru şekilde çalıştığını doğrulamak için aşağıdaki komutu çalıştırın.
kubectl logs "$(kubectl get pod -l app=ext-authz -n default -o jsonpath={.items..metadata.name})" -n default -c ext-authzBeklenen çıktı:
2023/12/12 10:01:31 Starting HTTP server at [::]:8000 2023/12/12 10:01:31 Starting gRPC server at [::]:9000Bu çıktı, hizmetin doğru şekilde çalıştığını gösterir.
-
ext-authz yetkilendirme hizmetinin gRPC ve HTTP bağlantı noktalarını alın.
ACK konsolu üzerinde oturum açın. Sol gezinme bölmesinde Clusters öğesini tıklayın.
Clusters sayfasında kümenizin adını tıklayın. Sol gezinme bölmesinde yolunu izleyin.
-
Services sayfasında ext-authz öğesini tıklayın.
Endpoint bölümünde gRPC bağlantı noktasının 9000, HTTP bağlantı noktasının ise 8000 olduğunu görebilirsiniz. Buna göre gRPC hizmet adresi ext-authz.default.svc.cluster.local:9000, HTTP hizmet adresi ise ext-authz.default.svc.cluster.local:8000 şeklindedir.
Adım 2: HTTP özel yetkilendirme hizmetini yapılandırın
ASM giriş ağ geçidinin özel yetkilendirme yeteneklerini ASM konsolunda yapılandırabilirsiniz.
ASM konsolu üzerinde oturum açın. Sol gezinme bölmesinde yolunu izleyin.
Mesh Management sayfasında ASM örneğinizin adını tıklayın. Sol gezinme bölmesinde yolunu izleyin.
Ingress Gateway sayfasında hedef ağ geçidinin adını tıklayın.
Ağ geçidi genel bakış sayfasında sol gezinme bölmesinden yolunu izleyin.
-
Custom Authorization Service Configuration sihirbazında Enable Gateway Custom Authorization Service anahtarını açın, aşağıdaki yöntemlerden birini kullanarak hizmeti yapılandırın ve ardından Next öğesini tıklayın.
Yöntem 1: Yeni bir özel yetkilendirme hizmeti oluşturma
Custom authorization service (HTTP or gRPC protocol) implemented based on envoy.ext_authz sekmesinde parametreleri yapılandırın. Parametre açıklamaları için bkz. HTTP protokolü kullanan özel bir yetkilendirme hizmetine bağlanma. Formda aşağıdaki gerekli parametreleri yapılandırın: Protocol değerini
HTTP, Service Address değeriniext-authz.default.svc.cluster.local, Service Port değerini8000(geçerli aralık: 1–65535) ve Timeout değerini10saniye olarak ayarlayın. Include headers in the authorization request (includeRequestHeadersInCheck) seçeneğini etkinleştirin ve iletilecek orijinal istek üst bilgilerini ekleyin. Bunlar arasındacookie,x-forwarded-access-token,x-forwarded-user,x-forwarded-email,authorization,x-forwarded-proto,proxy-authorization,user-agent,x-forwarded-host,from,x-forwarded-for,acceptvex-ext-authz(özel genişletilmiş üst bilgi) bulunur. Override headers on allow (headersToUpstreamOnAllow) seçeneğini etkinleştirin ve aşağıdaki üst bilgileri ekleyin:authorization,cookie,path,x-auth-request-access-token,x-forwarded-access-tokenvex-ext-authz-check-result. Override headers on deny (headersToDownstreamOnDeny) seçeneğini etkinleştirin ve aşağıdaki üst bilgileri ekleyin:content-type,set-cookievex-ext-authz-check-result.x-ext-authz-check-resultüst bilgisi, her iki listede de yapılandırılması gereken temel bir üst bilgidir. Next öğesini tıklayın.Yöntem 2: Mevcut bir özel yetkilendirme hizmetini içe aktarma
Import existing Custom Authorization Service sekmesinde mevcut bir Existing Custom Authorization Service seçin.
-
Matching Rules sihirbazında aşağıdaki ayarları yapılandırın ve ardından Submit öğesini tıklayın.
Bu kurala uyan istekler özel yetkilendirmeyi tetikler. Match Mode değerini Selected requests must be authorized, Match Rule değerini ise Custom match rules olarak ayarlayın. HTTP Path anahtarını açın ve
/productpagedeğerini girin. Diğer kural seçeneklerini (HTTP Hostname, HTTP Method ve Port) kapalı bırakın.Yapılandırma tamamlandığında, Gateway Custom Authorization Service Created successfully mesajı görüntülenir.
Adım 3: Özel yetkilendirme hizmetini doğrulayın
-
Ağ geçidindeki
/api/v1/productsyolundaki kaynağa erişmek için aşağıdaki komutu çalıştırın.Ağ geçidi adresini nasıl alacağınızı öğrenmek için bkz. Giriş ağ geçidinin IP adresini alma.
curl -I http://{YOUR_ASM_GATEWAY_ADDRESS}/api/v1/productsBeklenen çıktı:
HTTP/1.1 200 OK server: istio-envoy date: Wed, 13 Dec 2023 02:41:20 GMT content-type: application/json content-length: 395 x-envoy-upstream-service-time: 1Bu sonuç, yetkilendirmenin tetiklenmediğini gösterir. Erişim yolu yapılandırılan
/productpagedeğil,/api/v1/productsolduğundan istek yetkilendirme ilkesiyle eşleşmez. -
x-ext-authz: denyüst bilgisiyle/productpageyoluna erişmek için aşağıdaki komutu çalıştırın.curl -I -H "x-ext-authz: deny" http://{YOUR_ASM_GATEWAY_ADDRESS}/productpageBeklenen çıktı:
HTTP/1.1 403 Forbidden x-ext-authz-check-result: denied date: Wed, 13 Dec 2023 02:42:59 GMT server: istio-envoy transfer-encoding: chunkedBu sonuç, yetkilendirmenin tetiklendiğini ancak başarısız olduğunu gösterir. Yanıt, yeni tanımlanan
x-ext-authz-check-result: deniedüst bilgisini içerir. Erişim yolu/productpageolduğu için yetkilendirme ilkesiyle eşleşir. -
x-ext-authz: allowüst bilgisiyle/productpageyoluna erişmek için aşağıdaki komutu çalıştırın.curl -I -H "x-ext-authz: allow" http://{YOUR_ASM_GATEWAY_ADDRESS}/productpageBeklenen çıktı:
HTTP/1.1 200 OK server: istio-envoy date: Wed, 13 Dec 2023 02:50:38 GMT content-type: text/html; charset=utf-8 content-length: 5290 x-envoy-upstream-service-time: 47Bu sonuç, isteğin başarıyla yetkilendirildiğini doğrular. Örnek özel yetkilendirme hizmeti bu üst bilgiyi yanıtına ekler ve ağ geçidi, yetkilendirme başarılı olduğunda bu üst bilgiyi yukarı akış uygulamasına iletecek şekilde yapılandırılır.
İlgili belgeler
ASM giriş ağ geçitleri, mesh içindeki uygulamaları güvence altına almak için kaynak IP adresine, HTTP ana makine adına ve bağlantı noktasına dayalı bir engelleme/izin listesi yapılandırmayı destekler. Daha fazla bilgi için bkz. Giriş ağ geçidi için engelleme/izin listesi yapılandırma.
Uygulamanızı değiştirmeden Alibaba Cloud IDaaS veya diğer OIDC uyumlu kimlik sağlayıcılarıyla tek oturum açma (SSO) uygulayabilirsiniz. Daha fazla bilgi için bkz. Giriş ağ geçidinde OIDC tabanlı SSO yapılandırma.