Udostępnij za pośrednictwem


Zarządzanie protokołem SSH na potrzeby bezpiecznego dostępu do węzłów usługi Azure Kubernetes Service (AKS)

W tym artykule opisano sposób konfigurowania kluczy SSH (wersja zapoznawcza) w klastrach lub pulach węzłów usługi AKS podczas początkowego wdrażania lub w późniejszym czasie.

Usługa AKS obsługuje następujące opcje konfiguracji do zarządzania kluczami SSH w węzłach klastra:

  • Tworzenie klastra przy użyciu kluczy SSH
  • Aktualizowanie kluczy SSH w istniejącym klastrze usługi AKS
  • Wyłączanie i włączanie usługi SSH

Ważne

Funkcje usługi AKS w wersji zapoznawczej są dostępne na zasadzie samoobsługi. Wersje zapoznawcze są udostępniane w wersji "as is" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze usługi AKS są częściowo objęte pomocą techniczną dla klientów. W związku z tym te funkcje nie są przeznaczone do użytku produkcyjnego. Aby uzyskać więcej informacji, zobacz następujące artykuły pomocy technicznej:

Zanim rozpoczniesz

  • Do korzystania z aktualizacji potrzebna jest aks-preview wersja 0.5.116 lub nowsza.
  • Aby użyć opcji Wyłącz, potrzebna jest aks-preview wersja 1.0.0b6 lub nowsza.
  • Funkcja Tworzenie i aktualizowanie protokołu SSH obsługuje pule węzłów systemów Linux, Windows i Azure Linux w istniejących klastrach.
  • Funkcja Wyłącz protokół SSH nie jest obsługiwana w tej wersji zapoznawczej w pulach węzłów z systemem operacyjnym Windows Server.

Instalowanie rozszerzenia interfejsu wiersza polecenia platformy aks-preview Azure

  1. Zainstaluj rozszerzenie aks-preview przy użyciu az extension add polecenia .

    az extension add --name aks-preview
    
  2. Przeprowadź aktualizację do najnowszej wersji rozszerzenia przy użyciu az extension update polecenia .

    az extension update --name aks-preview
    

Rejestrowanie flagi DisableSSHPreview funkcji

Aby użyć funkcji Wyłącz protokół SSH, wykonaj następujące kroki, aby zarejestrować ją i włączyć w ramach subskrypcji.

  1. Zarejestruj flagę DisableSSHPreview funkcji przy użyciu az feature register polecenia .

    az feature register --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"
    

    Wyświetlenie stanu Zarejestrowane trwa kilka minut.

  2. Sprawdź stan rejestracji przy użyciu az feature show polecenia .

    az feature show --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"
    
  3. Gdy stan będzie odzwierciedlał wartość Zarejestrowano, odśwież rejestrację dostawcy zasobów Microsoft.ContainerService przy użyciu az provider register polecenia .

    az provider register --namespace Microsoft.ContainerService
    

Tworzenie klastra usługi AKS przy użyciu kluczy SSH

Użyj polecenia az aks create, aby wdrożyć klaster usługi AKS przy użyciu klucza publicznego SSH. Klucz lub plik klucza można określić przy użyciu argumentu --ssh-key-value .

Parametr SSH opis Domyślna wartość
--generate-ssh-key Jeśli nie masz własnych kluczy SSH, określ wartość --generate-ssh-key. Interfejs wiersza polecenia platformy Azure automatycznie generuje zestaw kluczy SSH i zapisuje je w katalogu ~/.ssh/domyślnym .
--ssh-key-value Ścieżka klucza publicznego lub zawartość klucza do zainstalowania na maszynach wirtualnych węzła na potrzeby dostępu za pomocą protokołu SSH. Na przykład ssh-rsa AAAAB...snip...UcyupgH azureuser@linuxvm. ~/.ssh/id_rsa.pub
--no-ssh-key Jeśli nie potrzebujesz kluczy SSH, określ ten argument. Jednak usługa AKS automatycznie generuje zestaw kluczy SSH, ponieważ zależność zasobu maszyny wirtualnej platformy Azure nie obsługuje pustego pliku kluczy SSH. W związku z tym klucze nie są zwracane i nie można ich używać do SSH na maszynach wirtualnych węzłów. Klucz prywatny jest odrzucany i nie jest zapisywany.

Uwaga

Jeśli nie określono żadnych parametrów, interfejs wiersza polecenia platformy Azure domyślnie odwołuje się do kluczy SSH przechowywanych w ~/.ssh/id_rsa.pub pliku. Jeśli klucze nie zostały znalezione, polecenie zwróci komunikat An RSA key file or key value must be supplied to SSH Key Value.

Poniżej przedstawiono przykłady tego polecenia:

  • Aby utworzyć klaster i użyć domyślnych wygenerowanych kluczy SSH:

    az aks create --name myAKSCluster --resource-group MyResourceGroup --generate-ssh-key
    
  • Aby określić plik klucza publicznego SSH, dołącz --ssh-key-value argument:

    az aks create --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value ~/.ssh/id_rsa.pub
    

