Безопасный доступ к серверу API с использованием авторизованных диапазонов IP-адресов в Службе Kubernetes Azure (AKS)

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

Сервер API Kubernetes является ядром плоскости управления Kubernetes и является центральным способом взаимодействия с кластерами и управления ими. Чтобы повысить безопасность кластеров и свести к минимуму риск атак, рекомендуется ограничить диапазоны IP-адресов, которые могут получить доступ к серверу API. Для этого можно использовать функцию авторизованных диапазонов IP-адресов сервера API.

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

  • Вам необходимо установить и настроить службу Azure CLI версии 2.0.76 или более поздней. Чтобы узнать версию, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.
  • Чтобы узнать, какие IP-адреса следует включать при интеграции кластера AKS с Azure DevOps, см. статью Разрешенные IP-адреса и URL-адреса домена для Azure DevOps.

Ограничения

Функция авторизованных диапазонов IP-адресов сервера API имеет следующие ограничения:

  • Функция авторизованных диапазонов IP-адресов сервера API была перенесена из предварительной версии в октябре 2019 года. Для кластеров, созданных после перемещения компонента из предварительной версии, эта функция поддерживается только в подсистеме балансировки нагрузки SKU уровня "Стандартный ". Все существующие кластеры в подсистеме балансировки нагрузки SKU уровня "Базовый" с включенным компонентом разрешенных диапазонов IP-адресов сервера API будут продолжать работать так же. Однако эти кластеры нельзя перенести в подсистему балансировки нагрузки SKU уровня "Стандартный". Существующие кластеры будут продолжать работать, если обновлена версия Kubernetes и плоскость управления.
  • Функция авторизованных диапазонов IP-адресов сервера API не поддерживается в частных кластерах.
  • При использовании этой функции с кластерами, использующими общедоступный IP-адрес узла, пулы узлов, использующие общедоступный IP-адрес узла, должны использовать префиксы общедоступных IP-адресов. Префиксы общедоступного IP-адреса должны быть добавлены в качестве авторизованных диапазонов.

Общие сведения о диапазонах разрешенных IP-адресов сервера API

Сервер API Kubernetes предоставляет базовые API Kubernetes и обеспечивает взаимодействие с такими средствами управления, как kubectl и панель мониторинга Kubernetes. AKS предоставляет плоскость управления кластером с одним клиентом с выделенным сервером API. По умолчанию сервер API назначает общедоступный IP-адрес. Вы можете управлять доступом с помощью управления доступом на основе ролей Kubernetes (Kubernetes RBAC) или Azure RBAC.

Чтобы защитить доступ к общедоступному уровню управления AKS или серверу API, можно включить и использовать разрешенные IP-диапазоны. Эти диапазоны разрешенных IP-адресов разрешают обмен данными только с сервером API. Все запросы, сделанные на сервер API с IP-адреса, который не является частью этих авторизованных диапазонов IP-адресов, блокируются.

Создание кластера AKS с включенными разрешенными IP-диапазонами сервера API

Внимание

По умолчанию в кластере используется стандартный балансировщик нагрузки, который можно использовать для настройки исходящего шлюза. При включении авторизованных диапазонов IP-адресов сервера API во время создания кластера общедоступный IP-адрес кластера разрешен по умолчанию в дополнение к заданным диапазонам. Если указать значение "" или нет значения для --api-server-authorized-ip-ranges, разрешенные диапазоны IP-адресов сервера API отключены. Обратите внимание, что если вы используете PowerShell, используйте --api-server-authorized-ip-ranges="" (с знаками равенства), чтобы избежать проблем с анализом.

Примечание.

Эти диапазоны следует добавить в список разрешений:

  • IP-адрес исходящего кластера (брандмауэр, шлюз NAT или другой адрес в зависимости от типа исходящего трафика).
  • Любой диапазон, представляющий сети, из которыми будет администрироваться кластер.

