Чтобы определить доступ к файлу конфигурации 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 имеет одинаковый эффект от роли кластера Администратор.
Назначение разрешений роли пользователю или группе
Чтобы назначить одну из доступных ролей, необходимо получить идентификатор ресурса кластера 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_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.