Tüm Ürünler
Search
Belge Merkezi

Alibaba Cloud Service Mesh:Restrict IP address access to applications in an ASM instance

Son Güncelleme:Oct 07, 2026

Alibaba Cloud Service Mesh (ASM), Istio AuthorizationPolicy kaynakları aracılığıyla IP tabanlı erişim kontrolünü destekler. Giriş ağ geçidi veya sidecar proxy düzeyinde belirli istemci IP adreslerinden gelen trafiği reddetmek için ipBlocks veya remoteIpBlocks kullanın.

Önkoşullar

Çalışma mantığı

DENY eylemine sahip bir AuthorizationPolicy, belirtilen IP adresleriyle eşleşen istekleri engeller. Hangi IP'nin değerlendirileceğini iki kaynak alanı belirler:

  • **ipBlocks**: Proxy ile doğrudan TCP bağlantısı kuran eşin IP adresiyle (downstream_remote_address) eşleşir.

  • **remoteIpBlocks**: Genellikle X-Forwarded-For üstbilgisinden çıkarılan orijinal istemci IP'siyle eşleşir.

ipBlocks veya remoteIpBlocks seçimi

Doğru alan, istemci IP'sinin proxy'ye nasıl ulaştığına bağlıdır:

Trafik yolu İstemci IP kaynağı Kullanılacak alan
İstemci doğrudan ASM ağ geçidine bağlanır (Katman 7 proxy yok) Paket kaynak adresi ipBlocks veya remoteIpBlocks (her ikisi de çalışır)
İstemci ile ASM ağ geçidi arasında bir Katman 7 proxy bulunur X-Forwarded-For üstbilgisi remoteIpBlocks

Ağ geçidi ve sidecar uygulama farkları

Ağ geçidine ve sidecar proxy'e uygulanan ilkeler farklı davranır çünkü her proxy farklı bir downstream_remote_address görür:

Uygulama noktası **downstream_remote_address değeri** **ipBlocks davranışı**
Ağ geçidi (istio-system ad alanı, seçici istio: ingressgateway) Gerçek istemci IP'si (geçerli bağlantı noktasıyla) Gerçek istemci IP'siyle eşleşir
Sidecar proxy (default ad alanı, seçici app: <workload>) X-Forwarded-For değerinden çıkarılan istemci IP'si (bağlantı noktası 0) Gerçek TCP kaynağı ağ geçidi pod IP'si olduğu için istemci IP'siyle eşleşmez

Sidecar proxy, trafiği doğrudan istemciden değil ağ geçidi pod'undan aldığından sidecar üzerindeki ipBlocks ağ geçidi pod IP'siyle eşleşir. Sidecar düzeyinde istemci IP'sine göre filtreleme yapmak için remoteIpBlocks kullanın.

Kullanım notları

  • Aşağıdaki örneklerde ağ geçidinin externalTrafficPolicy alanı Local olarak ayarlanmıştır. externalTrafficPolicy Cluster olarak ayarlanırsa kaynak IP adresleri korunmaz ve IP tabanlı erişim kontrolü beklendiği gibi çalışmaz.

Ağ geçidinde bir IP'yi reddetme (Katman 7 proxy yok)

İstemci, ara Katman 7 proxy olmadan doğrudan ASM ağ geçidine bağlandığında ağ geçidi günlüklerindeki downstream_remote_address ve x_forwarded_for değerleri gerçek istemci IP'sini yansıtır. IP tabanlı erişim kontrolü için hem ipBlocks hem de remoteIpBlocks kullanılabilir.

HTTPBin uygulamasına bağlantıyı doğrulamak için aşağıdaki komutu çalıştırın:

curl <gateway-external-ip>:80/ -I

Ağ geçidi günlüğü örneği

{
    "downstream_remote_address": "106.XX.XX.1:58656",
    "x_forwarded_for": "106.11.XX.X",
    "response_code": "200",
    "upstream_cluster": "outbound|8000||httpbin.default.svc.cluster.local",
    "user_agent": "curl/7.88.1"
}

downstream_remote_address ve x_forwarded_for alanlarının her ikisi de gerçek istemci IP'sini (106.11.XX.X) içerir.

Sidecar proxy günlüğü örneği

{
    "downstream_remote_address": "106.11.XX.X:0",
    "x_forwarded_for": "106.11.XX.X",
    "response_code": "200",
    "upstream_cluster": "inbound|80||",
    "user_agent": "curl/7.88.1"
}

x_forwarded_for alanı gerçek istemci IP'sini gösterir. downstream_remote_address alanı da istemci IP'sini gösterir ancak sidecar düzeyinde bağlantı noktası bilgisi kaybolduğu için bağlantı noktası 0 değerindedir.

