我正在尝试在我们的(常规而非AKS)kubernetes群集和Azure AD之间设置SSO。 由于我不知道如何将令牌转发到kube-dashboard,因此我目前正在尝试在计算机上安装kubectl二进制文件。 当不涉及任何组,但是我们希望按安全组进行过滤(AAD上的帐户已从我们的本地Active Directory同步)时,它就可以工作,而无需涉及kube RBAC。
设置受https://medium.com/@olemarkus/using-azure-ad-to-authenticate-to-kubernetes-eb143d3cce10和https://docs.microsoft.com/fr-fr/azure/aks/azure-ad-integration的启发:
- --oidc-client-id=spn:abc123
- --oidc-issuer-url=https://sts.windows.net/OurAADTenantID
kubectl config set-cluster test-legacy-2 --server=https://192.168.x.y:4443 --certificate-authority=/somelocation/ca.pem
kubectl config set-credentials USER@mydomain.com --auth-provider=azure --auth-provider-arg=environment=AzurePublicCloud --auth-provider-arg=client-id=xyz456 --auth-provider-arg=tenant-id=OurAADTenantID --auth-provider-arg=apiserver-id=abc123
还要在Azure客户端应用清单中指定:
"allowPublicClient":true,
"oauth2AllowIdTokenImplicitFlow":true
否则出现错误“ 无法获取令牌:获取新的新令牌:等待设备代码身份验证完成:autorest / adal / devicetoken:检索OAuth令牌时出错:未知错误” 。 在https://github.com/MicrosoftDocs/azure-docs/issues/10326
上找到尝试根据https://kubernetes.io/docs/reference/access-authn-authz/authentication/#openid-connect-tokens在JWT中找到某个安全组进行过滤时,问题开始了
即使JWT Azure向我发送的确包含格式正确的组(字符串的json数组),我仍收到格式错误
配置:
"groupMembershipClaims": "SecurityGroup",
- --oidc-groups-claim=groups
- --oidc-required-claim=groups=bbc2eedf-79cd-4505-9fb4-39856ed3790e
,其中的字符串是我的目标安全组的GUID。
我在kubectl的输出中收到error: You must be logged in to the server (Unauthorized)
,而kube api服务器日志向我提供了authentication.go:62] Unable to authenticate the request due to an error: [invalid bearer token, [invalid bearer token, oidc: parse claim groups: json: cannot unmarshal array into Go value of type string]]
但是我不明白为什么当我解码我拥有的JWT时为什么不快乐
"groups": [
"00530f35-0013-4237-8947-6e3f6a7895ca",
"bbc2eedf-79cd-4505-9fb4-39856ed3790e",
"17dff614-fd68-4a38-906c-69561daec8b7"
],
据我所知,这是一个格式良好的json字符串数组...
为什么api服务器抱怨JWT?
答案 0 :(得分:0)
Ok so, Required claims must be a string, not an array of strings
但是我找到了解决方法。