Как предоставить сервисному принципалу доступ к AKS API при активации интеграции RBAC и AAD?
Мне нужно предоставить процессу (построить конвейер) доступ RBAC к AKS API для целей развертывания. Но целевой кластер AKS имеет активную интеграцию AAD (как описано здесь)
Я ожидал, что смогу получить доступ к API AKS с помощью простого Принципала обслуживания, но я перенаправлен на страницу DeviceLogin:
$ az login --service-principal --username [REDACTED]-XXXX-XXXX-XXXX-XXXXXXXXXXXX --password [REDACTED]XXxxXXxxXXxxxXXXxxXXxxXXxx= --tenant [REDACTED]-XXXX-XXXX-XXXX-XXXXXXXXXXXX
$ az aks get-credentials -n oli-aksdemo01 -g oli-aksdemo01
Merged "oli-aksdemo01" as current context in /home/olivier/.kube/config
$ kubectl get nodes
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code C2NP77EGR to authenticate.
:-(
Есть ли способ избежать страницы лога устройства при аутентификации субъекта-службы в кластере AKS, интегрированном с AAD, в Azure?
3 ответа
В отличие от ответа @Festus Fashola, который работает просто потому, что использует
Пример использования:
# login
az login --service-principal --username <sp_client_id> --password <password> --tenant <tenant>
# Get the admin credentials for the kubeconfig context
az aks get-credentials --resource-group <resource_group> --name <aks_name>
# convert your kubeconfig file
kubelogin convert-kubeconfig -l spn
# export variables with sp credentials
export AAD_SERVICE_PRINCIPAL_CLIENT_ID=<sp_client_id>
export AAD_SERVICE_PRINCIPAL_CLIENT_SECRET=<sp_password>
# run any kubectl command, you shouldn't get the devicelogin verification message
kubectl get pods
Для всех, кому это еще нужно.
Я решил ту же проблему для своего конвейера Jenkins. Все, что вам нужно сделать, — это создать субъект-службу с областью кластера или подпиской.
#login
az login --service-principal --username <app-key> --password <password> --tenant <tenant>
# Get the admin credentials for the kubeconfig context
az aks get-credentials --resource-group $resourcegroup --name $aksname --admin
#
kubectl get pods
с тобой должно быть все в порядке.
TL;DR: пока невозможно.
Я задал тот же вопрос службе поддержки Azure, и вот их ответ:
Когда кластер AKS интегрирован с AAD, для аутентификации для доступа к кластеру потребуется перенаправление на страницу входа устройства.
Доступ к кластеру с помощью Azure AD - https://docs.microsoft.com/en-us/azure/aks/aad-integration
К сожалению, в настоящее время это сделано специально, и на данный момент нет другого способа избежать этого процесса, но мы хотели бы услышать ваш голос.
Не могли бы вы оставить свой отзыв по ссылкам ниже, чтобы мы могли планировать в будущем.
https://feedback.azure.com/forums/914020-azure-kubernetes-service-aks