Максимальное количество диапазонов IP-адресов, которые можно указать, — 200.

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

При создании кластера с включенными диапазонами разрешенных IP-адресов сервера API используйте --api-server-authorized-ip-ranges этот параметр для предоставления списка разрешенных диапазонов общедоступных IP-адресов. При указании диапазона CIDR начните с первого IP-адреса в диапазоне. Например, 137.117.106.90/29 является допустимым диапазоном, но убедитесь, что вы указали первый IP-адрес в диапазоне, например 137.117.106.88/29.

  • Создайте кластер AKS с авторизованными диапазонами IP-адресов сервера API, включенными с помощью az aks create команды с параметром --api-server-authorized-ip-ranges . В следующем примере создается кластер с именем myAKSCluster в группе ресурсов с именем myResourceGroup с включенными диапазонами IP-адресов сервера API. Допустимые диапазоны IP-адресов: 73.140.245.0/24.

    az aks create --resource-group myResourceGroup --name myAKSCluster --vm-set-type VirtualMachineScaleSets --load-balancer-sku standard --api-server-authorized-ip-ranges 73.140.245.0/24 --generate-ssh-keys
    

Указание исходящих IP-адресов для подсистемы балансировки нагрузки SKU уровня "Стандартный"

При создании кластера с разрешенными диапазонами IP-адресов сервера API можно также указать исходящие IP-адреса или префиксы для кластера с помощью --load-balancer-outbound-ips параметров или --load-balancer-outbound-ip-prefixes параметров. Все IP-адреса, предоставленные в параметрах, разрешены вместе с IP-адресами в параметре --api-server-authorized-ip-ranges .

  • Создайте кластер AKS с включенными диапазонами РАЗРЕШЕНных IP-адресов сервера API и укажите исходящие IP-адреса для подсистемы балансировки нагрузки SKU уровня "Стандартный" с помощью --load-balancer-outbound-ips параметра. В следующем примере создается кластер с именем myAKSCluster в группе ресурсов с именем myResourceGroup с включенными диапазонами IP-адресов сервера API и исходящими IP-адресами <public-ip-id-1> и<public-ip-id-2>:

    az aks create --resource-group myResourceGroup --name myAKSCluster --vm-set-type VirtualMachineScaleSets --load-balancer-sku standard --api-server-authorized-ip-ranges 73.140.245.0/24 --load-balancer-outbound-ips <public-ip-id-1>,<public-ip-id-2> --generate-ssh-keys
    

Разрешите только исходящий общедоступный IP-адрес стандартного балансировщика нагрузки

При включении разрешенных диапазонов IP-адресов сервера API во время создания кластера исходящий общедоступный IP-адрес для стандартного балансировщика нагрузки для вашего кластера также будет разрешенным по умолчанию в дополнение к указанным диапазонам. Чтобы разрешить только исходящий общедоступный IP-адрес подсистемы балансировки нагрузки SKU уровня "Стандартный", при указании --api-server-authorized-ip-ranges параметра используется 0.0.0.0/32.

  • Создайте кластер AKS с включенными диапазонами разрешенных IP-адресов сервера API и разрешайте только исходящий общедоступный IP-адрес подсистемы балансировки нагрузки SKU уровня "Стандартный" с помощью --api-server-authorized-ip-ranges параметра. В следующем примере создается кластер с именем myAKSCluster в группе ресурсов с именем myResourceGroup с включенными диапазонами IP-адресов сервера API и разрешен только исходящий общедоступный IP-адрес подсистемы балансировки нагрузки SKU уровня "Стандартный".

    az aks create --resource-group myResourceGroup --name myAKSCluster --vm-set-type VirtualMachineScaleSets --load-balancer-sku standard --api-server-authorized-ip-ranges 0.0.0.0/32 --generate-ssh-keys
    