ipBlocks kullanarak bir IP'yi reddetme

  1. Aşağıdaki AuthorizationPolicy'i içeren gateway-test.yaml adlı bir dosya oluşturun: <client-ip> yerine engellenecek IP adresini yazın.

        apiVersion: security.istio.io/v1beta1
        kind: AuthorizationPolicy
        metadata:
          name: gateway-test
          namespace: istio-system
        spec:
          action: DENY
          rules:
            - from:
                - source:
                    ipBlocks:
                      - <client-ip>  # Example: 106.11.XX.X
          selector:
            matchLabels:
              istio: ingressgateway
  2. Yetkilendirme ilkesini dağıtın:

        kubectl apply -f gateway-test.yaml
  3. Bir istek göndererek ilkeyi doğrulayın: Beklenen çıktı: IP'nin engellendiğini onaylayan 403 Forbidden yanıtı.

        curl <gateway-external-ip>:80/ -I
        HTTP/1.1 403 Forbidden
        content-length: 19
        content-type: text/plain
        server: istio-envoy

remoteIpBlocks kullanarak bir IP'yi reddetme

ipBlocks yaklaşımından tek farkı, AuthorizationPolicy'deki kaynak alandır. remoteIpBlocks alanı, doğrudan TCP bağlantısı kaynağı yerine X-Forwarded-For üstbilgisini değerlendirir.

  1. Aşağıdaki AuthorizationPolicy'i içeren gateway-test.yaml adlı bir dosya oluşturun:

        apiVersion: security.istio.io/v1beta1
        kind: AuthorizationPolicy
        metadata:
          name: gateway-test
          namespace: istio-system
        spec:
          action: DENY
          rules:
            - from:
                - source:
                    remoteIpBlocks:
                      - <client-ip>  # Example: 106.11.XX.X
          selector:
            matchLabels:
              istio: ingressgateway
  2. Yetkilendirme ilkesini dağıtın:

        kubectl apply -f gateway-test.yaml
  3. İlkeyi doğrulayın: Beklenen çıktı:

        curl <gateway-external-ip>:80/ -I
        HTTP/1.1 403 Forbidden
        content-length: 19
        content-type: text/plain
        server: istio-envoy

Sidecar proxy'de bir IP'yi reddetme

İlke ağ geçidi yerine sidecar proxy'yi hedeflediğinde ipBlocks ve remoteIpBlocks farklı davranır.

ipBlocks neden sidecar'da istemci IP'siyle eşleşmez

  1. Aşağıdaki AuthorizationPolicy'i içeren gateway-test.yaml adlı bir dosya oluşturun:

    Not

    Ad alanı default ve seçici giriş ağ geçidi yerine httpbin iş yükünü hedefler.

        apiVersion: security.istio.io/v1beta1
        kind: AuthorizationPolicy
        metadata:
          name: gateway-test
          namespace: default
        spec:
          action: DENY
          rules:
            - from:
                - source:
                    ipBlocks:
                      - <client-ip>  # Example: 106.11.XX.X
          selector:
            matchLabels:
              app: httpbin
  2. Yetkilendirme ilkesini dağıtın:

        kubectl apply -f gateway-test.yaml
  3. İlkeyi doğrulayın: Beklenen çıktı: Sidecar proxy downstream_remote_address alanında istemci IP'si yerine ağ geçidi pod IP'sini gördüğünden istek 200 OK ile başarılı olur. ipBlocks alanı doğrudan TCP bağlantısı kaynağıyla eşleşir ve bu kaynak ağ geçidi pod'dur. ipBlocks kullanarak sidecar düzeyinde trafiği engellemek için istemci IP'si yerine ağ geçidi pod IP'sini belirtin. Sidecar'da istemci IP'sine göre filtreleme yapmak için bunun yerine remoteIpBlocks kullanın.

        curl <gateway-external-ip>:80/ -I
        HTTP/1.1 200 OK
        server: istio-envoy
        content-type: text/html; charset=utf-8

remoteIpBlocks kullanarak sidecar'da bir IP'yi reddetme

  1. Aşağıdaki AuthorizationPolicy'i içeren gateway-test.yaml adlı bir dosya oluşturun:

        apiVersion: security.istio.io/v1beta1
        kind: AuthorizationPolicy
        metadata:
          name: gateway-test
          namespace: default
        spec:
          action: DENY
          rules:
            - from:
                - source:
                    remoteIpBlocks:
                      - <client-ip>  # Example: 106.11.XX.X
          selector:
            matchLabels:
              app: httpbin
  2. Yetkilendirme ilkesini dağıtın:

        kubectl apply -f gateway-test.yaml
  3. İlkeyi doğrulayın: Beklenen çıktı: Gerçek istemci IP'sini içeren X-Forwarded-For üstbilgisini değerlendirdiğinden remoteIpBlocks yapılandırması isteği engeller.

        curl <gateway-external-ip>:80/ -I
        HTTP/1.1 403 Forbidden
        content-length: 19
        content-type: text/plain
        server: istio-envoy

