Чтобы определить доступ к файлу конфигурации 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:
Роль администратора кластера в Службе Azure Kubernetes
- Разрешает доступ к вызову
Microsoft.ContainerService/managedClusters/listClusterAdminCredential/action
API. Этот вызов API позволяет перечислить учетные данные администратора кластера. - Скачивание файла kubeconfig для роли clusterAdmin.
- Разрешает доступ к вызову
Роль пользователя кластера в Службе Azure Kubernetes
- Разрешает доступ к вызову
Microsoft.ContainerService/managedClusters/listClusterUserCredential/action
API. Этот вызов API позволяет перечислить учетные данные пользователя кластера. - Скачивание файла kubeconfig для роли clusterUser.
- Разрешает доступ к вызову
Примечание.
В кластерах, использующих идентификатор Microsoft Entra, пользователи с ролью clusterUser имеют пустой файл kubeconfig , который запрашивает имя входа. После входа пользователи получают доступ на основе параметров пользователя или группы Microsoft Entra. Пользователи с ролью clusterAdmin имеют доступ администратора.
В кластерах, не использующих идентификатор Microsoft Entra, роль clusterUser имеет тот же эффект роли clusterAdmin .
Назначение разрешений роли пользователю или группе
Чтобы назначить одну из доступных ролей, необходимо получить идентификатор ресурса кластера AKS и идентификатор учетной записи пользователя Или группы Microsoft Entra, выполнив следующие действия:
- Получите идентификатор ресурса кластера с помощью
az aks show
команды кластера с именем myAKSCluster в группе ресурсов myResourceGroup . При необходимости укажите имя вашей группы ресурсов и кластера. az account show
Используйте команды дляaz ad user show
получения идентификатора пользователя.- Назначьте роль с помощью
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_UPN userPrincipalName из пользователя 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.
Azure Kubernetes Service