Использование управления доступом на основе ролей 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-definitiondeploy-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 см. в следующем разделе: