当 RBAC 和 AAD 集成被激活时,如何授予服务主体对 AKS API 的访问权限?

当 RBAC 和 AAD 集成被激活时,如何授予服务主体对 AKS API 的访问权限?

我需要授予进程(构建管道)对 AKS API 的 RBAC 访问权限以进行部署。但目标 AKS 集群已启用 AAD 集成(如所述这里

我原本期望能够使用简单的服务主体访问 AKS API,但我被重定向到设备登录页面:

$ 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.

:-(

在 Azure 上 AAD 集成的 AKS 群集上对服务主体进行身份验证时,有没有办法避免使用 devicelogin 页面?

答案1

与@Festus Fashola 的答案不同,它的工作原理仅仅是因为它在命令中使用了--admin绕过 AAD 验证的标志(不是 OP 所要求的),现在正确的方法是使用 KubeLogin,它允许服务主体非交互式身份验证:https://github.com/Azure/kubelogin#service-principal-login-flow-non-interactive

使用示例:

# 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

答案2

对于那些仍然需要它的人来说。

我为我的 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

你应该没事的。

答案3

TL;DR:目前还不可能。
我向 Azure 支持人员提出了同样的问题,以下是他们的回答:

当 AKS 集群与 AAD 集成时,它将需要在验证集群访问时重定向到设备登录页面。

使用 Azure AD 访问群集 - https://docs.microsoft.com/en-us/azure/aks/aad-integration#access-cluster-with-azure-ad

不幸的是,这是目前的设计,目前没有其他方法可以避免这个过程,但我们很乐意听到您的意见。

请通过以下链接提供您的反馈,以便我们将来制定计划。

https://feedback.azure.com/forums/914020-azure-kubernetes-service-aks

相关内容