Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается, как использовать Azure RBAC для авторизации Kubernetes, которая обеспечивает унифицированное управление и управление доступом в ресурсах Azure, AKS и Kubernetes. Дополнительные сведения см. в статье Azure RBAC для авторизации в Kubernetes.
Примечание.
При использовании интегрированной проверки подлинности между Entra ID Microsoft и AKS можно использовать пользователей, группы или представителей служб Microsoft в качестве объектов для управления доступом на основе ролей Kubernetes (Kubernetes RBAC). С помощью этой функции вам не нужно отдельно управлять удостоверениями пользователей и учетными данными для Kubernetes. Однако вам по-прежнему необходимо настроить Azure RBAC и Kubernetes RBAC отдельно.
Прежде чем начать
- Вам потребуется установленный и настроенный Azure CLI версии 2.24.0 или более поздней. Чтобы узнать версию, выполните команду
az --version
. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0. - Вам нужен
kubectl
, с минимальной версией 1.18.3. - Перед добавлением Azure RBAC для авторизации Kubernetes необходимо включить управляемую интеграцию Microsoft Entra в вашем кластере. Если необходимо включить управляемую интеграцию Microsoft Entra, см. раздел "Использование идентификатора Microsoft Entra в AKS".
- Если у вас есть crD и создаются пользовательские определения ролей, единственным способом покрытия CRD сегодня является использование
Microsoft.ContainerService/managedClusters/*/read
. Для оставшихся объектов можно использовать определенные группы API, напримерMicrosoft.ContainerService/apps/deployments/read
. - Новые назначения ролей могут занять до пяти минут для распространения и обновления сервером авторизации.
- Azure RBAC для авторизации Kubernetes требует, чтобы клиент Microsoft Entra, настроенный для проверки подлинности, совпадал с клиентом для подписки, содержащей кластер AKS.
Создание кластера AKS с управляемой интеграцией Microsoft Entra и Azure RBAC для авторизации Kubernetes
Создайте группу ресурсов Azure с помощью
az group create
команды.export RESOURCE_GROUP=<resource-group-name> export LOCATION=<azure-region> az group create --name $RESOURCE_GROUP --location $LOCATION
Создайте кластер AKS с управляемой интеграцией Microsoft Entra и Azure RBAC для авторизации Kubernetes с помощью
az aks create
команды.export CLUSTER_NAME=<cluster-name> az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --enable-aad \ --enable-azure-rbac \ --generate-ssh-keys
Выходные данные должны выглядеть примерно так:
"AADProfile": { "adminGroupObjectIds": null, "clientAppId": null, "enableAzureRbac": true, "managed": true, "serverAppId": null, "serverAppSecret": null, "tenantId": "****-****-****-****-****" }
Включение Azure RBAC в существующем кластере AKS
Включите Azure RBAC для авторизации в Kubernetes в существующем кластере AKS, используя
az aks update
команду с флагом--enable-azure-rbac
.az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-azure-rbac
Отключение авторизации Azure RBAC для Kubernetes из кластера AKS
Удалите Azure RBAC для авторизации Kubernetes из существующего кластера AKS с помощью
az aks update
команды с флагом--disable-azure-rbac
.az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --disable-azure-rbac
Встроенные роли AKS
AKS предоставляет следующие встроенные роли:
Роль | Описание |
---|---|
Читатель ролей RBAC для Службы Kubernetes Azure | Разрешает доступ только для чтения, позволяя просматривать большинство объектов в пространстве имен. Это не позволяет просматривать роли или привязки ролей. Эта роль не разрешает просмотр Secrets , так как чтение содержимого секретов обеспечивает доступ к учетным данным ServiceAccount в пространстве имен, что позволит API получить доступ как к любому ServiceAccount в пространстве имен (форма эскалации привилегий). |
Модуль записи RBAC для службы Azure Kubernetes | Разрешает доступ для чтения и записи к большинству объектов в пространстве имен. Эта роль не позволяет просматривать или изменять роли или привязки ролей. Однако эта роль позволяет получить доступ к Secrets и запускать поды, используя любую учетную запись службы в пространстве имен. Таким образом, ее можно использовать для получения уровней доступа к API, присущих любой учетной записи службы в пространстве имен. |
Администратор RBAC для службы Azure Kubernetes | Предоставляет административный доступ, который следует назначать в пространстве имен. Разрешает доступ для чтения и записи к большинству ресурсов в пространстве имен (или области кластера), включая возможность создания ролей и привязок ролей в пространстве имен. Эта роль не разрешает доступ на запись к квоте ресурса или пространству имен. |
Администратор кластера RBAC для службы Azure Kubernetes | Разрешает доступ суперпользователя для выполнения любых действий с любым ресурсом. Он предоставляет полный контроль над каждым ресурсом в кластере и во всех пространствах имен. |
Создание назначений ролей для доступа к кластеру
Получите идентификатор ресурса AKS с помощью
az aks show
команды.AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)
Создайте назначение роли с помощью
az role assignment create
команды.<AAD-ENTITY-ID>
может быть именем пользователя или идентификатором клиента субъекта-службы. В следующем примере создается назначение роли для роли Администратор RBAC службы Azure Kubernetes.az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
Примечание.
Вы можете создать назначение ролей Роль RBAC для чтения в Azure Kubernetes и Роль RBAC для записи в Azure Kubernetes, охватывающих определенное пространство имен в кластере, используя команду
az role assignment create
и установив область действия для нужного пространства имен.az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>
Создание определений настраиваемых ролей
В следующем примере определение пользовательской роли позволяет пользователю читать только развертывания и больше ничего. Полный список возможных действий см. в разделе "Операции Microsoft.ContainerService".
Чтобы создать собственные определения пользовательских ролей, скопируйте следующий файл, заменив
<YOUR SUBSCRIPTION ID>
собственный идентификатор подписки, а затем сохраните его какdeploy-view.json
.{ "Name": "AKS Deployment Reader", "Description": "Lets you view all deployments in cluster/namespace.", "Actions": [], "NotActions": [], "DataActions": [ "Microsoft.ContainerService/managedClusters/apps/deployments/read" ], "NotDataActions": [], "assignableScopes": [ "/subscriptions/<YOUR SUBSCRIPTION ID>" ] }
Создайте определение роли, используя команду
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 Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
Используйте Azure RBAC для авторизации Kubernetes с помощью kubectl
Убедитесь, что у вас есть встроенная роль Пользователь кластера службы Azure Kubernetes, а затем получите kubeconfig вашего кластера AKS, используя команду
az aks get-credentials
.az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Теперь вы можете управлять кластером с помощью
kubectl
. Например, можно перечислить узлы в кластере с помощьюkubectl get nodes
.kubectl get nodes
Пример результата:
NAME STATUS ROLES AGE VERSION aks-nodepool1-93451573-vmss000000 Ready agent 3h6m v1.15.11 aks-nodepool1-93451573-vmss000001 Ready agent 3h6m v1.15.11 aks-nodepool1-93451573-vmss000002 Ready agent 3h6m v1.15.11
Использование Azure RBAC для авторизации Kubernetes с помощью kubelogin
AKS создал подключаемый kubelogin
модуль для разблокировки таких сценариев, как неинтерактивные имена входа, старые kubectl
версии или использование единого входа в нескольких кластерах без необходимости входа в новый кластер.
Используйте плагин
kubelogin
, выполнив следующую команду:export KUBECONFIG=/path/to/kubeconfig kubelogin convert-kubeconfig
Теперь вы можете использовать
kubectl
, чтобы управлять кластером. Например, можно перечислить узлы в кластере с помощьюkubectl get nodes
.kubectl get nodes
Пример результата:
NAME STATUS ROLES AGE VERSION aks-nodepool1-93451573-vmss000000 Ready agent 3h6m v1.15.11 aks-nodepool1-93451573-vmss000001 Ready agent 3h6m v1.15.11 aks-nodepool1-93451573-vmss000002 Ready agent 3h6m v1.15.11
Очистка ресурсов
Удаление назначения роли
Вывод списка назначений ролей с помощью
az role assignment list
команды.az role assignment list --scope $AKS_ID --query [].id --output tsv
Удалите назначения ролей с помощью
az role assignment delete
команды.az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
Удаление определения роли
Удалите определение пользовательской роли с помощью
az role definition delete
команды.az role definition delete --name "AKS Deployment Reader"
Удаление группы ресурсов и кластера AKS
Удалите группу ресурсов и кластер AKS с помощью
az group delete
команды.az group delete --name $RESOURCE_GROUP --yes --no-wait
Следующие шаги
Дополнительные сведения о проверке подлинности AKS, авторизации, Kubernetes RBAC и Azure RBAC см. в следующем разделе:
Azure Kubernetes Service