Bezpieczny dostęp do serwera interfejsu API przy użyciu autoryzowanych zakresów adresów IP w usłudze Azure Kubernetes Service (AKS)

W tym artykule pokazano, jak używać funkcji zakresów autoryzowanych adresów IP serwera interfejsu API, aby ograniczyć, które adresy IP i CIDR mogą mieć płaszczyznę kontroli dostępu.

Serwer interfejsu API Kubernetes jest rdzeniem płaszczyzny sterowania platformy Kubernetes i jest centralnym sposobem interakcji z klastrami i zarządzania nimi. Aby zwiększyć bezpieczeństwo klastrów i zminimalizować ryzyko ataków, zalecamy ograniczenie zakresów adresów IP, które mogą uzyskiwać dostęp do serwera interfejsu API. W tym celu można użyć funkcji autoryzowanych zakresów adresów IP serwera interfejsu API.

Zanim rozpoczniesz

  • Musisz zainstalować i skonfigurować interfejs wiersza polecenia platformy Azure w wersji 2.0.76 lub nowszej. Uruchom polecenie az --version, aby dowiedzieć się, jaka wersja jest używana. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.
  • Aby dowiedzieć się, jakie adresy IP należy uwzględnić podczas integrowania klastra usługi AKS z usługą Azure DevOps, zobacz artykuł Dozwolone adresy IP i adresy URL domeny usługi Azure DevOps.

Ograniczenia

Funkcja autoryzowanych zakresów adresów IP serwera interfejsu API ma następujące ograniczenia:

  • Funkcja autoryzowanych zakresów adresów IP serwera interfejsu API została przeniesiona z wersji zapoznawczej w październiku 2019 r. W przypadku klastrów utworzonych po przeniesieniu funkcji z wersji zapoznawczej ta funkcja jest obsługiwana tylko w module równoważenia obciążenia jednostki SKU w warstwie Standardowa . Wszystkie istniejące klastry w module równoważenia obciążenia jednostki SKU w warstwie Podstawowa z włączoną funkcją zakresów adresów IP autoryzowanych przez serwer interfejsu API będą nadal działać zgodnie z oczekiwaniami. Nie można jednak migrować tych klastrów do modułu równoważenia obciążenia jednostki SKU w warstwie Standardowa . Istniejące klastry będą nadal działać, jeśli wersja i płaszczyzna sterowania platformy Kubernetes zostaną uaktualnione.
  • Funkcja zakresów adresów IP autoryzowanych przez serwer interfejsu API nie jest obsługiwana w klastrach prywatnych.
  • W przypadku korzystania z tej funkcji z klastrami korzystającymi z publicznego adresu IP węzła pule węzłów korzystające z publicznego adresu IP węzła muszą używać prefiksów publicznych adresów IP. Prefiksy publicznych adresów IP należy dodać jako autoryzowane zakresy.

Omówienie zakresów autoryzowanych adresów IP serwera interfejsu API

Serwer interfejsu API Platformy Kubernetes uwidacznia podstawowe interfejsy API platformy Kubernetes i zapewnia interakcję z narzędziami do zarządzania, takimi jak kubectl i pulpit nawigacyjny platformy Kubernetes. Usługa AKS udostępnia płaszczyznę sterowania klastra z jedną dzierżawą z dedykowanym serwerem interfejsu API. Serwer interfejsu API jest domyślnie przypisany publiczny adres IP. Dostęp można kontrolować przy użyciu kontroli dostępu opartej na rolach platformy Kubernetes (Kubernetes RBAC) lub kontroli dostępu opartej na rolach platformy Azure.

Aby zabezpieczyć dostęp do inaczej dostępnej publicznie płaszczyzny sterowania/serwera interfejsu API usługi AKS, możesz włączyć i użyć autoryzowanych zakresów adresów IP. Te autoryzowane zakresy adresów IP zezwalają tylko zdefiniowanym zakresom adresów IP na komunikację z serwerem interfejsu API. Wszystkie żądania wysyłane do serwera interfejsu API z adresu IP, który nie jest częścią tych autoryzowanych zakresów adresów IP, są blokowane.

Tworzenie klastra usługi AKS z włączonymi autoryzowanymi zakresami adresów IP serwera interfejsu API

Ważne

Domyślnie klaster używa modułu równoważenia obciążenia jednostki SKU w warstwie Standardowa, którego można użyć do skonfigurowania bramy ruchu wychodzącego. Po włączeniu autoryzowanych zakresów adresów IP serwera interfejsu API podczas tworzenia klastra publiczny adres IP klastra jest domyślnie dozwolony poza określonymi zakresami. Jeśli określisz wartość "" lub nie określono wartości --api-server-authorized-ip-ranges, zakresy autoryzowanych adresów IP serwera interfejsu API są wyłączone. Pamiętaj, że jeśli używasz programu PowerShell, użyj polecenia --api-server-authorized-ip-ranges="" (z znakami równości), aby uniknąć problemów z analizowaniem.