İstemci ile ağ geçidi arasında Katman 7 proxy bulunduğunda bir IP'yi reddetme

İstemci ile ASM ağ geçidi arasında bir veya daha fazla Katman 7 proxy (yük dengeleyici veya CDN gibi) bulunduğunda X-Forwarded-For üstbilgisi birden çok IP adresi içerir. Her proxy önceki atlamanın IP'sini ekler.

Bu senaryoda IP tabanlı erişim kontrolü için yalnızca remoteIpBlocks geçerlidir. ipBlocks alanı fiziksel eş IP'siyle eşleşir ve bu IP istemci değil Katman 7 proxy'dir.

Ağ geçidi günlüğü örneği

{
    "downstream_remote_address": "106.11.XX.X:62232",
    "x_forwarded_for": "56.5.X.X, 72.9.X.X, 98.1.X.X, 106.11.XX.X",
    "response_code": "200",
    "upstream_cluster": "outbound|8000||httpbin.default.svc.cluster.local"
}

x_forwarded_for üstbilgisi dört IP adresi içerir:

  • 56.5.X.X, 72.9.X.X, 98.1.X.X -- ASM ağ geçidine ulaşmadan önce yukarı akış Katman 7 proxy'leri tarafından ayarlanır.

  • 106.11.XX.X -- ASM ağ geçidi tarafından eklenir.

downstream_remote_address (106.11.XX.X:62232), ağ geçidine doğrudan bağlanan eşin (son Katman 7 proxy) IP'sini gösterir.

Sidecar proxy günlüğü örneği

{
    "downstream_remote_address": "106.11.XX.X:0",
    "x_forwarded_for": "56.5.X.X, 72.9.X.X, 98.1.X.X, 106.11.XX.X",
    "response_code": "200",
    "upstream_cluster": "inbound|80||"
}

x_forwarded_for değeri ağ geçidi günlüğüyle aynıdır. downstream_remote_address değeri, x_forwarded_for zincirindeki son IP'dir (sidecar düzeyinde bağlantı noktası bilgisi korunmadığından bağlantı noktası 0 değerindedir).

Ağ geçidinde X-Forwarded-For'daki son IP'yi reddetme

Varsayılan olarak (numTrustedProxies = 0), remoteIpBlocks ağ geçidi tarafından X-Forwarded-For üstbilgisine eklenen son IP adresini değerlendirir. Bu, ağ geçidine doğrudan bağlanan eşin IP'sidir.

  1. Aşağıdaki AuthorizationPolicy'i içeren gateway-test.yaml adlı bir dosya oluşturun:

        apiVersion: security.istio.io/v1beta1
        kind: AuthorizationPolicy
        metadata:
          name: gateway-test-ap-wg-gateway-test-istio-system-gateway-ingressgateway
          namespace: istio-system
        spec:
          action: DENY
          rules:
            - from:
                - source:
                    remoteIpBlocks:
                      - <last-proxy-ip>  # Example: 106.11.XX.X
          selector:
            matchLabels:
              istio: ingressgateway
  2. Yetkilendirme ilkesini dağıtın:

        kubectl apply -f gateway-test.yaml
  3. İlkeyi doğrulayın: Beklenen çıktı:

        curl <gateway-external-ip>:80/ -H 'X-Forwarded-For: 56.5.X.X, 72.9.X.X, 98.1.X.X' -I
        HTTP/1.1 403 Forbidden
        content-length: 19
        content-type: text/plain
        server: istio-envoy

X-Forwarded-For zincirindeki belirli bir IP'yi hedeflemek için numTrustedProxies kullanma

numTrustedProxies ayarı, X-Forwarded-For zincirinde remoteIpBlocks tarafından hangi IP adresinin değerlendirileceğini kontrol eder. N olarak ayarlandığında ağ geçidi kendisine en yakın N proxy'yi güvenilir olarak kabul eder ve sağdan (N+1)'inci proxy'nin IP'sini değerlendirir.

Örneğin, X-Forwarded-For: 56.5.X.X, 72.9.X.X, 98.1.X.X ve ağ geçidinin 106.11.XX.X eklemesi durumunda:

numTrustedProxies Güvenilir proxy'ler (sağdan) remoteIpBlocks tarafından değerlendirilen IP
0 (varsayılan) Yok 106.11.XX.X (son IP, ağ geçidi tarafından eklenir)
2 106.11.XX.X, 98.1.X.X 72.9.X.X (sağdan üçüncü)

Giriş ağ geçidinde numTrustedProxies ayarlama