Aktualizowanie klucza publicznego SSH w istniejącym klastrze usługi AKS

az aks update Użyj polecenia , aby zaktualizować klucz publiczny SSH (wersja zapoznawcza) w klastrze. Ta operacja aktualizuje klucz we wszystkich pulach węzłów. Klucz lub plik klucza można określić przy użyciu argumentu --ssh-key-value .

Uwaga

Aktualizowanie kluczy SSH jest obsługiwane w zestawach skalowania maszyn wirtualnych platformy Azure za pomocą klastrów usługi AKS.

Poniżej przedstawiono przykłady tego polecenia:

  • Aby określić nową wartość klucza publicznego SSH, dołącz --ssh-key-value argument:

    az aks update --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value 'ssh-rsa AAAAB3Nza-xxx'
    
  • Aby określić plik klucza publicznego SSH, określ go za pomocą argumentu --ssh-key-value :

    az aks update --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value ~/.ssh/id_rsa.pub
    

Ważne

Po zaktualizowaniu klucza SSH usługa AKS nie aktualizuje automatycznie puli węzłów. W dowolnym momencie możesz wykonać operację aktualizacji puli węzłów. Operacja aktualizacji kluczy SSH ma zastosowanie po zakończeniu aktualizacji obrazu węzła.

Omówienie wyłączania protokołu SSH

Aby zwiększyć bezpieczeństwo i obsługiwać wymagania lub strategię zabezpieczeń firmy, usługa AKS obsługuje wyłączanie protokołu SSH (wersja zapoznawcza) zarówno w klastrze, jak i na poziomie puli węzłów. Opcja Wyłącz protokół SSH wprowadza uproszczone podejście w porównaniu z jedynym obsługiwanym rozwiązaniem, które wymaga skonfigurowania reguł sieciowej grupy zabezpieczeń w podsieci usługi AKS/węźle karty sieciowej.

Po wyłączeniu protokołu SSH w czasie tworzenia klastra następuje jego działanie po utworzeniu klastra. Jednak po wyłączeniu protokołu SSH w istniejącej puli klastrów lub węzłów usługa AKS nie wyłącza automatycznie protokołu SSH. W dowolnym momencie możesz wykonać operację uaktualniania puli węzłów. Operacja wyłączania/włączania kluczy SSH jest wykonywana po zakończeniu aktualizacji obrazu węzła.

Uwaga

Po wyłączeniu protokołu SSH na poziomie klastra ma zastosowanie do wszystkich istniejących pul węzłów. Wszystkie pule węzłów utworzone po tej operacji będą domyślnie włączone za pomocą protokołu SSH i należy ponownie uruchomić te polecenia, aby je wyłączyć.

Parametr SSH opis
disabled Usługa SSH jest wyłączona.
localuser Usługa SSH jest włączona, a użytkownicy z kluczami SSH mogą bezpiecznie uzyskać dostęp do węzła.

Uwaga

Węzeł debugowania kubectl nadal działa po wyłączeniu protokołu SSH, ponieważ nie zależy od usługi SSH.

Wyłączanie protokołu SSH w nowym wdrożeniu klastra

Domyślnie usługa SSH w węzłach klastra usługi AKS jest otwarta dla wszystkich użytkowników i zasobników uruchomionych w klastrze. Możesz zapobiec bezpośredniemu dostępowi SSH z dowolnej sieci do węzłów klastra, aby ograniczyć wektor ataku, jeśli zabezpieczenia kontenera w zasobniku staną się zagrożone. az aks create Użyj polecenia , aby utworzyć nowy klaster i dołączyć --ssh-access disabled argument, aby wyłączyć protokół SSH (wersja zapoznawcza) we wszystkich pulach węzłów podczas tworzenia klastra.

Ważne

Po wyłączeniu usługi SSH nie można połączyć się z klastrem za pomocą protokołu SSH w celu wykonywania zadań administracyjnych lub rozwiązywania problemów.

az aks create --resource-group myResourceGroup --name myManagedCluster --ssh-access disabled

Po kilku minutach polecenie zostanie wykonane i zwróci informacje o klastrze w formacie JSON. Poniższy przykład przypomina dane wyjściowe i wyniki związane z wyłączaniem protokołu SSH:

"securityProfile": {
"sshAccess": "Disabled"
},

Wyłączanie protokołu SSH w istniejącym klastrze

az aks update Użyj polecenia , aby zaktualizować istniejący klaster i dołączyć --ssh-access disabled argument, aby wyłączyć protokół SSH (wersja zapoznawcza) we wszystkich pulach węzłów w klastrze.

az aks update --resource-group myResourceGroup --name myManagedCluster --ssh-access disabled

Po kilku minutach polecenie zostanie wykonane i zwróci informacje o klastrze w formacie JSON. Poniższy przykład przypomina dane wyjściowe i wyniki związane z wyłączaniem protokołu SSH:

