Tüm Ürünler
Search
Belge Merkezi

Alibaba Cloud Service Mesh:ASM giriş ağ geçidinde özel yetkilendirme kullanın

Son Güncelleme:Oct 07, 2026

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:

  1. 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.

  2. 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.

基于ASM实现应用请求认证授权

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.

Not

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.

  1. Aşağıdaki içeriğe sahip ext-authz.yaml adlı bir dosya oluşturun.

    View ext-authz.yaml

    # Copyright Istio Authors
    #
    #   Licensed under the Apache License, Version 2.0 (the "License");
    #   you may not use this file except in compliance with the License.
    #   You may obtain a copy of the License at
    #
    #       http://www.apache.org/licenses/LICENSE-2.0
    #
    #   Unless required by applicable law or agreed to in writing, software
    #   distributed under the License is distributed on an "AS IS" BASIS,
    #   WITHOUT WARRANTIES OR CONDITIONS OF ANY, either express or implied.
    #   See the License for the specific language governing permissions and
    #   limitations under the License.
    # Example configurations for deploying ext-authz server separately in the mesh.
    apiVersion: v1
    kind: Service
    metadata:
      name: ext-authz
      labels:
        app: ext-authz
    spec:
      ports:
      - name: http
        port: 8000
        targetPort: 8000
      - name: grpc
        port: 9000
        targetPort: 9000
      selector:
        app: ext-authz
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ext-authz
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: ext-authz
      template:
        metadata:
          labels:
            app: ext-authz
        spec:
          containers:
          - image: istio/ext-authz:0.6
            imagePullPolicy: IfNotPresent
            name: ext-authz
            ports:
            - containerPort: 8000
            - containerPort: 9000
    ---
  2. 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
  3. Pod durumunu kontrol etmek için aşağıdaki komutu çalıştırın.

    kubectl get pod

    Beklenen çıktı:

    NAME                              READY   STATUS    RESTARTS       AGE
    ext-authz-6d458d5f8f-bh2m9        2/2     Running   0              1m
  4. 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-authz

    Beklenen çıktı:

    2023/12/12 10:01:31 Starting HTTP server at [::]:8000
    2023/12/12 10:01:31 Starting gRPC server at [::]:9000

    Bu çıktı, hizmetin doğru şekilde çalıştığını gösterir.

  5. ext-authz yetkilendirme hizmetinin gRPC ve HTTP bağlantı noktalarını alın.

    1. ACK konsolu üzerinde oturum açın. Sol gezinme bölmesinde Clusters öğesini tıklayın.

    2. Clusters sayfasında kümenizin adını tıklayın. Sol gezinme bölmesinde Network > Services yolunu izleyin.

    3. 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.

  1. ASM konsolu üzerinde oturum açın. Sol gezinme bölmesinde Service Mesh > Mesh Management yolunu izleyin.

  2. Mesh Management sayfasında ASM örneğinizin adını tıklayın. Sol gezinme bölmesinde ASM Gateways > Ingress Gateway yolunu izleyin.

  3. Ingress Gateway sayfasında hedef ağ geçidinin adını tıklayın.

  4. Ağ geçidi genel bakış sayfasında sol gezinme bölmesinden Gateway Security > Custom Authorization Service yolunu izleyin.

  5. 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ğerini ext-authz.default.svc.cluster.local, Service Port değerini 8000 (geçerli aralık: 1–65535) ve Timeout değerini 10 saniye olarak ayarlayın. Include headers in the authorization request (includeRequestHeadersInCheck) seçeneğini etkinleştirin ve iletilecek orijinal istek üst bilgilerini ekleyin. Bunlar arasında cookie, 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, accept ve x-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-token ve x-ext-authz-check-result. Override headers on deny (headersToDownstreamOnDeny) seçeneğini etkinleştirin ve aşağıdaki üst bilgileri ekleyin: content-type, set-cookie ve x-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.

  6. 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 /productpage değ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

  1. Ağ geçidindeki /api/v1/products yolundaki 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/products

    Beklenen çı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: 1

    Bu sonuç, yetkilendirmenin tetiklenmediğini gösterir. Erişim yolu yapılandırılan /productpage değil, /api/v1/products olduğundan istek yetkilendirme ilkesiyle eşleşmez.

  2. x-ext-authz: deny üst bilgisiyle /productpage yoluna erişmek için aşağıdaki komutu çalıştırın.

    curl -I -H "x-ext-authz: deny" http://{YOUR_ASM_GATEWAY_ADDRESS}/productpage

    Beklenen çı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: chunked

    Bu 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 /productpage olduğu için yetkilendirme ilkesiyle eşleşir.

  3. x-ext-authz: allow üst bilgisiyle /productpage yoluna erişmek için aşağıdaki komutu çalıştırın.

    curl -I -H "x-ext-authz: allow" http://{YOUR_ASM_GATEWAY_ADDRESS}/productpage

    Beklenen çı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: 47

    Bu 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