Giriş ağ geçidi YAML dosyasının spec alanına aşağıdaki açıklamayı ekleyin. Giriş ağ geçidi yapılandırmasını düzenleme talimatları için bkz. ASM konsolunda giriş ağ geçidini yönetme.

podAnnotations:
    proxy.istio.io/config: '{"gatewayTopology" : { "numTrustedProxies": 2 } }'
Uyarı

Bu yapılandırma ağ geçidi pod'larını yeniden başlatır.

Ağ geçidi yeniden başlatıldıktan sonra etkisini doğrulayın:

curl <gateway-external-ip>:80/ -H 'X-Forwarded-For: 56.5.X.X, 72.9.X.X, 98.1.X.X' -I

Beklenen çıktı:

HTTP/1.1 200 OK
server: istio-envoy
content-type: text/html; charset=utf-8

numTrustedProxies: 2 ayarı nedeniyle remoteIpBlocks 106.11.XX.X yerine 72.9.X.X (sağdan üçüncü IP) değerini değerlendirdiğinden istek başarılı olur. 72.9.X.X reddetme listesinde olmadığından isteğe izin verilir.

numTrustedProxies ayarlandıktan sonra değerlendirilen IP'yi reddetme

numTrustedProxies 2 olarak ayarlandığında remoteIpBlocks tarafından değerlendirilen IP'yi reddeden bir ilke oluşturun:

  1. Aşağıdaki AuthorizationPolicy'i içeren gateway-test.yaml adlı bir dosya oluşturun:

        apiVersion: security.istio.io/v1beta1
        kind: AuthorizationPolicy
        metadata:
          name: gateway-test-ap-wg-gateway-test-istio-system-gateway-ingressgateway
          namespace: istio-system
        spec:
          action: DENY
          rules:
            - from:
                - source:
                    remoteIpBlocks:
                      - 72.9.X.X
          selector:
            matchLabels:
              istio: ingressgateway
  2. Yetkilendirme ilkesini dağıtın:

        kubectl apply -f gateway-test.yaml
  3. İlkeyi doğrulayın: Beklenen çıktı:

        curl <gateway-external-ip>:80/ -H 'X-Forwarded-For: 56.5.X.X, 72.9.X.X, 98.1.X.X' -I
        HTTP/1.1 403 Forbidden
        content-length: 19
        content-type: text/plain
        server: istio-envoy

İlkeyi ağ geçidi yerine sidecar proxy'ye uygulama

Ağ geçidinde yapılandırılan numTrustedProxies ayarı sidecar proxy'lere uygulanmaz. Sidecar proxy'ler varsayılan numTrustedProxies değeri olan 0 değerini kullanır; bu da remoteIpBlocks öğesinin sidecar tarafından alınan X-Forwarded-For zincirindeki son IP'yi değerlendirdiği anlamına gelir.

  1. HTTPBin sidecar'ını hedefleyen aşağıdaki AuthorizationPolicy'i içeren gateway-test.yaml adlı bir dosya oluşturun:

        apiVersion: security.istio.io/v1beta1
        kind: AuthorizationPolicy
        metadata:
          name: gateway-test
          namespace: default
        spec:
          action: DENY
          rules:
            - from:
                - source:
                    remoteIpBlocks:
                      - 72.9.X.X
          selector:
            matchLabels:
              app: httpbin
  2. Yetkilendirme ilkesini dağıtın:

        kubectl apply -f gateway-test.yaml
  3. İlkeyi doğrulayın: Beklenen çıktı: Sidecar'ın numTrustedProxies değeri 0 olduğundan remoteIpBlocks X-Forwarded-For zincirindeki son IP'yi (106.11.XX.X) değerlendirir ve istek başarılı olur. 72.9.X.X son IP olmadığından reddetme kuralı tetiklenmez. 72.9.X.X IP'sini sidecar düzeyinde reddetmek için sidecar proxy'de de numTrustedProxies ayarlayın veya remoteIpBlocks değerini sidecar'ın değerlendirdiği IP'yle (X-Forwarded-For üstbilgisindeki son IP) eşleşecek şekilde değiştirin.

        curl <gateway-external-ip>:80/ -H 'X-Forwarded-For: 56.5.X.X, 72.9.X.X, 98.1.X.X' -I
        HTTP/1.1 200 OK
        server: istio-envoy
        content-type: text/html; charset=utf-8

Sonraki adımlar

  • Giriş ağ geçidi oluşturma -- ASM giriş ağ geçidlerini yapılandırma ve yönetme.

  • ASM güvenlik ilkeleri -- AuthorizationPolicy yapılandırmasını basitleştiren ASM tarafından yönetilen güvenlik ilkeleri dahil olmak üzere ek erişim kontrol seçeneklerini keşfetme.