Управление доступом с помощью Azure AD и Служба Azure Kubernetes RBAC Kubernetes в Azure Stack HCI и Windows Server
Область применения: AKS в Azure Stack HCI и Windows Server
Служба Azure Kubernetes (AKS) в Azure Stack HCI и Windows Server можно настроить для использования Azure Active Directory (Azure AD) для проверки подлинности пользователей. В этой конфигурации вы входите в кластер AKS с помощью маркера проверки подлинности Azure AD. После проведения проверки подлинности вы можете использовать встроенное управление доступом на основе ролей Kubernetes (Kubernetes RBAC) для управления доступом к пространствам имен и ресурсам кластера на основе идентификатора пользователя или членства в группе.
В этой статье показано, как управлять доступом с помощью Kubernetes RBAC в кластере AKS на основе членства в группе Azure AD. Вы создадите демонстрационную группу и пользователей в Azure AD. Затем вы создадите роли и RoleBindings в кластере AKS, чтобы предоставить соответствующие разрешения на создание и просмотр ресурсов.
Предварительные требования
Прежде чем настроить Kubernetes RBAC с помощью удостоверения Azure AD, вам потребуется:
Кластер AKS с AKS в Azure Stack HCI и Windows Server
Вам потребуется кластер AKS с AKS в Azure Stack HCI и Windows Server. Если вам нужно настроить кластер, вы можете найти инструкции по использованию Windows Admin Center или PowerShell для развертывания AKS в Azure Stack HCI и Windows Server.
Подключение к Azure Arc
Вам потребуется подключение Azure Arc к кластеру AKS в Azure Stack HCI и Windows Server. Инструкции по включению Azure Arc см. в статье "Подключение Служба Azure Kubernetes в кластере Azure Stack HCI к Kubernetes с поддержкой Azure Arc".
Вам потребуется доступ к следующим средствам командной строки:
Azure CLI
Интерфейс командной строки (Azure CLI) — это набор команд для создания ресурсов Azure и управления ими. Чтобы проверить наличие Azure CLI, откройте программу командной строки и введите:
az -v
Инструкции по установке см. в статье " Установка Azure CLI".
Kubectl.
Средство командной строки Kubernetes kubectl позволяет выполнять команды, предназначенные для кластеров Kubernetes. Чтобы проверить наличие kubectl, откройте программу командной строки и введите:
kubectl version --client
Убедитесь, что версия клиента kubectl не нижеv1.24.0
.Инструкции см. в kubectl.
PowerShell и модуль PowerShell AksHci
PowerShell — это кроссплатформенное решение для автоматизации задач, которое включает оболочку командной строки, скриптовый язык и платформу управления конфигурацией. Если вы установили AKS в Azure Stack HCI и Windows Server, у вас будет доступ к модулю PowerShell AksHci.
Необязательные первые шаги
Если у вас еще нет группы Azure AD, содержащей участников, может потребоваться создать группу и добавить некоторых участников, чтобы следовать инструкциям в этой статье.
Чтобы продемонстрировать работу с Azure AD и Kubernetes RBAC, можно создать группу Azure AD для разработчиков приложений, которые можно использовать для демонстрации того, как Kubernetes RBAC и Azure AD управлять доступом к ресурсам кластера. В рабочей среде можно использовать существующих пользователей и группы в клиенте Azure AD.
Создание демонстрационной группы в Azure AD
Сначала создайте группу в Azure AD в клиенте для разработчиков приложений с помощью команды az ad group create. В следующем примере вы входите в клиент Azure, а затем создаете группу с именем appdev:
az login
az ad group create --display-name appdev --mail-nickname appdev
Добавление пользователей в группу
С помощью примера группы, созданной в Azure AD для разработчиков приложений, давайте добавим пользователя в группуappdev
. Чтобы проверить интеграцию Kubernetes RBAC в конце статьи, войдите в кластер AKS с помощью этой учетной записи пользователя.
Добавьте пользователя в группу appdev , созданную в предыдущем разделе, с помощью команды az ad group member add . Если вы вышли из сеанса, вам потребуется повторно подключиться к Azure с помощью az login
.
$AKSDEV_ID = az ad user create --display-name <name> --password <strongpassword> --user-principal-name <name>@contoso.onmicrosoft.com
az ad group member add --group appdev --member-id $AKSDEV_ID
Создание пользовательской привязки роли RBAC Kubernetes в ресурсе кластера AKS для группы Azure AD
Настройте кластер AKS, чтобы разрешить группе Azure AD доступ к кластеру AKS. Если вы хотите добавить группу и пользователей для выполнения действий, описанных в этом руководстве, см. статью "Создание демонстрационных групп" в Azure AD.
Получите учетные данные администратора кластера с помощью команды Get-AksHciCredential .
Get-AksHciCredential -name <name-of-your-cluster>
Создайте пространство имен в кластере AKS с помощью команды kubectl Create Namespace. В следующем примере создается пространство имен dev:
kubectl create namespace dev
В Kubernetes роли определяют разрешения на предоставление, а RoleBindings применяют разрешения для нужных пользователей или групп. Эти назначения можно применять к заданному пространству имен или всему кластеру. Дополнительные сведения см. в разделе Использование авторизации RBAC Kubernetes.
Создайте роль для пространства имен разработки . Эта роль предоставляет полные разрешения на пространство имен. В рабочих средах может потребоваться указать более детализированные разрешения для разных пользователей или групп.
Создайте файл
role-dev-namespace.yaml
и вставьте в него следующий манифест YAML:kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: dev-user-full-access namespace: dev rules: - apiGroups: ["", "extensions", "apps"] resources: ["*"] verbs: ["*"] - apiGroups: ["batch"] resources: - jobs - cronjobs verbs: ["*"]
Создайте Role с помощью команды kubectl apply и укажите имя файла манифеста YAML:
kubectl apply -f role-dev-namespace.yaml
Получите идентификатор ресурса для группы appdev с помощью команды az ad group show . Эта группа задается в качестве субъекта RoleBinding на следующем шаге.
az ad group show --group appdev --query objectId -o tsv
Az ad group вернет значение, которое будет использоваться в качестве
groupObjectId
.38E5FA30-XXXX-4895-9A00-050712E3673A
Создайте файл
rolebinding-dev-namespace.yaml
и вставьте в него следующий манифест YAML. Вы устанавливаете RoleBinding для группы appdev , чтобы использовать роль для доступа к пространствуrole-dev-namespace
имен. В последней строке заменитеgroupObjectId
идентификатор объекта группы, созданный командойaz ad group show
:kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: dev-user-access namespace: dev roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: dev-user-full-access subjects: - kind: Group namespace: dev name: groupObjectId
Совет
Если вы хотите создать RoleBinding для одного пользователя, укажите
kind: User
и заменитеgroupObjectId
его именем участника-пользователя (UPN) в примере.Создайте RoleBinding с помощью команды kubectl apply и укажите имя файла манифеста YAML:
kubectl apply -f rolebinding-dev-namespace.yaml
rolebinding.rbac.authorization.k8s.io/dev-user-access created
Использование встроенных ролей RBAC Kubernetes для ресурса кластера AKS
Kubernetes также предоставляет встроенные роли, доступные для пользователей. К этим встроенным ролям относятся:
- Роли суперпользоваемых пользователей (cluster-admin)
- Роли, предназначенные для предоставления кластеру на уровне кластера с помощью ClusterRoleBindings
- Роли, которые должны быть предоставлены в определенных пространствах имен с помощью RoleBindings (admin, edit, view)
Дополнительные сведения о встроенных ролях RBAC Kubernetes см. в статье о ролях пользователей Kubernetes RBAC.
Роли, доступные для пользователей
ClusterRole по умолчанию | ClusterRoleBinding по умолчанию | Описание |
---|---|---|
администратор кластера | группа system:master | Разрешает доступ суперпользователя для выполнения любых действий с любым ресурсом. При использовании в ClusterRoleBinding он обеспечивает полный контроль над каждым ресурсом в кластере и во всех пространствах имен. При использовании в RoleBinding он обеспечивает полный контроль над каждым ресурсом в пространстве имен привязки роли, включая само пространство имен. |
admin | Нет | Разрешает доступ администратора, предназначенный для предоставления в пространстве имен с помощью RoleBinding. При использовании в RoleBinding разрешает доступ на чтение и запись к большинству ресурсов в пространстве имен, включая возможность создания ролей и привязок ролей в пространстве имен. Эта роль не разрешает доступ на запись к квоте ресурса или пространству имен. Эта роль также не разрешает доступ на запись к конечным точкам в кластерах, созданных с помощью Kubernetes версии 1.22+. Дополнительные сведения см. в разделе "Доступ на запись для конечных точек ". |
изменение; | Нет | Разрешает доступ для чтения и записи к большинству объектов в пространстве имен. Эта роль не позволяет просматривать или изменять роли или привязки ролей. Однако эта роль позволяет получить доступ к секретам и запускать поды как любую учетную запись службы в пространстве имен. Поэтому эту роль можно использовать для получения уровней доступа API любой учетной записи службы в пространстве имен. Эта роль также не разрешает доступ на запись к конечным точкам в кластерах, созданных с помощью Kubernetes версии 1.22+. Дополнительные сведения см. в разделе "Доступ на запись для конечных точек ". |
view | Нет | Разрешает доступ только для чтения, позволяя просматривать большинство объектов в пространстве имен. Оно не позволяет просматривать роли или привязки ролей. Эта роль не позволяет просматривать секреты, так как чтение содержимого секретов обеспечивает доступ к учетным данным ServiceAccount в пространстве имен, что разрешает доступ к API как любой ServiceAccount в пространстве имен (форма повышения привилегий). |
Использование встроенной роли RBAC Kubernetes с Azure AD
Примените встроенную
view
роль RBAC Kubernetes к группе Azure AD:kubectl create clusterrolebinding <name of your cluster role binding> --clusterrole=view --group=<Azure AD group object ID>
Примените встроенную
view
роль RBAC Kubernetes к каждому из пользователей Azure AD:kubectl create clusterrolebinding <name of your cluster role binding> --clusterrole=view --user=<Azure AD user object ID>
Работа с ресурсами кластера с помощью удостоверений Azure AD
Проверьте ожидаемые разрешения при создании ресурсов и управлении ими в кластере AKS. В этих примерах вы запланируете и просмотрите модули pod в назначенном пользователем пространстве имен. Затем вы попытаетесь запланировать и просмотреть модули pod за пределами назначенного пространства имен.
Войдите в Azure, используя
$AKSDEV_ID
учетную запись пользователя, переданную в качестве входных данных вaz ad group member add
команду.az connectedk8s proxy
Выполните команду, чтобы открыть канал в кластере AKS:az connectedk8s proxy -n <cluster-name> -g <resource-group>
После установки прокси-канала откройте еще один сеанс и запланируйте pod NGINX с помощью команды kubectl run в пространстве имен разработки :
kubectl run nginx-dev --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace dev
После успешного планирования NGINX вы увидите следующие выходные данные:
pod/nginx-dev created
Воспользуйтесь командой kubectl get pods для просмотра всех объектов pod в пространстве имен dev.
kubectl get pods --namespace dev
После успешного выполнения NGINX вы увидите следующие выходные данные:
$ kubectl get pods --namespace dev NAME READY STATUS RESTARTS AGE nginx-dev 1/1 Running 0 4m
Создание и просмотр ресурсов кластера за пределами назначенного пространства имен
Попытка просмотра модулей pod за пределами пространства имен разработки . Используйте команду kubectl get pods с флагом --all-namespaces
.
kubectl get pods --all-namespaces
Членство пользователя в группах не имеет роли Kubernetes, которая разрешает это действие. Без разрешения команда вызовет ошибку.
Error from server (Forbidden): pods is forbidden: User cannot list resource "pods" in API group "" at the cluster scope
Дальнейшие действия
Дополнительные сведения о безопасности с помощью AKS в Azure Stack HCI и Windows Server см. в статье "Безопасность в AKS в Azure Stack HCI и Windows Server"