Управление SSH для безопасного доступа к узлам Служба Azure Kubernetes (AKS)

В этой статье описывается, как настроить ключи SSH (предварительная версия) в кластерах AKS или пулах узлов во время первоначального развертывания или позже.

AKS поддерживает следующие параметры конфигурации для управления ключами SSH на узлах кластера:

  • Создание кластера с помощью ключей SSH
  • Обновление ключей SSH в существующем кластере AKS
  • Отключение и включение службы SSH

Внимание

Предварительные версии функций AKS доступны на уровне самообслуживания. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS предоставляются с частичной клиентской поддержкой по мере возможности. Следовательно, эти функции не предназначены для использования в рабочей среде. Дополнительные сведения доступны в следующих статьях поддержки.

Подготовка к работе

  • Для использования обновления требуется aks-preview версия 0.5.116 или более поздняя.
  • Для использования disable требуется aks-preview версия 1.0.0b6 или более поздняя.
  • Функция создания и обновления SSH поддерживает пулы узлов Linux, Windows и Azure Linux в существующих кластерах.
  • Функция Disable SSH не поддерживается в этом предварительном выпуске в пулах узлов под управлением операционной системы Windows Server.

Установка расширения Azure CLI aks-preview

  1. Установите расширение aks-preview с помощью az extension add команды.

    az extension add --name aks-preview
    
  2. Обновите до последней версии расширения с помощью az extension update команды.

    az extension update --name aks-preview
    

Регистрация флага компонента DisableSSHPreview

Чтобы использовать функцию Disable SSH, выполните следующие действия, чтобы зарегистрировать и включить ее в подписке.

  1. DisableSSHPreview Зарегистрируйте флаг компонента с помощью az feature register команды.

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

    Через несколько минут отобразится состояние Registered (Зарегистрировано).

  2. Проверьте состояние регистрации с помощью az feature show команды.

    az feature show --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"
    
  3. Когда состояние отражает зарегистрировано, обновите регистрацию поставщика ресурсов Microsoft.ContainerService с помощью az provider register команды.

    az provider register --namespace Microsoft.ContainerService
    

Создание кластера AKS с помощью ключей SSH

Используйте команду az aks create для развертывания кластера AKS с открытым ключом SSH. Можно указать ключ или файл ключа с помощью аргумента --ssh-key-value .

Параметр SSH Description Default value
--generate-ssh-key Если у вас нет собственных ключей SSH, укажите --generate-ssh-key. Azure CLI автоматически создает набор ключей SSH и сохраняет их в каталоге ~/.ssh/по умолчанию.
--ssh-key-value Путь к открытому ключу или содержимому ключа для установки на виртуальных машинах узла для доступа к SSH. Например, ssh-rsa AAAAB...snip...UcyupgH azureuser@linuxvm. ~/.ssh/id_rsa.pub
--no-ssh-key Если ключи SSH не требуются, укажите этот аргумент. Однако AKS автоматически создает набор ключей SSH, так как зависимость ресурса виртуальной машины Azure не поддерживает пустой файл ключей SSH. В результате ключи не возвращаются и не могут использоваться для SSH на виртуальных машинах узла. Закрытый ключ не сохраняется карта и не сохраняется.

Примечание.

Если параметры не указаны, Azure CLI по умолчанию ссылается на ключи SSH, хранящиеся в ~/.ssh/id_rsa.pub файле. Если ключи не найдены, команда возвращает сообщение An RSA key file or key value must be supplied to SSH Key Value.

Ниже приведены примеры этой команды:

  • Чтобы создать кластер и использовать созданные по умолчанию ключи SSH:

    az aks create --name myAKSCluster --resource-group MyResourceGroup --generate-ssh-key
    
  • Чтобы указать файл открытого ключа SSH, добавьте --ssh-key-value аргумент:

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

Обновление открытого ключа SSH в существующем кластере AKS

az aks update Используйте команду, чтобы обновить открытый ключ SSH (предварительная версия) в кластере. Эта операция обновляет ключ во всех пулах узлов. Можно указать ключ или файл ключа с помощью аргумента --ssh-key-value .

Примечание.

Обновление ключей SSH поддерживается в масштабируемых наборах виртуальных машин Azure с кластерами AKS.

Ниже приведены примеры этой команды:

  • Чтобы указать новое значение открытого ключа SSH, добавьте --ssh-key-value аргумент:

    az aks update --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value 'ssh-rsa AAAAB3Nza-xxx'
    
  • Чтобы указать файл открытого ключа SSH, укажите его с аргументом --ssh-key-value :

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

Внимание

После обновления ключа SSH AKS не обновляет пул узлов автоматически. В любое время вы можете выполнить операцию обновления nodepool. Операция обновления ключей SSH вступает в силу после завершения обновления образа узла.

Общие сведения об отключении SSH

Чтобы повысить безопасность и поддержку требований к корпоративной безопасности или стратегии, AKS поддерживает отключение SSH (предварительная версия) как в кластере, так и на уровне пула узлов. Отключение SSH представляет упрощенный подход по сравнению с единственным поддерживаемым решением, которое требует настройки правил группы безопасности сети в карта сетевого интерфейса AKS или узла.

