Поделиться через


Управление 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 во время создания кластера оно вступает в силу после создания кластера. Однако при отключении SSH в существующем кластере или пуле узлов AKS не отключает SSH автоматически. В любое время вы можете выполнить операцию обновления nodepool. Операция отключения и включения ключей SSH вступает в силу после завершения обновления образа узла.

Примечание.

При отключении 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 в кластере невозможно выполнить административные задачи или устранить неполадки.

Примечание.

В созданном кластере отключите SSH только для настройки 1-го системного узла. Все остальные узлы должны быть настроены на уровне nodepool.

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

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

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

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

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

az aks update --resource-group myResourceGroup --name 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 --resource-group myResourceGroup --name 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.