"securityProfile": {
"sshAccess": "Disabled"
},

Aby zmiana weszła w życie, należy odtworzyć wszystkie pule węzłów przy użyciu az aks nodepool upgrade polecenia .

az aks nodepool upgrade --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --node-image-only

Ważne

Podczas tej operacji wszystkie wystąpienia zestawu skalowania maszyn wirtualnych są uaktualniane i odtwarzane w celu użycia nowej konfiguracji SSH.

Wyłączanie protokołu SSH dla nowej puli węzłów

az aks nodepool add Użyj polecenia , aby dodać pulę węzłów i dołączyć --ssh-access disabled argument, aby wyłączyć protokół SSH podczas tworzenia puli węzłów.

az aks nodepool add --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --ssh-access disabled  

Po kilku minutach polecenie zostanie zakończone i zwróci informacje w formacie JSON dotyczące klastra wskazującego , że pula mynodepool została pomyślnie utworzona. Poniższy przykład przypomina dane wyjściowe i wyniki związane z wyłączaniem protokołu SSH:

"securityProfile": {
"sshAccess": "Disabled"
},

Wyłączanie protokołu SSH dla istniejącej puli węzłów

Użyj argumentu [az aks nodepool update][az-aks-nodepool-update] command with the --ssh-access disabled", aby wyłączyć protokół SSH (wersja zapoznawcza) w istniejącej puli węzłów.

az aks nodepool update --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --ssh-access disabled

Po kilku minutach polecenie zostanie zakończone i zwróci informacje w formacie JSON dotyczące klastra wskazującego , że pula mynodepool została pomyślnie utworzona. Poniższy przykład przypomina dane wyjściowe i wyniki związane z wyłączaniem protokołu SSH:

"securityProfile": {
"sshAccess": "Disabled"
},

Aby zmiana weszła w życie, należy odtworzyć pulę węzłów przy użyciu az aks nodepool upgrade polecenia .

az aks nodepool upgrade --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --node-image-only

Ponowne włączanie protokołu SSH w istniejącym klastrze

az aks update Użyj polecenia , aby zaktualizować istniejący klaster i dołączyć --ssh-access localuser argument umożliwiający ponowne włączenie protokołu SSH (wersja zapoznawcza) we wszystkich pulach węzłów w klastrze.

az aks update --resource-group myResourceGroup --name myManagedCluster --ssh-access localuser

Podczas wykonywania procesu zwracany jest następujący komunikat:

Only after all the nodes are reimaged, does the disable/enable SSH Access operation take effect."

Po ponownym włączeniu protokołu SSH węzły nie będą automatycznie odtwarzane. W dowolnym momencie możesz wykonać operację reimage.

Ważne

Podczas tej operacji wszystkie wystąpienia zestawu skalowania maszyn wirtualnych są uaktualniane i odtwarzane w celu użycia nowego klucza publicznego SSH.

Ponowne włączanie protokołu SSH dla określonej puli węzłów

az aks update Użyj polecenia , aby zaktualizować określoną pulę węzłów i dołączyć --ssh-access localuser argument umożliwiający ponowne włączenie protokołu SSH (wersja zapoznawcza) w tej puli węzłów w klastrze. W poniższym przykładzie pula nodepool1 jest pulą węzłów docelowych.

az aks nodepool update --cluster-name myManagedCluster --name nodepool1 --resource-group myResourceGroup --ssh-access localuser 

Po wykonaniu procesu zostanie zwrócony następujący komunikat:

Only after all the nodes are reimaged, does the disable/enable SSH Access operation take effect.

Ważne

Podczas tej operacji wszystkie wystąpienia zestawu skalowania maszyn wirtualnych są uaktualniane i odtwarzane w celu użycia nowego klucza publicznego SSH.

Stan usługi SSH

Wykonaj następujące kroki, aby użyć powłoki węzła w jednym węźle i sprawdzić stan usługi SSH przy użyciu polecenia systemctl.

  1. Pobierz standardową powłokę bash, uruchamiając polecenie .kubectl node-shell <node>

    kubectl node-shell aks-nodepool1-20785627-vmss000001
    
  2. Uruchom polecenie , systemctl aby sprawdzić stan usługi SSH.

    systemctl status ssh
    

Jeśli protokół SSH jest wyłączony, następujące przykładowe dane wyjściowe zawierają wyniki:

ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; disabled; vendor preset: enabled)
     Active: inactive (dead) since Wed 2024-01-03 15:36:57 UTC; 20min ago

Jeśli protokół SSH jest włączony, następujące przykładowe dane wyjściowe zawierają wyniki:

ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2024-01-03 15:40:20 UTC; 19min ago

Następne kroki

Aby ułatwić rozwiązywanie wszelkich problemów z łącznością SSH z węzłami klastrów, możesz wyświetlić dzienniki kubelet lub wyświetlić dzienniki węzłów głównych platformy Kubernetes.