При отключении SSH во время создания кластера оно вступает в силу после создания кластера. Однако при отключении SSH в существующем кластере или пуле узлов AKS не отключает SSH автоматически. В любое время вы можете выполнить операцию обновления nodepool. Операция отключения и включения ключей SSH вступает в силу после завершения обновления образа узла.

Параметр SSH Description
disabled Служба SSH отключена.
localuser Служба SSH включена, и пользователи с ключами SSH могут безопасно получить доступ к узлу.

Примечание.

Узел отладки kubectl продолжает работать после отключения SSH, так как он не зависит от службы SSH.

Отключение SSH в новом развертывании кластера

По умолчанию служба SSH на узлах кластера AKS открыта для всех пользователей и модулей pod, работающих в кластере. Вы можете запретить прямой доступ SSH из любой сети к узлам кластера, чтобы ограничить вектор атаки, если контейнер в модуле pod скомпрометирован. az aks create Используйте команду для создания нового кластера и включения аргумента--ssh-access disabled, чтобы отключить SSH (предварительная версия) во всех пулах узлов во время создания кластера.

Внимание

После отключения службы SSH в кластере невозможно выполнить административные задачи или устранить неполадки.

az aks create -g myResourceGroup -n myManagedCluster --ssh-access disabled

Через несколько минут выполнение команды завершается и отображаются сведения о кластере в формате JSON. Следующий пример напоминает выходные данные и результаты, связанные с отключением SSH:

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

Отключение SSH в существующем кластере

az aks update Используйте команду для обновления существующего кластера и включения аргумента --ssh-access disabled для отключения SSH (предварительная версия) во всех пулах узлов в кластере.

az aks update -g myResourceGroup -n myManagedCluster --ssh-access disabled

Через несколько минут выполнение команды завершается и отображаются сведения о кластере в формате JSON. Следующий пример напоминает выходные данные и результаты, связанные с отключением SSH:

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

Чтобы изменение ввело в силу, необходимо повторно использовать все пулы узлов с помощью az aks nodepool upgrade команды.

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

Внимание

Во время этой операции все экземпляры масштабируемого набора виртуальных машин обновляются и переосмыслены для использования новой конфигурации SSH.

Отключение SSH для нового пула узлов

az aks nodepool add Используйте команду для добавления пула узлов и включения аргумента --ssh-access disabled для отключения SSH во время создания пула узлов.

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

Через несколько минут команда завершает работу и возвращает данные в формате JSON о кластере, указывающие на успешное создание mynodepool . Следующий пример напоминает выходные данные и результаты, связанные с отключением SSH:

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

Отключение SSH для существующего пула узлов

Используйте аргумент [az aks nodepool update][az-aks-nodepool-update] command with the -ssh-access disabled', чтобы отключить SSH (предварительная версия) в существующем пуле узлов.

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

Через несколько минут команда завершает работу и возвращает данные в формате JSON о кластере, указывающие на успешное создание mynodepool . Следующий пример напоминает выходные данные и результаты, связанные с отключением SSH:

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

Чтобы изменение ввело в силу, необходимо повторно создать пул узлов с помощью az aks nodepool upgrade команды.

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

Повторное включение SSH в существующем кластере

az aks update Используйте команду для обновления существующего кластера и включения --ssh-access localuser аргумента для повторного включения SSH (предварительная версия) во всех пулах узлов в кластере.

az aks update -g myResourceGroup -n myManagedCluster --ssh-access localuser

При выполнении процесса возвращается следующее сообщение:

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

После повторного включения SSH узлы не будут переосмыслены автоматически. В любое время вы можете выполнить операцию повторного создания образа.

Внимание

Во время этой операции все экземпляры масштабируемого набора виртуальных машин обновляются и переимыкаются для использования нового открытого ключа SSH.

Повторно включите SSH для определенного пула узлов

az aks update Используйте команду для обновления определенного пула узлов и включения --ssh-access localuser аргумента для повторного включения SSH (предварительная версия) в этом пуле узлов в кластере. В следующем примере nodepool1 — это целевой пул узлов.

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

При выполнении процесса возвращается следующее сообщение:

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

Внимание

Во время этой операции все экземпляры масштабируемого набора виртуальных машин обновляются и переимыкаются для использования нового открытого ключа SSH.

Состояние службы SSH

Выполните следующие действия, чтобы использовать оболочку узла на одном узле и проверить состояние службы SSH с помощью systemctl.

  1. Получите стандартную оболочку bash, выполнив команду kubectl node-shell <node> .

    kubectl node-shell aks-nodepool1-20785627-vmss000001
    
  2. systemctl Выполните команду, чтобы проверка состояние службы SSH.

    systemctl status ssh
    

Если SSH отключен, в следующем примере выходных данных отображаются результаты:

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

Если SSH включен, в следующем примере выходных данных отображаются результаты:

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

Следующие шаги

Чтобы устранить проблемы с подключением SSH к узлам кластеров, можно просмотреть журналы kubelet или просмотреть журналы главного узла Kubernetes.