Tüm Ürünler
Search
Belge Merkezi

Alibaba Cloud Service Mesh:JWT ile ilgili SSS

Son Güncelleme:Oct 07, 2026

Bu konu, Alibaba Cloud Service Mesh (ASM) içindeki JSON Web Token (JWT) kimlik doğrulamasıyla ilgili sıkça sorulan soruları yanıtlar. Yanıtlar arasında JWT algoritma desteği, küme içi ve dışındaki hizmetler için JwksUri yapılandırması ve yol düzeyinde kimlik doğrulama hariç tutma yer alır.

Önkoşullar

  • Bir ASM örneği oluşturun.

  • JwksUri ile ilgili yapılandırmalar için ASM 1,13 veya sonraki bir sürüm gereklidir.

  • kubectl komutlarını çalıştırmak üzere veri düzlemi kümesi için bir kubeconfig dosyası yapılandırın.

ASM hangi JWT algoritmalarını destekler?

  • 1,13'ten önceki ASM sürümleri yalnızca RSA algoritmasını destekler.

  • ASM 1,13 ve sonraki sürümler aşağıdaki JWT algoritmalarını destekler: ES256, ES384, ES512, HS256, HS384, HS512, RS256, RS384, RS512, PS256, PS384, PS512 ve EdDSA.

ASM'de JwksUri nasıl kullanılır?

Alibaba Cloud Service Mesh 1,13 veya sonraki bir sürümü kullanmanız gerekir. JwksUri'yi kullanmanın iki yolu vardır:

  • JwksUri küme içindeki bir hizmeti işaret ediyorsa doğrudan yapılandırabilirsiniz.

  • JwksUri küme dışındaki bir hizmeti işaret ediyorsa karşılık gelen bir ServiceEntry yapılandırmanız gerekir.

    Bu konuda resmi Istio JWT ve Jwks örnekleri kullanılmaktadır. Daha fazla bilgi için JWT ve Jwks kaynaklarına bakın.

Küme içindeki bir JwksUri adresini kullanma

Bu konuda JwksUri adresinin Service Mesh tarafından yönetilen bir kümedeki bir adres olduğu varsayılmaktadır. nginx-proxy, küme içindeki bir hizmettir. Bu hizmetin 80 numaralı bağlantı noktasındaki /get_jwks uç noktası jwks genel anahtar bilgilerini döndürür ve JwksUri değeri http://nginx-proxy.{Namespace}.svc.cluster.local:80/get_jwks şeklindedir.

  1. Kümenin get_jwks uç noktasının kullanılabilir olup olmadığını kontrol etmek için aşağıdaki komutu çalıştırın.

    curl nginx-proxy/get_jwks

    Beklenen çıktı:

    { "keys":[ {"e":"AQAB","kid":"DHFbpoIUqrY8t2zpA2qXfCmr5VO5ZEr4RzHU_-e****","kty":"RSA","n":"xAE7eB6qugXyCAG3yhh7pkDkT65p****-P7KfIupjf59vsdo91bSP9C8H07pSAGQ****_xFj9VswgsCg4R6otmg5PV2He95lZdHtOcU5****_pbhLdKXbi66GlVeK6ABZOUW3WYt****-91gVuoeJT_DwtGGcp4ignkgXfkiE****-4sfb4qdt5oLbyVpmW6x9cfa7vs2WTfURiCrBoU****_-4WTiULmmHSGZHOjzwa8WtrtOQGsAFjIbno85jp6MnGGGZPYZ****_b3y5u-YpW7ypZrvD8BgtKVjgtQgZhLAGezMt0ua3DRrWnKqT****_EyxOGuHJrLsn00****"}]}

    Anahtar verileri içeren bir 200 yanıtı, get_jwks uç noktasının kullanılabilir olduğunu gösterir.

  2. Bir istek kimlik doğrulaması oluşturun.

    1. ASM konsolu üzerinde oturum açın.

    2. Sol gezinme bölmesinde Service Mesh > Mesh Management seçeneğini tıklayın.

    3. Mesh Management sayfasında yapılandırmak istediğiniz ASM örneğini bulun. ASM örneğinin adını tıklayın veya Actions sütunundaki Manage seçeneğini tıklayın.

    4. Sol gezinme bölmesinde Mesh Security Center > RequestAuthentication seçeneğini tıklayın.

    5. RequestAuthentication sayfasında Create from YAML seçeneğini tıklayın, hedef Namespaces ve herhangi bir Scenario Template seçin, aşağıdaki YAML kodunu yapılandırın ve ardından Create seçeneğini tıklayın.

      apiVersion: security.istio.io/v1beta1
      kind: RequestAuthentication
      metadata:
        name: jwt-example
        namespace: foo
      spec:
        jwtRules:
          - issuer: testing@secure.istio.io
            jwksUri: 'http://nginx-proxy/get_jwks'
        selector:
          matchLabels:
            app: httpbin
  3. Veri düzlemi kubeconfig dosyasını kullanarak httpbin hizmetine erişmek için aşağıdaki komutu çalıştırın.

