Использование управления доступом на основе ролей Azure для авторизации Kubernetes
При использовании интегрированной проверки подлинности между идентификатором Microsoft Entra и AKS можно использовать пользователей, групп или субъектов-служб Microsoft в качестве субъектов управления доступом на основе ролей Kubernetes (Kubernetes RBAC). Эта возможность освобождает вас от отдельного управления удостоверениями пользователей и учетными данными для Kubernetes. Но Azure RBAC и Kubernetes RBAC по-прежнему нужно настраивать отдельно.
В этой статье описывается, как использовать Azure RBAC для авторизации Kubernetes, которая обеспечивает унифицированное управление и управление доступом в ресурсах Azure, AKS и Kubernetes. Дополнительные сведения см. в статье Azure RBAC для авторизации Kubernetes.
Подготовка к работе
- Вам потребуется 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
команды.
az group create --name myResourceGroup --location westus2
Создайте кластер AKS с управляемой интеграцией Microsoft Entra и Azure RBAC для авторизации Kubernetes с помощью az aks create
команды.
az aks create -g myResourceGroup -n myManagedCluster --enable-aad --enable-azure-rbac
Выходные данные будут выглядеть примерно так:
"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 -g myResourceGroup -n myAKSCluster --enable-azure-rbac
Отключение авторизации Azure RBAC для Kubernetes из кластера AKS
Удалите Azure RBAC для авторизации Kubernetes из существующего кластера AKS с помощью az aks update
команды с флагом disable-azure-rbac
.
az aks update -g myResourceGroup -n myAKSCluster --disable-azure-rbac
Создание назначений ролей для доступа пользователей к кластеру
AKS предоставляет следующие встроенные роли:
Роль | Description |
---|---|
Читатель RBAC для Службы контейнеров Azure | Разрешает доступ только для чтения, позволяя просматривать большинство объектов в пространстве имен. Оно не позволяет просматривать роли или привязки ролей. Эта роль не разрешает просмотр Secrets , так как чтение содержимого секретов обеспечивает доступ к учетным данным ServiceAccount в пространстве имен, что позволит API получить доступ как к любому ServiceAccount в пространстве имен (форма эскалации привилегий). |
Модуль записи RBAC для службы Azure Kubernetes | Разрешает доступ для чтения и записи к большинству объектов в пространстве имен. Эта роль не позволяет просматривать или изменять роли или привязки ролей. Однако эта роль позволяет получить доступ к Secrets и запускать поды как любую учетную запись службы в пространстве имен. Поэтому эту роль можно использовать для получения уровней доступа API любой учетной записи службы в пространстве имен. |
Администратор RBAC для службы Azure Kubernetes | Предоставляет административный доступ, предназначенный для предоставления в пространстве имен. Разрешает доступ для чтения и записи к большинству ресурсов в пространстве имен (или области кластера), включая возможность создания ролей и привязок ролей в пространстве имен. Эта роль не разрешает доступ на запись к квоте ресурса или пространству имен. |
Администратор кластера RBAC для службы Azure Kubernetes | Разрешает доступ суперпользователя для выполнения любых действий с любым ресурсом. Он предоставляет полный контроль над каждым ресурсом в кластере и во всех пространствах имен. |
Назначения ролей, область область для всего кластера AKS, можно выполнить в колонке контроль доступа (IAM) ресурса кластера портал Azure или с помощью следующих команд Azure CLI:
Получите идентификатор ресурса AKS с помощью az aks show
команды.
AKS_ID=$(az aks show -g myResourceGroup -n myManagedCluster --query id -o tsv)
Создайте назначение роли с помощью az role assignment create
команды. <AAD-ENTITY-ID>
может быть именем пользователя или идентификатором клиента субъекта-службы.
az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
Примечание.
Вы можете создать Служба Azure Kubernetes средства чтения RBAC и Служба Azure Kubernetes назначения ролей записи RBAC, область в определенное пространство имен в кластере с помощью az role assignment create
команды и задания область в нужное пространство имен.
az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>
Примечание.
В портал Azure после создания назначений ролей область в нужное пространство имен вы не сможете увидеть "назначения ролей" для пространства имен в область. Его можно найти с помощью az role assignment list
команды или перечисления назначений ролей для пользователя или группы, которому назначена роль.
az role assignment list --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 -g myResourceGroup -n myManagedCluster
Теперь вы можете управлять kubectl
кластером. Например, можно перечислить узлы в кластере с помощью kubectl get nodes
. При первом запуске необходимо выполнить вход, как показано в следующем примере:
kubectl get nodes
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.
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
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.
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
Очистка ресурсов
Удаление назначения роли
# List role assignments
az role assignment list --scope $AKS_ID --query [].id -o tsv
# Delete role assignments
az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
Удаление определения роли
az role definition delete -n "AKS Deployment Reader"
Удаление группы ресурсов и кластера AKS
az group delete -n myResourceGroup
Следующие шаги
Дополнительные сведения о проверке подлинности AKS, авторизации, Kubernetes RBAC и Azure RBAC см. в следующем разделе: