Управление 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
Установите расширение aks-preview с помощью
az extension add
команды.az extension add --name aks-preview
Обновите до последней версии расширения с помощью
az extension update
команды.az extension update --name aks-preview
Регистрация флага компонента DisableSSHPreview
Чтобы использовать функцию Disable SSH, выполните следующие действия, чтобы зарегистрировать и включить ее в подписке.
DisableSSHPreview
Зарегистрируйте флаг компонента с помощьюaz feature register
команды.az feature register --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"
Через несколько минут отобразится состояние Registered (Зарегистрировано).
Проверьте состояние регистрации с помощью
az feature show
команды.az feature show --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"
Когда состояние отражает зарегистрировано, обновите регистрацию поставщика ресурсов 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
.
Получите стандартную оболочку bash, выполнив команду
kubectl node-shell <node>
.kubectl node-shell aks-nodepool1-20785627-vmss000001
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.
Azure Kubernetes Service