Поделиться через


Использование управления доступом на основе ролей 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.
  • Чтобы использовать 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.

Выполните следующие действия на другом клиентском устройстве:

  1. Вход с помощью проверки подлинности Microsoft Entra

  2. Получите kubeconfig для подключения кластера к кластеру из любого места (даже вне брандмауэра, окружающего кластер):

    az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
    

    Примечание.

    Эта команда открывает прокси-сервер и блокирует текущую оболочку.

  3. В другом сеансе оболочки используйте для 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"

Следующие шаги