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


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

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

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

  • Отключенный SSH: полностью отключить доступ SSH к узлам кластера для повышения безопасности
  • SSH на основе Microsoft Entra ID: используйте учетные данные Microsoft Entra ID для проверки подлинности SSH. Преимущества использования SSH с использованием Entra ID:
    • Централизованное управление удостоверениями: Использование существующих удостоверений Entra ID для доступа к узлам кластера
    • Нет управления ключами SSH: устраняет необходимость создавать, распространять и поворачивать ключи SSH.
    • Улучшенная безопасность: используйте функции безопасности Entra ID, такие как условный доступ и многофакторная аутентификация.
    • Аудит и соответствие: централизованное ведение журнала событий доступа с помощью журналов Entra ID
    • JIT-доступ: Совмещайте с Azure RBAC для детального управления доступом
  • Локальный пользователь SSH: традиционная проверка подлинности на основе ключей SSH для доступа к узлам

Внимание

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

Внимание

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

Предпосылки

  • Для этой статьи требуется версия 2.61.0 или более поздняя версия Azure CLI. Если вы используете Azure Cloud Shell, последняя версия уже установлена там.

  • Вам нужна aks-preview версия 9.0.0b1 или более поздняя.

    • Если у вас еще нет aks-preview расширения, установите его с помощью az extension add команды:
      az extension add --name aks-preview
      
    • Если у вас уже есть aks-preview расширение, обновите его, чтобы убедиться, что у вас установлена последняя версия с помощью az extension update команды:
      az extension update --name aks-preview
      
  • 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
    
  • Для этой статьи требуется версия 2.73.0 или более поздняя версия Azure CLI. Если вы используете Azure Cloud Shell, последняя версия уже установлена там.

  • Вам нужна aks-preview версия 19.0.0b7 или более поздняя для Entra ID SSH.

    • Если у вас еще нет aks-preview расширения, установите его с помощью az extension add команды:
      az extension add --name aks-preview
      
    • Если у вас уже есть aks-preview расширение, обновите его, чтобы убедиться, что у вас установлена последняя версия с помощью az extension update команды:
      az extension update --name aks-preview
      
  • Соответствующие разрешения Azure RBAC для доступа к узлам:

    • Необходимое действие: Microsoft.Compute/virtualMachineScaleSets/*/read для прочтения информации о наборах масштабируемых виртуальных машин
  • EntraIdSSHPreview Зарегистрируйте флаг компонента с помощью az feature register команды.

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

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

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

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

    az provider register --namespace Microsoft.ContainerService
    
  • Для этой статьи требуется версия 2.61.0 или более поздняя версия Azure CLI. Если вы используете Azure Cloud Shell, последняя версия уже установлена там.
  • Для обновления метода доступа SSH на nodepools требуется aks-preview версия 9.0.0b1 или более поздней версии.
    • Если у вас еще нет aks-preview расширения, установите его с помощью az extension add команды:
      az extension add --name aks-preview
      
    • Если у вас уже есть aks-preview расширение, обновите его, чтобы убедиться, что у вас установлена последняя версия с помощью az extension update команды:
      az extension update --name aks-preview
      

Настройка переменных среды

Задайте следующие переменные среды для группы ресурсов, имени кластера и расположения:

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

Ограничения

  • Поддержка SSH Entra ID для узлов пока недоступна для пула Windows.
  • SSH с использованием Entra ID к узлам не поддерживается для системы автоматического управления AKS из-за блокировки группы ресурсов узлов, предотвращающей назначения ролей.

Настройка доступа SSH

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

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

Примечание.

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

Примечание.

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

Создайте группу ресурсов

Создайте группу ресурсов с помощью команды az group create.

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

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

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

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

Внимание

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

Примечание.

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

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

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

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

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

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

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

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

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

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

Внимание

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

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

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

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

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

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

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

Внимание

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

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

Чтобы повторно включить доступ SSH в пуле узлов, обновите пул узлов с помощью --ssh-access localuser (для традиционного доступа на основе ключей SSH) или --ssh-access entraid (для доступа на основе Entra ID). Подробные инструкции см. в соответствующих разделах.

Кластер AKS можно настроить для использования идентификатора Microsoft Entra (ранее Azure AD) для проверки подлинности SSH на узлах кластера. Это устраняет необходимость управления ключами SSH и позволяет использовать учетные данные Entra ID для безопасного доступа к узлам.

Создайте группу ресурсов

Создайте группу ресурсов с помощью команды az group create.

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

Включение SSH с использованием Entra ID в новом кластере

Используйте команду az aks create с аргументом --ssh-access entraid, чтобы включить аутентификацию SSH на основе Entra ID во время создания кластера.

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

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

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

Включить SSH с использованием Entra ID для нового пула узлов

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

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

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

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

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

Используйте команду az aks nodepool update с аргументом --ssh-access entraid, чтобы включить SSH на основе Entra ID в существующем пуле узлов.

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

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

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

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

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

Внимание

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

Доступ к SSH локального пользователя использует традиционную проверку подлинности на основе ключей SSH. Это метод доступа по умолчанию SSH для кластеров AKS.

Создайте группу ресурсов

Создайте группу ресурсов с помощью команды az group create.

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

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

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

Параметр SSH Описание Значение по умолчанию
--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
--ssh-access localuser Явным образом включите доступ локального пользователя SSH с проверкой подлинности на основе ключей.
--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 $CLUSTER_NAME --resource-group $RESOURCE_GROUP --generate-ssh-key
    
  • Чтобы указать файл открытого ключа SSH, выполните указанные действия.

    az aks create --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --ssh-key-value ~/.ssh/id_rsa.pub
    
  • Чтобы явно включить доступ К SSH локального пользователя, выполните приведенные действия.

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

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

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

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

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

Внимание

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

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

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

Внимание

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

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

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

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

Примечание.

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

Примеры:

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

    az aks update --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --ssh-key-value 'ssh-rsa AAAAB3Nza-xxx'
    
  • Чтобы указать файл открытого ключа SSH, выполните указанные действия.

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

Внимание

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

Проверка состояния службы SSH

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

Используйте команду Virtual Machine Scale Set az vmss run-command invoke для проверки состояния SSH-сервиса.

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

В следующем примере выходных данных показан ожидаемый результат при отключении 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..."
    }
  ]
}

Найдите слово "Активный " и убедитесь, что его значение имеет значение Active: inactive (dead), которое подтверждает, что SSH отключен на узле.

После включения SSH с использованием Entra ID можно убедиться, что служба SSH активна и настроена для аутентификации с помощью Entra ID на узлах кластера.

Используйте команду масштабируемого набора az vmss run-command invoke виртуальных машин для проверки состояния службы SSH.

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

В следующем примере выходных данных показан ожидаемый результат при включении 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..."
    }
  ]
}

Найдите слово "Активный " и убедитесь, что его значение имеет значение Active: active (running), которое подтверждает, что SSH включен на узле.

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

Используйте команду масштабируемого набора az vmss run-command invoke виртуальных машин для проверки состояния службы SSH.

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

В следующем примере выходных данных показан ожидаемый результат при включении 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..."
    }
  ]
}

Найдите слово "Активный " и убедитесь, что его значение имеет значение Active: active (running), которое подтверждает, что SSH включен на узле.

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

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