Uwaga

Należy dodać te zakresy do listy dozwolonych:

  • Adres IP ruchu wychodzącego klastra (zapora, brama translatora adresów sieciowych lub inny adres, w zależności od typu ruchu wychodzącego).
  • Dowolny zakres reprezentujący sieci, z których będziesz administrować klastrem.

Górny limit liczby zakresów adresów IP, które można określić, to 200.

Propagacja reguł może potrwać do dwóch minut. Poczekaj do tego czasu podczas testowania połączenia.

Podczas tworzenia klastra z włączonymi autoryzowanymi zakresami adresów IP serwera interfejsu API można --api-server-authorized-ip-ranges podać listę autoryzowanych zakresów publicznych adresów IP. Po określeniu zakresu CIDR zacznij od pierwszego adresu IP w zakresie. Na przykład 137.117.106.90/29 jest prawidłowym zakresem, ale upewnij się, że określono pierwszy adres IP w zakresie, na przykład 137.117.106.88/29.

  • Utwórz klaster usługi AKS z autoryzowanymi zakresami adresów IP serwera interfejsu API, używając az aks create polecenia z parametrem --api-server-authorized-ip-ranges . W poniższym przykładzie tworzony jest klaster o nazwie myAKSCluster w grupie zasobów o nazwie myResourceGroup z włączonymi autoryzowanymi zakresami adresów IP serwera interfejsu API. Dozwolone zakresy adresów IP to 73.140.245.0/24:

    az aks create --resource-group myResourceGroup --name myAKSCluster --vm-set-type VirtualMachineScaleSets --load-balancer-sku standard --api-server-authorized-ip-ranges 73.140.245.0/24 --generate-ssh-keys
    

Określanie wychodzących adresów IP dla modułu równoważenia obciążenia jednostki SKU w warstwie Standardowa

Podczas tworzenia klastra z włączonymi autoryzowanymi zakresami adresów IP serwera interfejsu API można również określić wychodzące adresy IP lub prefiksy dla klastra przy użyciu --load-balancer-outbound-ips parametrów lub --load-balancer-outbound-ip-prefixes . Wszystkie adresy IP podane w parametrach są dozwolone wraz z adresami IP w parametrze --api-server-authorized-ip-ranges .

  • Utwórz klaster usługi AKS z włączonymi autoryzowanymi zakresami adresów IP serwera interfejsu API i określ wychodzące adresy IP dla modułu równoważenia obciążenia jednostki SKU w warstwie Standardowa przy użyciu parametru --load-balancer-outbound-ips . W poniższym przykładzie tworzony jest klaster o nazwie myAKSCluster w grupie zasobów o nazwie myResourceGroup z włączonymi autoryzowanymi zakresami adresów IP serwera interfejsu API oraz wychodzącymi adresami <public-ip-id-1> IP i <public-ip-id-2>:

    az aks create --resource-group myResourceGroup --name myAKSCluster --vm-set-type VirtualMachineScaleSets --load-balancer-sku standard --api-server-authorized-ip-ranges 73.140.245.0/24 --load-balancer-outbound-ips <public-ip-id-1>,<public-ip-id-2> --generate-ssh-keys
    

Zezwalaj tylko na publiczny adres IP ruchu wychodzącego modułu równoważenia obciążenia jednostki SKU w warstwie Standardowa

Po włączeniu autoryzowanych zakresów adresów IP serwera interfejsu API podczas tworzenia klastra publiczny adres IP dla modułu równoważenia obciążenia jednostki SKU w warstwie Standardowa jest również domyślnie dozwolony oprócz określonych zakresów. Aby zezwolić tylko na publiczny adres IP ruchu wychodzącego modułu równoważenia obciążenia jednostki SKU w warstwie Standardowa, podczas określania parametru należy użyć wartości 0.0.0.0/32.--api-server-authorized-ip-ranges

  • Utwórz klaster usługi AKS z włączonymi autoryzowanymi zakresami adresów IP serwera interfejsu API i zezwalaj tylko na wychodzący publiczny adres IP modułu równoważenia obciążenia jednostki SKU w warstwie Standardowa przy użyciu parametru --api-server-authorized-ip-ranges . W poniższym przykładzie tworzony jest klaster o nazwie myAKSCluster w grupie zasobów o nazwie myResourceGroup z włączonymi autoryzowanymi zakresami adresów IP serwera interfejsu API i zezwala tylko na wychodzący publiczny adres IP modułu równoważenia obciążenia jednostki SKU w warstwie Standardowa:

    az aks create --resource-group myResourceGroup --name myAKSCluster --vm-set-type VirtualMachineScaleSets --load-balancer-sku standard --api-server-authorized-ip-ranges 0.0.0.0/32 --generate-ssh-keys
    