# Set the TOKEN environment variable.
TOKEN=$(curl https://raw.githubusercontent.com/istio/istio/release-1.14/security/tools/jwt/samples/demo.jwt -s) && echo "$TOKEN" | cut -d '.' -f2 - | base64 --decode -
# Access the httpbin service with the JWT from the sleep pod.
kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/headers" -sS -o /dev/null -H "Authorization: Bearer $TOKEN" -w "%{http_code}\n"

200 durum kodu, isteğin başarılı olduğunu doğrular.

Küme dışındaki bir JwksUri adresini kullanma

Aşağıdaki örnek HTTP protokolüne dayanmaktadır. Jwks'i almak için HTTPS kullanmanız gerekiyorsa ServiceEntry için ek bir destination rule yapılandırın.

  1. Uzak adres için bir ServiceEntry oluşturun.

    a. service-entry.yaml dosyasını oluşturmak için aşağıdaki YAML içeriğini kullanın.

    apiVersion: networking.istio.io/v1beta1
    kind: ServiceEntry
    metadata:
      name: external-svc-https
      namespace: foo
    spec:
      addresses:
        - 11.11.XX.XX   # Replace with the address of your external Jwks service.
      endpoints:
        - address: 11.11.XX.XX  # Replace with the address of your external Jwks service.
      hosts:
        - 11.11.XX.XX  # Replace with the address of your external Jwks service.
      location: MESH_EXTERNAL
      ports:
        - name: http
          number: 80
          protocol: HTTP
        - name: https
          number: 443
          protocol: HTTPS      
      resolution: STATIC

    b. ServiceEntry'i dağıtmak için aşağıdaki komutu çalıştırın.

    kubectl apply -f service-entry.yaml
    • (İsteğe bağlı) Jwks hizmetiniz HTTPS protokolü gerektiriyorsa ServiceEntry için ek bir destination rule yapılandırmanız gerekir.

    apiVersion: networking.istio.io/v1beta1
    kind: DestinationRule
    metadata:
      name: external-svc-https
      namespace: foo
    spec:
      host: <your-service-entry-host>
      trafficPolicy:
        loadBalancer:
          simple: ROUND_ROBIN
        portLevelSettings:
          - port:
              number: 443
            tls:
              mode: SIMPLE
  2. Bir istek kimlik doğrulaması oluşturun.

    1. ASM konsolu üzerinde oturum açın.

    2. Sol gezinme bölmesinde Service Mesh > Mesh Management seçeneğini tıklayın.

    3. Mesh Management sayfasında yapılandırmak istediğiniz ASM örneğini bulun. ASM örneğinin adını tıklayın veya Actions sütunundaki Manage seçeneğini tıklayın.

    4. Sol gezinme bölmesinde Mesh Security Center > RequestAuthentication seçeneğini tıklayın.

    5. RequestAuthentication sayfasında Create from YAML seçeneğini tıklayın, hedef Namespaces ve herhangi bir Scenario Template seçin, aşağıdaki YAML kodunu yapılandırın ve ardından Create seçeneğini tıklayın.

      apiVersion: security.istio.io/v1beta1
      kind: RequestAuthentication
      metadata:
        name: jwt-example
        namespace: foo
      spec:
        jwtRules:
          - issuer: testing@secure.istio.io
            jwksUri: '${YOUR_EXTERNAL_JWKS_URI}'
        selector:
          matchLabels:
            app: httpbin
  3. TOKEN ortam değişkenini ayarlamak ve sleep pod içinde bir erişim testi yapmak için aşağıdaki komutları çalıştırın.

# Set the TOKEN environment variable.
TOKEN=$(curl https://raw.githubusercontent.com/istio/istio/release-1.14/security/tools/jwt/samples/demo.jwt -s)
# Access the httpbin service with the JWT from the sleep pod.
kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/headers" -sS -o /dev/null -H "Authorization: Bearer $TOKEN" -w "%{http_code}\n"

200 durum kodu, isteğin başarılı olduğunu doğrular.

Belirli yollara yönelik istekler için JWT kimlik doğrulaması nasıl atlanır?

ASM konsolu yetkilendirme ilkesi özelliğini sunar. Yetkilendirme ilkesinde bir dışlama eşleşmesi yapılandırarak belirtilen yollar dışındaki yollara yönelik isteklerin kimlik doğrulamasını sağlayabilirsiniz.

  1. Hizmetleri dağıtın ve erişin.

    a. ASM örneğiyle ilişkili kümede Bookinfo örnek uygulamasını dağıtın. Daha fazla bilgi için ASM örneğiyle ilişkili bir kümede uygulama dağıtma konusuna bakın.

    b. Aşağıdaki üç hizmete erişmek ve her yolun kullanılabilir olduğundan emin olmak için aşağıdaki komutları çalıştırın.

    curl "http://${ASM_GATEWAY_ADDRESS}/productpage" -sS -o /dev/null  -w "%{http_code}\n"
    curl "http://${ASM_GATEWAY_ADDRESS}/api/v1/products/0" -sS -o /dev/null  -w "%{http_code}\n"
    curl "http://${ASM_GATEWAY_ADDRESS}/api/v1/products/1" -sS -o /dev/null  -w "%{http_code}\n"

    Üç hizmet de 200 döndürür; bu, hizmetlere erişilebildiğini gösterir.

  2. Bir RequestAuthentication oluşturun.

    1. ASM konsolu üzerinde oturum açın.

    2. Sol gezinme bölmesinde Service Mesh > Mesh Management seçeneğini tıklayın.

    3. Mesh Management sayfasında yapılandırmak istediğiniz ASM örneğini bulun. ASM örneğinin adını tıklayın veya Actions sütunundaki Manage seçeneğini tıklayın.

    4. Sol gezinme bölmesinde Mesh Security Center > RequestAuthentication seçeneğini tıklayın.

    5. RequestAuthentication sayfasında Create from YAML seçeneğini tıklayın, hedef Namespaces ve herhangi bir Scenario Template seçin, aşağıdaki YAML kodunu yapılandırın ve ardından Create seçeneğini tıklayın.

      apiVersion: security.istio.io/v1beta1
      kind: RequestAuthentication
      metadata:
        name: jwt-example
        namespace: istio-system
      spec:
        jwtRules:
          - issuer: testing@secure.istio.io
            jwks: >-
              { "keys":[
              {"e":"AQAB","kid":"DHFbpoIUqrY8t2zpA2qXfCmr5VO5ZEr4RzHU_-e****","kty":"RSA","n":"xAE7eB6qugXyCAG3yhh7pkDkT65pHymX-P7KfIupjf59vsdo91bSP9C8H07pSAGQ****_xFj9VswgsCg4R6otmg5PV2He95lZdHtOcU5****_pbhLdKXbi66GlVeK6ABZOUW3WYtnNHD-91gVu****_DwtGGcp4ignkgXfkiEm4sw-4sfb4qdt5oLbyVpmW6x9cfa7vs2WTfURiCrBoU****_-4WTiULmmHSGZHOjzwa8WtrtOQGsAFjIbno85jp6MnGGGZPYZ****_b3y5u-YpW7ypZrvD8BgtKVjgtQgZhLAGezMt0ua3DRrWnKqT****_EyxOGuHJrLsn00****"}]}
        selector:
          matchLabels:
            app: istio-ingressgateway

      Bu istek kimlik doğrulaması ASM ağ geçidine uygulanır ve ağ geçidinden geçen tüm isteklerde etkili olur. RequestAuthentication yapılandırıldıktan sonra JWT içermeyen istekler ve doğru JWT içeren isteklerin her ikisine de izin verilir. Yalnızca hatalı JWT taşıyan istekler reddedilir.

  3. Bir AuthorizationPolicy oluşturun.

    Belirli yollara yönelik isteklerin JWT taşımasına gerek olmamasını, diğer yollara yönelik isteklerin ise JWT taşımasını sağlayacak şekilde yapılandırın. Bu konuda /productpage yolu örnek olarak kullanılmıştır. /productpage yolu için JWT kimlik doğrulaması yapılmaz. /productpage yolu dışındaki iki yol için isteklerin geçebilmesi amacıyla doğru bir JWT taşımaları gerekir.

    1. ASM konsolu üzerinde oturum açın.

    2. Sol gezinme bölmesinde Service Mesh > Mesh Management seçeneğini tıklayın.

    3. Mesh Management sayfasında yapılandırmak istediğiniz ASM örneğini bulun. ASM örneğinin adını tıklayın veya Actions sütunundaki Manage seçeneğini tıklayın.

    4. Sol gezinme bölmesinde Mesh Security Center > AuthorizationPolicy seçeneğini tıklayın.

  4. AuthorizationPolicy sayfasında Create from YAML seçeneğini tıklayın, hedef Namespaces ve herhangi bir Scenario Template seçin, aşağıdaki YAML kodunu yapılandırın ve ardından Create seçeneğini tıklayın.

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: test-exclude
      namespace: istio-system
    spec:
      action: DENY
      rules:
        - from:
            - source:
                notRequestPrincipals:
                  - '*'
          to:
            - operation:
                notPaths:
                  - /productpage
      selector:
        matchLabels:
          app: istio-ingressgateway

    Bu AuthorizationPolicy de ASM ağ geçidine uygulanır. Temel olarak bir DENY kuralı yapılandırır: /productpage yolu dışındaki yollara yönelik istekler doğru bir JWT taşımıyorsa erişim reddedilir.

Bir erişim testi yapın.

a. İsteklerde taşınan JWT'yi TOKEN ortam değişkeni olarak ayarlamak için aşağıdaki komutu çalıştırın.

export TOKEN=eyJhbGciOiJSUzI1NiIsImtpZCI6IkRIRmJwb0lVcXJZOHQyenBBMnFYZkNtcjVWTzVaRXI0UnpIVV8tZW52dlEiLCJ0eXAiOiJKV1****.eyJleHAiOjQ2ODU5ODk3MDAsImZvbyI6ImJhciIsImlhdCI6MTUzMjM4OTcwMCwiaXNzIjoidGVzdGluZ0BzZWN1cmUuaXN0aW8uaW8iLCJzdWIiOiJ0ZXN0aW5nQHNlY3VyZS5pc3Rpby5p****.CfNnxWP2tcnR9q0vxyxweaF3ovQYHYZl82hAUsn21bwQd9****-LS9qd_vpdLG4Tn1A15NxfCjp5f7Q****-KC9PJqYpgGbaXhaGx7bEdFWjcwv3nZz****__ZpaCERdwU7igUmJqYGBYQ51vr2njU9ZimyKkfDe3axcyiBZde7G6dabliUosJvvKOPcKIWPccCg****_GNfwIip3-SsFdlR7BtbVUcqR-yv-XOxJ3Uc1MI0tz3uMiiZcyPV7sNCU4KRnemRIMHVOfuvH****_GhGbiSFzgPTAa9WTltbnarTbxudb_YEOx12JiwYToeX0DCPb43W1tzIBxgm8****

b. Üç hizmet yoluna erişmek için aşağıdaki komutları çalıştırın.

  • Hiçbir istek JWT taşımaz:

curl "http://${ASM_GATEWAY_ADDRESS}/productpage" -sS -o /dev/null  -w "%{http_code}\n"
curl "http://${ASM_GATEWAY_ADDRESS}/api/v1/products/0" -sS -o /dev/null  -w "%{http_code}\n"
curl "http://${ASM_GATEWAY_ADDRESS}/api/v1/products/1" -sS -o /dev/null  -w "%{http_code}\n"

Beklenen çıktı:

200
403
403

Yalnızca /productpage yoluna erişilebilir. Diğer tüm yollar 403 döndürür.

  • Tüm istekler JWT taşır:

curl "http://${ASM_GATEWAY_ADDRESS}/productpage" -H "Authorization: Bearer $TOKEN" -sS -o /dev/null  -w "%{http_code}\n"
curl "http://${ASM_GATEWAY_ADDRESS}/api/v1/products/0" -H "Authorization: Bearer $TOKEN" -sS -o /dev/null  -w "%{http_code}\n"
curl "http://${ASM_GATEWAY_ADDRESS}/api/v1/products/1" -H "Authorization: Bearer $TOKEN" -sS -o /dev/null  -w "%{http_code}\n"

Beklenen çıktı:

200
200
200

Üç yol da 200 döndürür; bu, tüm yollara erişilebildiğini gösterir.