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


Использование управления доступом на основе ролей Azure (RBAC) для авторизации Kubernetes

Применяется для: AKS на Azure Local

Администраторы инфраструктуры могут использовать управление доступом на основе ролей 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 Local в настоящее время поддерживает включение Azure RBAC только во время создания кластера Kubernetes. После создания кластера Kubernetes невозможно включить Azure RBAC.

  • Вы можете включить Azure RBAC с помощью Azure CLI или портала Azure. Чтобы использовать Azure CLI, необходимо установить последние версии расширений 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 требуются следующие разрешения:

  • После включения Azure RBAC вы можете получить доступ к кластеру Kubernetes с заданными разрешениями с помощью прямого или прокси-режима.

    • Чтобы получить прямой доступ к кластеру Kubernetes с помощью команды az aksarc get-credentials, вам потребуется разрешение Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action, которое входит в состав разрешений роли пользователь кластера Azure Kubernetes Service Arc.
    • Чтобы получить доступ к кластеру Kubernetes из любого места, используя режим прокси-сервера с помощью команды az connectedk8s proxy или портала Azure, вам потребуется действие Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action, которое входит в разрешение роли пользователя кластера Kubernetes с поддержкой Azure Arc. Между тем необходимо убедиться, что агенты и компьютер, выполняющие процесс подключения, соответствуют требованиям сети, указанным в требованиях к сети с поддержкой Azure Arc Kubernetes.
  • Чтобы использовать kubectl, вы можете получить к нему доступ с помощью Azure RBAC или группы администрирования AAD.

    • Чтобы использовать kubectl с Azure RBAC, вам потребуется роль Azure Arc Kubernetes Viewer, назначенная на подключенный ресурс кластера.
    • Чтобы использовать kubectl с группой администраторов AAD, вам не нужна какая-либо конкретная роль, но необходимо убедиться, что вы являетесь членом одной из групп в списке add-admin-group подключенного ресурса кластера.

Шаг 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.

Должность Описание
Пользователь кластера Kubernetes с поддержкой Azure Arc Позволяет получить файл kubeconfig, основанный на Cluster Connect, для управления кластерами из любого места.
Зритель Kubernetes Azure Arc Предоставляет доступ только для чтения, позволяя просматривать большинство объектов в пространстве имен.
Не разрешает просмотр секретов, так как разрешение на чтение секретов обеспечивает доступ к учетным данным ServiceAccount в пространстве имен. Эти учетные данные, в свою очередь, через это значение ServiceAccount предоставляют доступ к API (форма эскалации привилегий).
Автор Azure Arc Kubernetes Разрешает доступ на чтение и запись к большинству объектов в пространстве имен.
Не допускает просмотр или изменение ролей или привязок ролей. Однако эта роль позволяет получать доступ к секретам и запускать модули как любое значение ServiceAccount в пространстве имен, поэтому её можно использовать для получения уровней доступа API любого такого значения ServiceAccount в пространстве имен.
Администратор Azure Arc Kubernetes Разрешает административный доступ. Он предназначен для использования в пространстве имен с помощью 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, которое входит в разрешение роли пользователя кластера Azure Kubernetes Service Arc :

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, вам необходимо разрешение Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action, которое включено в разрешение роли Пользователя кластера Kubernetes с поддержкой Azure Arc.

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

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

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

    az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
    

    Замечание

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

  3. В другом сеансе оболочки используйте kubectl для отправки запросов в кластер.

    kubectl get pods -A
    

Теперь вы должны увидеть ответ от кластера, содержащий список всех подов в пространстве имен 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"

Дальнейшие шаги