Aktualizowanie autoryzowanych zakresów adresów IP serwera interfejsu API istniejącego klastra

  • Zaktualizuj zakresy adresów IP autoryzowanych przez serwer interfejsu API istniejącego klastra przy użyciu az aks update polecenia z parametrem --api-server-authorized-ip-ranges . Poniższy przykład aktualizuje autoryzowane zakresy adresów IP serwera interfejsu API w klastrze o nazwie myAKSCluster w grupie zasobów o nazwie myResourceGroup. Zakres adresów IP do autoryzacji to 73.140.245.0/24:

    az aks update --resource-group myResourceGroup --name myAKSCluster --api-server-authorized-ip-ranges 73.140.245.0/24
    

    Można również użyć 0.0.0.0/32 podczas określania parametru --api-server-authorized-ip-ranges , aby zezwolić tylko na publiczny adres IP modułu równoważenia obciążenia jednostki SKU w warstwie Standardowa.

Wyłączanie autoryzowanych zakresów adresów IP

  • Wyłącz autoryzowane zakresy adresów IP przy użyciu az aks update polecenia i określ pusty zakres "" parametru --api-server-authorized-ip-ranges .

    az aks update --resource-group myResourceGroup --name myAKSCluster --api-server-authorized-ip-ranges ""
    

Znajdowanie istniejących autoryzowanych zakresów adresów IP

  • Znajdź istniejące autoryzowane zakresy adresów IP przy użyciu az aks show polecenia z parametrem ustawionym --query na apiServerAccessProfile.authorizedIpRanges.

    az aks show --resource-group myResourceGroup --name myAKSCluster --query apiServerAccessProfile.authorizedIpRanges
    

Jak znaleźć mój adres IP do uwzględnienia w --api-server-authorized-ip-ranges?

Aby uzyskać dostęp do serwera interfejsu API, należy dodać maszyny programistyczne, narzędzia lub adresy IP automatyzacji do listy zatwierdzonych zakresów adresów IP usługi AKS.

Inną opcją jest skonfigurowanie serwera przesiadkowego przy użyciu niezbędnych narzędzi wewnątrz oddzielnej podsieci w sieci wirtualnej zapory. Zakłada się, że środowisko ma zaporę z odpowiednią siecią i dodano adresy IP zapory do autoryzowanych zakresów. Podobnie, jeśli wymuszono tunelowanie z podsieci usługi AKS do podsieci zapory, posiadanie serwera przesiadkowego w podsieci klastra również jest w porządku.

  1. Pobierz swój adres IP przy użyciu następującego polecenia:

    # Retrieve your IP address
    CURRENT_IP=$(dig +short "myip.opendns.com" "@resolver1.opendns.com")
    
  2. Dodaj swój adres IP do listy zatwierdzonych przy użyciu interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell:

    # Add to AKS approved list using Azure CLI
    az aks update --resource-group $RG --name $AKSNAME --api-server-authorized-ip-ranges $CURRENT_IP/24,73.140.245.0/24
    
    # Add to AKS approved list using Azure PowerShell
    Set-AzAksCluster -ResourceGroupName $RG -Name $AKSNAME -ApiServerAccessAuthorizedIpRange '$CURRENT_IP/24,73.140.245.0/24'
    

Uwaga

W powyższym przykładzie dodano kolejny adres IP do zatwierdzonych zakresów. Należy pamiętać, że nadal zawiera adres IP z sekcji Aktualizowanie autoryzowanych zakresów adresów IP serwera interfejsu API klastra. Jeśli nie dołączysz istniejącego adresu IP, to polecenie zastąpi je nowym, zamiast dodawać go do autoryzowanych zakresów. Aby wyłączyć autoryzowane zakresy adresów IP, użyj az aks update i określ pusty zakres "".

Inną opcją jest użycie następującego polecenia w systemach Windows, aby uzyskać publiczny adres IPv4, lub możesz wykonać kroki opisane w temacie Znajdowanie adresu IP.

Invoke-RestMethod http://ipinfo.io/json | Select -exp ip

Ten adres można również znaleźć, wyszukując mój adres IP w przeglądarce internetowej.

Następne kroki

W tym artykule włączono autoryzowane zakresy adresów IP serwera interfejsu API. Takie podejście jest jedną z części sposobu bezpiecznego uruchamiania klastra usługi AKS. Aby uzyskać więcej informacji, zobacz Pojęcia dotyczące zabezpieczeń aplikacji i klastrów w usłudze AKS oraz Najlepsze rozwiązania dotyczące zabezpieczeń i uaktualnień klastra w usłudze AKS.