Чтобы определить доступ к файлу конфигурации Kubernetes в службе Azure Kubernetes (AKS), используйте управление доступом на основе ролей Azure.

Вы можете взаимодействовать с кластерами Kubernetes с помощью инструмента kubectl. Azure CLI предоставляет простой способ получить учетные данные доступа и файл конфигурации kubeconfig для подключения к кластерам AKS с помощью kubectl. Вы можете использовать управление доступом на основе ролей Azure (Azure RBAC), чтобы ограничить доступ к файлу kubeconfig и разрешениям, которые у них есть.

В этой статье показано, как назначить роли Azure, чтобы ограничить доступ к сведениям о конфигурации для кластера AKS.

Подготовка к работе

  • В этой статье предполагается, что у вас есть кластер AKS. Если вам нужен кластер AKS, создайте его с помощью Azure CLI, Azure PowerShell или портал Azure.
  • В этой статье также требуется, чтобы вы работали с Azure CLI версии 2.0.65 или более поздней. Чтобы узнать версию, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.

Доступные разрешения для ролей кластера

При взаимодействии с кластером AKS с помощью kubectl средства файл конфигурации, называемый kubeconfig, определяет сведения о подключении кластера. Этот файл конфигурации обычно хранится в ~/.kube/config. В файле kubeconfig можно определить несколько кластеров. Вы можете переключаться между кластерами с помощью kubectl config use-context команды.

Команда az aks get-credentials позволяет получить учетные данные доступа для кластера AKS и объединить эти учетные данные в файл kubeconfig . Azure RBAC можно использовать для управления доступом к этим учетным данным. Эти роли Azure позволяют определить, кто может получить файл kubeconfig и какие разрешения они имеют в кластере.

Существует две роли Azure, которые можно применить к пользователю или группе Microsoft Entra:

Примечание.

В кластерах, использующих идентификатор Microsoft Entra, пользователи с ролью clusterUser имеют пустой файл kubeconfig , который запрашивает имя входа. После входа пользователи получают доступ на основе параметров пользователя или группы Microsoft Entra. Пользователи с ролью clusterAdmin имеют доступ администратора.

В кластерах, не использующих идентификатор Microsoft Entra, роль clusterUser имеет одинаковый эффект от роли кластера Администратор.

Назначение разрешений роли пользователю или группе

Чтобы назначить одну из доступных ролей, необходимо получить идентификатор ресурса кластера AKS и идентификатор учетной записи пользователя Или группы Microsoft Entra, выполнив следующие действия:

  1. Получите идентификатор ресурса кластера с помощью az aks show команды кластера с именем myAKSCluster в группе ресурсов myResourceGroup . При необходимости укажите имя вашей группы ресурсов и кластера.
  2. az account show Используйте команды для az ad user show получения идентификатора пользователя.
  3. Назначьте роль с помощью az role assignment create команды.

В приведенном ниже примере назначается роль администратора кластера Службы Azure Kubernetes для индивидуальной учетной записи пользователя:

# Get the resource ID of your AKS cluster
AKS_CLUSTER=$(az aks show --resource-group myResourceGroup --name myAKSCluster --query id -o tsv)

# Get the account credentials for the logged in user
ACCOUNT_UPN=$(az account show --query user.name -o tsv)
ACCOUNT_ID=$(az ad user show --id $ACCOUNT_UPN --query objectId -o tsv)

# Assign the 'Cluster Admin' role to the user
az role assignment create \
    --assignee $ACCOUNT_ID \
    --scope $AKS_CLUSTER \
    --role "Azure Kubernetes Service Cluster Admin Role"

Если вы хотите назначить разрешения группе Microsoft Entra, обновите параметр, показанный --assignee в предыдущем примере с идентификатором объекта для группы, а не пользователем.

Чтобы получить идентификатор объекта для группы, используйте az ad group show команду. Следующая команда получает идентификатор объекта для группы Microsoft Entra с именем appdev:

az ad group show --group appdev --query objectId -o tsv

Важно!

В некоторых случаях, например гостевых пользователей Microsoft Entra, user.name в учетной записи отличается от userPrincipalName.

$ az account show --query user.name -o tsv
user@contoso.com

$ az ad user list --query "[?contains(otherMails,'user@contoso.com')].{UPN:userPrincipalName}" -o tsv
user_contoso.com#EXT#@contoso.onmicrosoft.com

В этом случае задайте значение ACCOUNT_UPNuserPrincipalName из пользователя Microsoft Entra. Например, если ваша учетная запись user.name , user@contoso.comэто действие будет выглядеть следующим образом:

ACCOUNT_UPN=$(az ad user list --query "[?contains(otherMails,'user@contoso.com')].{UPN:userPrincipalName}" -o tsv)

Получение и проверка сведений о конфигурации

После назначения ролей используйте az aks get-credentials команду, чтобы получить определение kubeconfig для кластера AKS. В следующем примере получаются учетные данные --admin, которые работают правильно, если пользователю предоставлена роль кластера Администратор:

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster --admin

Затем можно использовать kubectl config view команду, чтобы убедиться, что контекст кластера показывает, что применены сведения о конфигурации администратора.

$ kubectl config view

Выходные данные должны выглядеть примерно так:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://myaksclust-myresourcegroup-19da35-4839be06.hcp.eastus.azmk8s.io:443
  name: myAKSCluster
contexts:
- context:
    cluster: myAKSCluster
    user: clusterAdmin_myResourceGroup_myAKSCluster
  name: myAKSCluster-admin
current-context: myAKSCluster-admin
kind: Config
preferences: {}
users:
- name: clusterAdmin_myResourceGroup_myAKSCluster
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
    token: e9f2f819a4496538b02cefff94e61d35

Удаление разрешений ролей

Чтобы удалить назначения ролей, используйте az role assignment delete команду. Укажите идентификатор учетной записи и идентификатор ресурса кластера, полученный на предыдущих шагах. Если роль назначена группе, а не пользователю, укажите соответствующий идентификатор объекта группы, а не идентификатор объекта учетной записи для --assignee параметра.

az role assignment delete --assignee $ACCOUNT_ID --scope $AKS_CLUSTER

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

Для повышения безопасности доступа к кластерам AKS интегрируйте проверку подлинности Microsoft Entra.