Sdílet prostřednictvím


Správa SSH pro zabezpečený přístup k uzlům Azure Kubernetes Service (AKS)

Tento článek popisuje, jak nakonfigurovat přístup SSH (Preview) v clusterech nebo fondech uzlů AKS během počátečního nasazení nebo později.

AKS podporuje následující možnosti konfigurace pro správu přístupu SSH na uzlech clusteru:

  • Zakázáno SSH: Úplné zakázání přístupu SSH k uzlům clusteru kvůli lepšímu zabezpečení
  • SSH na základě ID entra: Pro ověřování SSH použijte přihlašovací údaje Microsoft Entra ID. Výhody použití SSH založeného na Entra ID:
    • Centralizovaná správa identit: Použití existujících identit ID Entra pro přístup k uzlům clusteru
    • Bez správy klíčů SSH: Eliminuje potřebu vygenerovat, distribuovat a otáčet klíče SSH.
    • Rozšířené zabezpečení: Využití funkcí zabezpečení Entra ID, jako je podmíněný přístup a vícefaktorové ověřování
    • Audit a dodržování předpisů: Centralizované protokolování událostí přístupu prostřednictvím protokolů ID Entra
    • Přístup za běhu: Kombinace s Azure RBAC pro podrobné řízení přístupu
  • Místní uživatel SSH: Tradiční ověřování na základě klíče SSH pro přístup k uzlu

Důležité

Funkce AKS ve verzi Preview jsou k dispozici na samoobslužné bázi a vyžadují aktivní přihlášení. Verze Preview jsou poskytovány "tak, jak jsou" a "jak jsou dostupné," a jsou vyloučeny ze smluv o úrovni služeb a omezené záruky. Verze Preview AKS jsou částečně pokryty zákaznickou podporou na základě maximálního úsilí. Proto tyto funkce nejsou určené pro produkční použití. Další informace najdete v následujících článcích podpory:

Důležité

Funkce AKS ve verzi Preview jsou k dispozici na samoobslužné bázi a vyžadují aktivní přihlášení. Verze Preview jsou poskytovány "tak, jak jsou" a "jak jsou dostupné," a jsou vyloučeny ze smluv o úrovni služeb a omezené záruky. Verze Preview AKS jsou částečně pokryty zákaznickou podporou na základě maximálního úsilí. Proto tyto funkce nejsou určené pro produkční použití. Další informace najdete v následujících článcích podpory:

Požadavky

  • Tento článek vyžaduje verzi 2.61.0 nebo novější azure CLI. Pokud používáte Azure Cloud Shell, je tam už nainstalovaná nejnovější verze.

  • Potřebujete aks-preview verzi 9.0.0b1 nebo novější.

    • Pokud ještě nemáte rozšíření aks-preview, nainstalujte ho pomocí příkazu az extension add:
      az extension add --name aks-preview
      
    • Pokud už máte rozšíření aks-preview, aktualizujte ho pomocí příkazu az extension update, abyste měli nejnovější verzi.
      az extension update --name aks-preview
      
  • Pomocí příkazu DisableSSHPreview zaregistrujte příznak funkce az feature register.

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

    Zobrazení stavu Zaregistrované trvá několik minut.

  • Pomocí příkazu ověřte stav az feature show registrace.

    az feature show --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"
    
  • Jakmile se stav projeví jako zaregistrovaný, aktualizujte registraci poskytovatele prostředků Microsoft.ContainerService pomocí az provider register příkazu.

    az provider register --namespace Microsoft.ContainerService
    
  • Tento článek vyžaduje verzi 2.73.0 nebo novější azure CLI. Pokud používáte Azure Cloud Shell, je tam už nainstalovaná nejnovější verze.

  • Pro Entra ID SSH potřebujete aks-preview verzi 19.0.0b7 nebo novější.

    • Pokud ještě nemáte rozšíření aks-preview, nainstalujte ho pomocí příkazu az extension add:
      az extension add --name aks-preview
      
    • Pokud už máte rozšíření aks-preview, aktualizujte ho pomocí příkazu az extension update, abyste měli nejnovější verzi.
      az extension update --name aks-preview
      
  • Odpovídající oprávnění Azure RBAC pro přístup k uzlům:

    • Povinná akce: Microsoft.Compute/virtualMachineScaleSets/*/read – čtení informací o škálovacích sadách virtuálních počítačů
  • Pomocí příkazu EntraIdSSHPreview zaregistrujte příznak funkce az feature register.

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

    Zobrazení stavu Zaregistrované trvá několik minut.

  • Pomocí příkazu ověřte stav az feature show registrace.

    az feature show --namespace "Microsoft.ContainerService" --name "EntraIdSSHPreview"
    
  • Jakmile se stav projeví jako zaregistrovaný, aktualizujte registraci poskytovatele prostředků Microsoft.ContainerService pomocí az provider register příkazu.

    az provider register --namespace Microsoft.ContainerService
    
  • Tento článek vyžaduje verzi 2.61.0 nebo novější azure CLI. Pokud používáte Azure Cloud Shell, je tam už nainstalovaná nejnovější verze.
  • Aby byla aktualizována metoda přístupu SSH na uzlové fondy, potřebujete verzi 9.0.0b1 nebo novější aks-preview.
    • Pokud ještě nemáte rozšíření aks-preview, nainstalujte ho pomocí příkazu az extension add:
      az extension add --name aks-preview
      
    • Pokud už máte rozšíření aks-preview, aktualizujte ho pomocí příkazu az extension update, abyste měli nejnovější verzi.
      az extension update --name aks-preview
      

Nastavení proměnných prostředí

Nastavte následující proměnné prostředí pro vaši skupinu prostředků, název clusteru a umístění:

export RESOURCE_GROUP="<your-resource-group-name>"
export CLUSTER_NAME="<your-cluster-name>"
export LOCATION="<your-azure-region>"

Omezení

  • Entra ID SSH k uzlům ještě není k dispozici pro fond uzlů Windows.
  • Automatické používání Entra ID SSH pro uzly není podporováno pro AKS z důvodu uzamčení skupiny prostředků uzlu, které brání přiřazení rolí.

Konfigurace přístupu SSH

Pokud chcete zlepšit zabezpečení a podporovat požadavky nebo strategii podnikového zabezpečení, AKS podporuje zakázání SSH v clusteru i na úrovni fondu uzlů. Zákaz SSH představuje zjednodušený přístup v porovnání s konfigurací pravidel skupiny zabezpečení sítě na síťové kartě síťového rozhraní (NIC) podsítě nebo uzlu AKS. Zakázání SSH podporuje pouze fondy uzlů škálovacích sad virtuálních počítačů.

Když při vytváření clusteru zakážete SSH, projeví se po vytvoření clusteru. Pokud ale zakážete SSH v existujícím clusteru nebo fondu uzlů, AKS automaticky nezakáže SSH. Kdykoli se můžete rozhodnout provést operaci upgradování poolu uzlů. Operace zakázání nebo povolení SSH se projeví po dokončení aktualizace obrazu uzlu.

Poznámka:

Když na úrovni clusteru zakážete SSH, platí to pro všechny existující fondy uzlů. Všechny fondy uzlů vytvořené po této operaci budou mít ve výchozím nastavení povolený SSH a abyste je mohli zakázat, budete muset tyto příkazy spustit znovu.

Poznámka:

Ladicí uzel kubectl bude fungovat i po zakázání protokolu SSH, protože nezávisí na službě SSH.

Vytvoření skupiny zdrojů

Vytvořte skupinu prostředků pomocí příkazu az group create.

az group create --name $RESOURCE_GROUP --location $LOCATION

Zakázání SSH v novém nasazení clusteru

Ve výchozím nastavení je služba SSH na uzlech clusteru AKS otevřená všem uživatelům a podům spuštěným v clusteru. Pokud dojde k ohrožení kontejneru v podu, můžete zabránit přímému přístupu přes SSH z libovolné sítě k uzlům clusteru, abyste omezili vektor útoku.

az aks create Pomocí příkazu vytvořte nový cluster a zahrňte --ssh-access disabled argument, který zakáže SSH (Preview) ve všech fondech uzlů během vytváření clusteru.

Důležité

Po zakázání služby SSH se nemůžete připojit do clusteru pomocí SSH, abyste mohli provádět správu nebo řešit problémy.

Poznámka:

V nově vytvořeném clusteru bude zakázáno SSH, což ovlivní pouze první fond systémových uzlů. Všechny ostatní fondy uzlů je potřeba nakonfigurovat na úrovni fondu uzlů.

az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --ssh-access disabled

Po několika minutách se příkaz dokončí a vrátí informace o clusteru ve formátu JSON. Následující příklad se podobá výstupu a výsledkům souvisejícím se zákazem SSH:

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

Zakázání SSH pro nový fond uzlů

az aks nodepool add Pomocí příkazu přidejte fond uzlů a zahrňte --ssh-access disabled argument, který zakáže SSH během vytváření fondu uzlů.

az aks nodepool add \
    --cluster-name $CLUSTER_NAME \
    --name mynodepool \
    --resource-group $RESOURCE_GROUP \
    --ssh-access disabled

Po několika minutách se příkaz dokončí a vrátí informace o clusteru ve formátu JSON, které ukazují, že mynodepool byl úspěšně vytvořen. Následující příklad se podobá výstupu a výsledkům souvisejícím se zákazem SSH:

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

Zakázání SSH pro existující fond uzlů

Důležité

Funkce AKS ve verzi Preview jsou k dispozici na samoobslužné bázi a vyžadují aktivní přihlášení. Verze Preview jsou poskytovány "tak, jak jsou" a "jak jsou dostupné," a jsou vyloučeny ze smluv o úrovni služeb a omezené záruky. Verze Preview AKS jsou částečně pokryty zákaznickou podporou na základě maximálního úsilí. Proto tyto funkce nejsou určené pro produkční použití. Další informace najdete v následujících článcích podpory:

az aks nodepool update Pomocí příkazu s argumentem --ssh-access disabled zakažte SSH (Preview) ve stávajícím fondu uzlů.

az aks nodepool update \
    --cluster-name $CLUSTER_NAME \
    --name mynodepool \
    --resource-group $RESOURCE_GROUP \
    --ssh-access disabled

Po několika minutách se příkaz dokončí a vrátí informace o clusteru ve formátu JSON, což znamená, že mynodepool byl úspěšně aktualizován. Následující příklad se podobá výstupu a výsledkům souvisejícím se zákazem SSH:

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

Aby se změna projevila, musíte fond uzlů znovu vytvořit pomocí az aks nodepool upgrade příkazu.

az aks nodepool upgrade \
    --cluster-name $CLUSTER_NAME \
    --name mynodepool \
    --resource-group $RESOURCE_GROUP \
    --node-image-only

Důležité

Pokud chcete zakázat SSH v existujícím clusteru, musíte zakázat SSH pro každý fond uzlů v tomto clusteru.

Opětovné povolení přístupu SSH

Pokud chcete znovu povolit přístup SSH ve fondu uzlů, aktualizujte fond uzlů ( --ssh-access localuser pro tradiční přístup založený na klíči SSH) nebo --ssh-access entraid (pro přístup založený na id Entra). Podrobné pokyny najdete v příslušných částech.

Cluster AKS můžete nakonfigurovat tak, aby pro ověřování SSH na uzlech clusteru používal Microsoft Entra ID (dříve Azure AD). Tím se eliminuje nutnost spravovat klíče SSH a umožňuje bezpečně přistupovat k uzlům pomocí přihlašovacích údajů k ID Entra.

Vytvoření skupiny zdrojů

Vytvořte skupinu prostředků pomocí příkazu az group create.

az group create --name $RESOURCE_GROUP --location $LOCATION

Povolení SSH založeného na Entra ID v novém clusteru

az aks create Použijte příkaz s argumentem --ssh-access entraid pro povolení ověřování SSH pomocí Entra ID během vytváření clusteru.

az aks create \
    --resource-group $RESOURCE_GROUP \
    --name $CLUSTER_NAME \
    --ssh-access entraid

Po několika minutách se příkaz dokončí a vrátí informace o clusteru ve formátu JSON. Následující příklad se podobá výstupu:

"securityProfile": {
  "sshAccess": "EntraID"
},

Povolení SSH založeného na ID Entra pro nový fond uzlů

Pomocí příkazu az aks nodepool add s argumentem --ssh-access entraid povolte SSH na základě Entra ID při vytváření fondu uzlů.

az aks nodepool add \
    --cluster-name $CLUSTER_NAME \
    --name mynodepool \
    --resource-group $RESOURCE_GROUP \
    --ssh-access entraid

Po několika minutách se příkaz dokončí a vrátí informace ve formátu JSON, které ukazují, že mynodepool byl úspěšně vytvořen pomocí SSH na základě Entra ID. Následující příklad se podobá výstupu:

"securityProfile": {
  "sshAccess": "EntraID"
},

Povolení protokolu SSH založeného na ID entra pro existující fond uzlů

az aks nodepool update Použijte příkaz s argumentem --ssh-access entraid k povolení SSH založeného na Entra ID ve stávajícím fondu uzlů.

az aks nodepool update \
    --cluster-name $CLUSTER_NAME \
    --name mynodepool \
    --resource-group $RESOURCE_GROUP \
    --ssh-access entraid

Po několika minutách se příkaz dokončí a vrátí informace ve formátu JSON, které indikují úspěšné aktualizace mynodepoolu pomocí SSH založeného na Id Entra. Následující příklad se podobá výstupu:

"securityProfile": {
  "sshAccess": "EntraID"
},

Aby se změna projevila, musíte fond uzlů znovu vytvořit pomocí az aks nodepool upgrade příkazu.

az aks nodepool upgrade \
    --cluster-name $CLUSTER_NAME \
    --name mynodepool \
    --resource-group $RESOURCE_GROUP \
    --node-image-only

Důležité

Pokud chcete povolit SSH založené na Entra ID v existujícím clusteru, musíte ho povolit pro každý fond uzlů jednotlivě.

Přístup SSH místního uživatele používá tradiční ověřování na základě klíčů SSH. Toto je výchozí metoda přístupu SSH pro clustery AKS.

Vytvoření skupiny zdrojů

Vytvořte skupinu prostředků pomocí příkazu az group create.

az group create --name $RESOURCE_GROUP --location $LOCATION

Vytvoření clusteru AKS s klíči SSH

Pomocí příkazu az aks create nasaďte cluster AKS s veřejným klíčem SSH. Pomocí argumentu --ssh-key-value můžete zadat klíč nebo soubor klíče nebo explicitně --ssh-access localuser nastavit přístup přes SSH místního uživatele.

Parametr SSH Popis Výchozí hodnota
--generate-ssh-key Pokud nemáte vlastní klíče SSH, zadejte --generate-ssh-key. Azure CLI automaticky vygeneruje sadu klíčů SSH a uloží je do výchozího adresáře ~/.ssh/.
--ssh-key-value Cesta k veřejnému klíči nebo obsah klíče, které se mají nainstalovat na virtuální počítače uzlů pro přístup přes SSH. Například ssh-rsa AAAAB...snip...UcyupgH azureuser@linuxvm. ~/.ssh/id_rsa.pub
--ssh-access localuser Explicitně povolte přístup SSH místního uživatele s ověřováním na základě klíčů.
--no-ssh-key Pokud nepotřebujete klíče SSH, zadejte tento argument. AKS ale automaticky vygeneruje sadu klíčů SSH, protože závislost prostředků virtuálního počítače Azure nepodporuje prázdný soubor klíčů SSH. V důsledku toho se klíče nevrátí a nejde je použít k připojení SSH k virtuálním počítačům uzlů. Privátní klíč je odstraněn a není uložen.

Poznámka:

Pokud nejsou zadány žádné parametry, Azure CLI ve výchozím nastavení odkazuje na klíče SSH uložené v ~/.ssh/id_rsa.pub souboru. Pokud klíče nenajdete, příkaz vrátí zprávu An RSA key file or key value must be supplied to SSH Key Value.

Příklady:

  • Vytvoření clusteru a použití výchozích vygenerovaných klíčů SSH:

    az aks create --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --generate-ssh-key
    
  • Zadání souboru veřejného klíče SSH:

    az aks create --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --ssh-key-value ~/.ssh/id_rsa.pub
    
  • Explicitní povolení přístupu SSH místního uživatele:

    az aks create --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --ssh-access localuser --generate-ssh-key
    

Povolení SSH místního uživatele pro nový fond uzlů

az aks nodepool add Pomocí příkazu s argumentem --ssh-access localuser povolte při vytváření fondu uzlů místní uživatelské SSH.

az aks nodepool add \
    --cluster-name $CLUSTER_NAME \
    --name mynodepool \
    --resource-group $RESOURCE_GROUP \
    --ssh-access localuser

Povolit SSH místního uživatele pro existující uzlový fond

Důležité

Funkce AKS ve verzi Preview jsou k dispozici na samoobslužné bázi a vyžadují aktivní přihlášení. Verze Preview jsou poskytovány "tak, jak jsou" a "jak jsou dostupné," a jsou vyloučeny ze smluv o úrovni služeb a omezené záruky. Verze Preview AKS jsou částečně pokryty zákaznickou podporou na základě maximálního úsilí. Proto tyto funkce nejsou určené pro produkční použití. Další informace najdete v následujících článcích podpory:

Použijte příkaz az aks nodepool update s argumentem --ssh-access localuser ke spuštění SSH místního uživatele na stávajícím fondu uzlů.

az aks nodepool update \
    --cluster-name $CLUSTER_NAME \
    --name mynodepool \
    --resource-group $RESOURCE_GROUP \
    --ssh-access localuser

Důležité

Aby se změna projevila, musíte fond uzlů znovu vytvořit pomocí az aks nodepool upgrade příkazu.

az aks nodepool upgrade \
    --cluster-name $CLUSTER_NAME \
    --name mynodepool \
    --resource-group $RESOURCE_GROUP \
    --node-image-only

Aktualizace veřejného klíče SSH v existujícím clusteru AKS

az aks update Pomocí příkazu aktualizujte veřejný klíč SSH (Preview) ve vašem clusteru. Tato operace aktualizuje klíč ve všech fondech uzlů. Pomocí argumentu --ssh-key-value můžete zadat klíč nebo soubor klíče.

Poznámka:

Aktualizace klíčů SSH se podporuje ve škálovacích sadách virtuálních počítačů Azure s clustery AKS.

Příklady:

  • Zadání nové hodnoty veřejného klíče SSH:

    az aks update --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --ssh-key-value 'ssh-rsa AAAAB3Nza-xxx'
    
  • Zadání souboru veřejného klíče SSH:

    az aks update --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --ssh-key-value ~/.ssh/id_rsa.pub
    

Důležité

Po aktualizaci klíče SSH se AKS automaticky neaktualizuje fond uzlů. Kdykoli se můžete rozhodnout provést operaci upgradu nodového poolu. Operace aktualizace klíčů SSH se projeví po dokončení aktualizace image uzlu. U clusterů s povoleným automatickým zřizováním uzlů je možné aktualizaci image uzlu provést použitím nového popisku u vlastního prostředku Kubernetes NodePool.

Ověření stavu služby SSH

Po zakázání protokolu SSH můžete ověřit, že je služba SSH na uzlech clusteru neaktivní.

Pomocí příkazu Škálovací sada az vmss run-command invoke virtuálních počítačů zkontrolujte stav služby SSH.

az vmss run-command invoke --resource-group <node-resource-group> --name <vmss-name> --command-id RunShellScript --instance-id 0 --scripts "systemctl status ssh"

Následující ukázkový výstup ukazuje očekávaný výsledek při zakázání SSH:

{
  "value": [
    {
      "code": "ProvisioningState/succeeded",
      "displayStatus": "Provisioning succeeded",
      "level": "Info",
      "message": "Enable succeeded: \n[stdout]\n○ ssh.service - OpenBSD Secure Shell server\n     Loaded: loaded (/lib/systemd/system/ssh.service; disabled; vendor preset: enabled)\n     Active: inactive (dead) since Wed 2024-01-03 15:36:53 UTC; 25min ago\n..."
    }
  ]
}

Vyhledejte slovo Aktivní a ověřte, že je Active: inactive (dead)jeho hodnota , což potvrzuje, že je na uzlu zakázaný protokol SSH.

Po povolení protokolu SSH založeného na ID entra můžete ověřit, že je služba SSH aktivní a nakonfigurovaná pro ověřování Entra ID na uzlech clusteru.

Pomocí příkazu Škálovací sada az vmss run-command invoke virtuálních počítačů zkontrolujte stav služby SSH.

az vmss run-command invoke --resource-group <node-resource-group> --name <vmss-name> --command-id RunShellScript --instance-id 0 --scripts "systemctl status ssh"

Následující ukázkový výstup ukazuje očekávaný výsledek, když je povolený SSH:

{
  "value": [
    {
      "code": "ProvisioningState/succeeded",
      "displayStatus": "Provisioning succeeded",
      "level": "Info",
      "message": "Enable succeeded: \n[stdout]\n● ssh.service - OpenBSD Secure Shell server\n     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)\n     Active: active (running) since Wed 2024-01-03 15:40:20 UTC; 19min ago\n..."
    }
  ]
}

Vyhledejte slovo Aktivní a ověřte, že je Active: active (running)jeho hodnota , která potvrzuje, že je na uzlu povolený protokol SSH.

Po konfiguraci místního uživatele SSH můžete ověřit, že je služba SSH aktivní na uzlech clusteru.

Pomocí příkazu Škálovací sada az vmss run-command invoke virtuálních počítačů zkontrolujte stav služby SSH.

az vmss run-command invoke --resource-group <node-resource-group> --name <vmss-name> --command-id RunShellScript --instance-id 0 --scripts "systemctl status ssh"

Následující ukázkový výstup ukazuje očekávaný výsledek, když je povolený SSH:

{
  "value": [
    {
      "code": "ProvisioningState/succeeded",
      "displayStatus": "Provisioning succeeded",
      "level": "Info",
      "message": "Enable succeeded: \n[stdout]\n● ssh.service - OpenBSD Secure Shell server\n     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)\n     Active: active (running) since Wed 2024-01-03 15:40:20 UTC; 19min ago\n..."
    }
  ]
}

Vyhledejte slovo Aktivní a ověřte, že je Active: active (running)jeho hodnota , která potvrzuje, že je na uzlu povolený protokol SSH.

Další kroky

Pokud chcete pomoct s řešením potíží s připojením SSH k uzlům clusterů, můžete zobrazit protokoly kubeletu nebo zobrazit protokoly hlavního uzlu Kubernetes.