Безопасный доступ к серверу 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-адресов, можно перечислить несколько IP-адресов, разделенных запятыми.
az aks update --resource-group myResourceGroup --name myAKSCluster --api-server-authorized-ip-ranges 73.140.245.0/24,193.168.1.0/24,194.168.1.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
команды с заданным параметром--query
apiServerAccessProfile.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 в подсети кластера также допустимо.
Получите IP-адрес с помощью следующей команды:
# Retrieve your IP address CURRENT_IP=$(dig +short "myip.opendns.com" "@resolver1.opendns.com")
Добавьте 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 — (предварительная версия)
Теги служб — это удобный способ указать группу IP-адресов, соответствующих службе Kubernetes. Теги служб можно использовать для указания IP-адресов служб Kubernetes и определенных IP-адресов в авторизованных диапазонах IP-адресов для сервера API, разделив их запятой.
Ограничения
- Эта функция несовместима с интеграцией виртуальной сети СЕРВЕРА API.
Внимание
Предварительные версии функций AKS доступны на уровне самообслуживания. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS предоставляются с частичной клиентской поддержкой по мере возможности. Следовательно, эти функции не предназначены для использования в рабочей среде. Дополнительные сведения доступны в следующих статьях поддержки.
Установка расширения предварительной версии Azure CLI
Установите расширение предварительной версии Azure CLI с помощью команды [az extension add][az-extension-add].
az extension add --name aks-preview
Обновите расширение, чтобы убедиться, что у вас установлена последняя версия с помощью команды [az extension update][az-extension-update].
az extension update --name aks-preview
Регистрация флага функции авторизованного IP-адреса тега службы
Зарегистрируйте флаг компонента EnableServiceTagAuthorizedIPPreview с помощью команды az feature register .
az feature register --namespace "Microsoft.ContainerService" --name "EnableServiceTagAuthorizedIPPreview"
Регистрация занимает несколько минут.
Проверьте регистрацию с помощью команды az feature show .
az feature show --namespace "Microsoft.ContainerService" --name "EnableServiceTagAuthorizedIPPreview"
Создание кластера AKS с авторизованными диапазонами IP-адресов тега службы
Создайте кластер с авторизованными диапазонами IP-адресов тега службы с помощью --api-server-authorized-ip-ranges
параметра с тегом AzureCloud
службы, чтобы разрешить всем службам Azure доступ к серверу API и указать дополнительный IP-адрес.
Примечание.
В параметре --api-server-authorized-ip-ranges
разрешен только один тег службы. Невозможно указать несколько тегов службы.
az aks create --resource-group myResourceGroup \
--name myAKSCluster \
--api-server-authorized-ip-ranges AzureCloud,20.20.20.20
Вы должны иметь возможность закрутить сервер API из виртуальной машины Azure или службы Azure, которая входит в AzureCloud
тег службы.
Следующие шаги
В этой статье вы включили разрешенные диапазоны IP-адресов серверов API. Этот подход является частью процесса безопасного запуска кластера AKS. Подробнее см. в статьях Основные понятия безопасности для приложений и кластеров в AKS и Рекомендации по обеспечению безопасности и обновлениям кластера в AKS.
Azure Kubernetes Service