Использование управления доступом на основе ролей Azure (RBAC) для авторизации Kubernetes
Область применения: AKS в локальной среде Azure, версия 23H2
Администраторы инфраструктуры могут использовать управление доступом на основе ролей Azure (Azure RBAC) для управления доступом к файлу kubeconfig и разрешениям, которые у них есть. Операторы Kubernetes могут взаимодействовать с кластерами Kubernetes с помощью средства kubectl на основе заданных разрешений. Azure CLI позволяет легко получить учетные данные доступа и файл конфигурации kubeconfig для подключения к кластерам AKS с помощью kubectl.
При использовании интегрированной проверки подлинности между идентификатором Microsoft Entra и AKS можно использовать пользователей, групп или субъектов-служб Microsoft в качестве субъектов управления доступом на основе ролей Kubernetes (Kubernetes RBAC). Эта возможность освобождает вас от отдельного управления удостоверениями пользователей и учетными данными для Kubernetes. Однако вам по-прежнему необходимо настроить Azure RBAC и Kubernetes RBAC отдельно и управлять ими.
В этой статье описывается, как использовать авторизацию кластера Azure RBAC для Kubernetes с идентификатором Microsoft Entra и назначениями ролей Azure.
Обзор концептуального обзора см. в статье Azure RBAC для авторизации Kubernetes для AKS, включенной Azure Arc.
Подготовка к работе
Прежде чем приступить к работе, убедитесь, что у вас есть следующие необходимые компоненты.
AKS в локальной версии Azure версии 23H2 в настоящее время поддерживает включение Azure RBAC только во время создания кластера Kubernetes. После создания кластера Kubernetes невозможно включить Azure RBAC.
Установите последнюю версию расширений aksarc и connectedk8s Azure CLI. Обратите внимание, что для включения Azure RBAC необходимо запустить расширение aksarc версии 1.1.1 или более поздней. Выполните команду
az --version
, чтобы найти текущую версию. Если вам нужно установить или обновить Azure CLI, см. статью "Установка Azure CLI".az extension add --name aksarc az extension add --name connectedk8s
Если расширение уже установлено
aksarc
, обновите расширение до последней версии:az extension update --name aksarc az extension update --name connectedk8s
Чтобы взаимодействовать с кластерами Kubernetes, необходимо установить kubectl и kubelogin.
Чтобы включить Azure RBAC при создании кластера Kubernetes, вам потребуется следующее разрешение:
- Чтобы создать кластер Kubernetes, вам потребуется роль участника Служба Azure Kubernetes Arc.
- Чтобы использовать
--enable-azure-rbac
этот параметр, требуется роль администратора на основе ролей контроль доступа для доступа к разрешениям Microsoft.Authorization/roleAssignments/write. Дополнительные сведения см. в статье Встроенные роли Azure. - Новые назначения ролей могут занять до пяти минут для распространения и обновления сервером авторизации.
После включения Azure RBAC вы можете получить доступ к кластеру Kubernetes с заданными разрешениями с помощью прямого или прокси-режима.
- Чтобы получить доступ к кластеру Kubernetes непосредственно с помощью
az aksarc get-credentials
команды, вам потребуется microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action, который входит в разрешение роли пользователя кластера Arc Служба Azure Kubernetes. - Чтобы получить доступ к кластеру Kubernetes из любого места с помощью прокси-режима с помощью
az connectedk8s proxy
команды или из портал Azure, вам потребуется действие Пользователя кластера Kubernetes(Microsoft.Kubernetes/connectedClusterUserCredential/action), которое входит в разрешение роли пользователя кластера Kubernetes с поддержкой Azure Arc. Между тем необходимо убедиться, что агенты и компьютер, выполняющие процесс подключения, соответствуют требованиям сети, указанным в требованиях к сети с поддержкой Azure Arc Kubernetes.
- Чтобы получить доступ к кластеру Kubernetes непосредственно с помощью
Чтобы использовать kubectl, вы можете получить к нему доступ с помощью Azure RBAC или группы администрирования AAD.
- Чтобы использовать kubectl с Azure RBAC, вам потребуется роль средства просмотра Azure Arc Kubernetes, ограниченная подключенным ресурсом кластера.
- Чтобы использовать kubectl с группой администрирования AAD, вам не нужна какая-либо определенная роль, но необходимо убедиться, что вы находитесь в одной из групп в списке групп надстроек подключенного ресурса кластера.
Шаг 1. Создание кластера Kubernetes с поддержкой Azure RBAC
Вы можете создать кластер Kubernetes с поддержкой Azure RBAC для авторизации и идентификатор Microsoft Entra для проверки подлинности.
az aksarc create -n $aks_cluster_name -g $resource_group_name --custom-location $customlocation_ID --vnet-ids $logicnet_Id --generate-ssh-keys --enable-azure-rbac
Через несколько минут выполнение команды завершается и отображаются сведения о кластере в формате JSON.
Шаг 2. Создание назначений ролей для пользователей для доступа к кластеру
AKS, включенный Arc, предоставляет следующие пять встроенных ролей. Они похожи на встроенные роли Kubernetes с несколькими различиями, такими как поддержка CRD. См. полный список действий, разрешенных каждой встроенной ролью Azure.
Роль | Description |
---|---|
Пользователь кластера Kubernetes с поддержкой Azure Arc | Позволяет получить файл kubeconfig на основе кластера для управления кластерами из любого места. |
Зритель Kubernetes Azure Arc | Разрешает доступ только для чтения, позволяя просматривать большинство объектов в пространстве имен. Не разрешает просмотр секретов, так как разрешение на чтение секретов обеспечивает доступ к учетным данным ServiceAccount в пространстве имен. Эти учетные данные, в свою очередь, разрешают доступ к API через это значение ServiceAccount (форма эскалации привилегий). |
Писатель Kubernetes Azure Arc | Разрешает доступ для чтения и записи к большинству объектов в пространстве имен. Не допускает просмотр или изменение ролей или привязок ролей. Однако эта роль позволяет получать доступ к секретам и запускать модули pod как любое значение ServiceAccount в пространстве имен, поэтому его можно использовать для получения уровней доступа API любого такого значения ServiceAccount в пространстве имен. |
Администратор Kubernetes Azure Arc | Разрешает административный доступ. Он предназначен для предоставления в пространстве имен через RoleBinding. Если он используется в RoleBinding, он разрешает доступ на чтение и запись к большинству ресурсов в пространстве имен, включая возможность создавать роли и привязки ролей в пространстве имен. Эта роль не разрешает доступ на запись к квоте ресурса или пространству имен. |
Администратор кластера Kubernetes Azure Arc | Разрешает "суперпользователь" доступ к выполнению любого действия в любом ресурсе. При использовании в ClusterRoleBinding он обеспечивает полный контроль над каждым ресурсом в кластере и во всех пространствах имен. При использовании в RoleBinding он обеспечивает полный контроль над каждым ресурсом в пространстве имен привязки роли, включая само пространство имен. |
Вы можете использовать az role assignment create
команду для создания назначений ролей.
Сначала получите $ARM-ID
целевой кластер, которому нужно назначить роль.
$ARM_ID = (az connectedk8s show -g "$resource_group_name" -n $aks_cluster_name --query id -o tsv)
Затем используйте az role assignment create
команду, чтобы назначить роли кластеру Kubernetes. Необходимо указать первый $ARM_ID
шаг и assignee-object-id
этот шаг. Это assignee-object-id
может быть идентификатор Microsoft Entra или идентификатор клиента субъекта-службы.
В следующем примере роль Средства просмотра Azure Arc Kubernetes назначается кластеру Kubernetes:
az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee <assignee-object-id> --scope $ARM_ID
В этом примере область — это идентификатор Azure Resource Manager кластера. Это также может быть группа ресурсов, содержащая кластер Kubernetes.
Создание определений настраиваемой роли
Вы можете создать собственное определение роли для использования в назначениях ролей.
В следующем примере показано определение роли, позволяющее пользователю читать только развертывания. Дополнительные сведения см. в полном списке действий с данными, которые можно использовать для создания определения роли. Дополнительные сведения о создании настраиваемой роли см. в разделе "Действия по созданию настраиваемой роли"
Чтобы создать собственные определения пользовательских ролей, скопируйте следующий объект JSON в файл с именем custom-role.json. Замените заполнитель <subscription-id>
фактическим идентификатором подписки. Настраиваемая роль использует одно из действий с данными и позволяет просматривать все развертывания в области (кластере или пространстве имен), в которой создается назначение роли.
{
"Name": "AKS Arc Deployment Reader",
"Description": "Lets you view all deployments in cluster/namespace.",
"Actions": [],
"NotActions": [],
"DataActions": [
"Microsoft.Kubernetes/connectedClusters/apps/deployments/read"
],
"NotDataActions": [],
"assignableScopes": [
"/subscriptions/<YOUR SUBSCRIPTION ID>"
]
}
Сведения о пользовательских ролях и их создании см. в статье о пользовательских ролях Azure.
Создайте определение роли с помощью az role definition create
команды, задав --role-definition
параметр deploy-view.json файлу, созданному на предыдущем шаге:
az role definition create --role-definition @deploy-view.json
Назначьте определение роли пользователю или другому удостоверению с помощью az role assignment create
команды:
az role assignment create --role "AKS Arc Deployment Reader" --assignee <assignee-object-id> --scope $ARM_ID
Шаг 3. Доступ к кластеру Kubernetes
Теперь вы можете получить доступ к кластеру Kubernetes с заданными разрешениями с помощью прямого или прокси-режима.
Доступ к кластеру с помощью kubectl (прямой режим)
Чтобы получить доступ к кластеру Kubernetes с заданными разрешениями, оператор Kubernetes требует microsoft Entra kubeconfig, который можно получить с помощью az aksarc get-credentials
команды. Эта команда предоставляет доступ к kubeconfig на основе администратора, а также пользовательскому kubeconfig. Файл kubeconfig на основе администратора содержит секреты и должен безопасно храниться и периодически поворачиваться. С другой стороны, пользовательский идентификатор Microsoft Entra ID kubeconfig не содержит секреты и может распространяться пользователям, подключающимся с клиентских компьютеров.
Чтобы выполнить эту команду Azure CLI, вам потребуется microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action, который включен в разрешение роли пользователя кластера Arc Служба Azure Kubernetes:
az aksarc get-credentials -g "$resource_group_name" -n $aks_cluster_name --file <file-name>
Теперь вы можете использовать kubectl для управления кластером. Например, можно перечислить узлы в кластере с помощью kubectl get nodes
. При первом запуске необходимо выполнить вход, как показано в следующем примере:
kubectl get nodes
Доступ к кластеру с клиентского устройства (режим прокси-сервера)
Чтобы получить доступ к кластеру Kubernetes из любого места с помощью команды прокси-сервера az connectedk8s proxy
, вам потребуется разрешение роли пользователя кластера Kubernetes(Microsoft.Kubernetes/connectedClusterUserCredential/action), которое входит в разрешение роли пользователя кластера Kubernetes с поддержкой Azure Arc.
Выполните следующие действия на другом клиентском устройстве:
Вход с помощью проверки подлинности Microsoft Entra
Получите kubeconfig для подключения кластера к кластеру из любого места (даже вне брандмауэра, окружающего кластер):
az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
Примечание.
Эта команда открывает прокси-сервер и блокирует текущую оболочку.
В другом сеансе оболочки используйте для
kubectl
отправки запросов в кластер:kubectl get pods -A
Вы увидите ответ от кластера с полным списком pod в пространстве имен default
.
Дополнительные сведения см. в разделе "Доступ к кластеру" с клиентского устройства.
Очистка ресурсов
Удаление назначения роли
# List role assignments
az role assignment list --scope $ARM_ID --query [].id -o tsv
# Delete role assignments
az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
Удаление определения роли
az role definition delete -n "AKS Arc Deployment Reader"
Следующие шаги
- Управление доступом на основе ролей в Azure (Azure RBAC).
- Параметры доступа и удостоверения для AKS, включенные Azure Arc
- Создание субъекта-службы Azure с помощью Azure CLI
- Доступные разрешения Azure для гибридной и многооблачной среды