Обновление авторизованных диапазонов IP-адресов существующего кластера

  • Обновите авторизованные диапазоны IP-адресов существующего кластера с помощью az aks update команды с параметром --api-server-authorized-ip-ranges . В следующем примере обновляется кластер с одним узлом с именем myAKSCluster в группе ресурсов с именем myResourceGroup с включенными диапазонами разрешенных IP-адресов сервера API. Диапазон IP-адресов для авторизации — 73.140.245.0/24:

    az aks update --resource-group myResourceGroup --name myAKSCluster --api-server-authorized-ip-ranges 73.140.245.0/24
    

    Чтобы разрешить только исходящий общедоступный IP-адрес в стандартном балансировщике нагрузки, используйте значение 0.0.0.0/32 при указании параметра --api-server-authorized-ip-ranges.

Отключение разрешенных диапазонов IP-адресов

  • Отключите авторизованные диапазоны IP-адресов с помощью az aks update команды и укажите пустой диапазон "" для --api-server-authorized-ip-ranges параметра.

    az aks update --resource-group myResourceGroup --name myAKSCluster --api-server-authorized-ip-ranges ""
    

Поиск существующих разрешенных диапазонов IP-адресов

  • Найдите существующие авторизованные диапазоны IP-адресов с помощью az aks show команды с заданным параметром --queryapiServerAccessProfile.authorizedIpRanges.

    az aks show --resource-group myResourceGroup --name myAKSCluster --query apiServerAccessProfile.authorizedIpRanges
    

Как найти IP-адрес для включения в --api-server-authorized-ip-ranges?

Чтобы получить доступ к серверу API, необходимо добавить компьютеры разработки, инструментарий или IP-адреса автоматизации в список разрешенных диапазонов IP-адресов для кластера AKS.

Кроме того, можно настроить jumpbox с необходимым инструментарием в пределах отдельной подсети в виртуальной сети брандмауэра. При этом предполагается, что в вашей среде есть брандмауэр с соответствующей сетью и что вы добавили IP-адреса брандмауэра в авторизованные диапазоны. Аналогичным образом, если вы выполнили принудительное туннелирование из подсети AKS в подсеть с брандмауэром, использовать jumpbox в подсети кластера также допустимо.

  1. Получите IP-адрес с помощью следующей команды:

    # Retrieve your IP address
    CURRENT_IP=$(dig +short "myip.opendns.com" "@resolver1.opendns.com")
    
  2. Добавьте IP-адрес в утвержденный список с помощью Azure CLI или Azure PowerShell:

    # Add to AKS approved list using Azure CLI
    az aks update --resource-group $RG --name $AKSNAME --api-server-authorized-ip-ranges $CURRENT_IP/24,73.140.245.0/24
    
    # Add to AKS approved list using Azure PowerShell
    Set-AzAksCluster -ResourceGroupName $RG -Name $AKSNAME -ApiServerAccessAuthorizedIpRange '$CURRENT_IP/24,73.140.245.0/24'
    

Примечание.

В приведенном выше примере к утвержденным диапазонам добавляется другой IP-адрес. Обратите внимание, что он по-прежнему включает IP-адрес из обновления авторизованных диапазонов IP-адресов сервера API кластера. Если вы не включаете существующий IP-адрес, эта команда заменит ее новым вместо добавления в авторизованные диапазоны. Чтобы отключить авторизованные диапазоны IP-адресов, используйте az aks update и укажите пустой диапазон "".

Другой вариант — использовать следующую команду в системах Windows, чтобы получить общедоступный IPv4-адрес или выполнить действия, описанные в статье Поиск IP-адреса.

Invoke-RestMethod http://ipinfo.io/json | Select -exp ip

Этот адрес можно также узнать, введя мой IP-адрес в интернет-браузере.

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

В этой статье вы включили разрешенные диапазоны IP-адресов серверов API. Этот подход является частью процесса безопасного запуска кластера AKS. Подробнее см. в статьях Основные понятия безопасности для приложений и кластеров в AKS и Рекомендации по обеспечению безопасности и обновлениям кластера в AKS.