我正在通过 Azure CLI 创建 AKS 群集。
类似于:
az aks create
--resource-group RESOURCE-GROUP
--name "mycluster"
--enable-managed-identity
--network-plugin "azure"
--no-ssh-key
...
创建后,我获得了托管身份mycluster-agentpool。我已将该身份添加到 PublicIP 所在的资源组中的“网络贡献者”角色。我等了一个多小时。
但我仍然从 nginx 服务收到此错误:
network.PublicIPAddressesClient#List: Failure responding to request: StatusCode=403 --
Original Error: autorest/azure: Service returned an error.
Status=403
Code="AuthorizationFailed"
Message="The client '00000000-0000-0000-0000-00000000' with object id '00000000-0000-0000-0000-00000000' does not have authorization to perform action
'Microsoft.Network/publicIPAddresses/read' over scope
'/subscriptions/00000000-0000-0000-0000-00000000/resourceGroups/RESOURCE-GROUP/providers/Microsoft.Network' or the scope is invalid.
If access was recently granted, please refresh your credentials."
我觉得奇怪的是,创建集群并查询“身份”后:
az aks show -g RESOURCE-GROUP -n mycluster --query "identity"
我得到(示例 GUID):
{
"principalId": "00000000-1234-1234-1234-00000000",
"tenantId": "00000000-5678-5678-5678-00000000",
"type": "SystemAssigned",
"userAssignedIdentities": null
}
这个principalId与mycluster-agentpool身份的ObjectId不匹配,我找不到它所属的任何地方,因为我怀疑principalId是需要权限的身份。
nginx 服务尝试以什么身份进行连接?
最佳答案
根据研究,我发现当您为 AKS 启用托管身份时,AKS 的属性会显示带有 MSI 的 servicePrincipalProfile
。当您想要关联另一个资源组中的公共(public) IP 地址时,您需要将“网络贡献者”角色授予 AKS 的托管身份,您可以通过 CLI 获取主体 Id,如下所示:
az aks show -g RESOURCE-GROUP -n mycluster --query "identity.principalId"
您将获得有关托管身份的更多详细信息 here为“网络贡献者”。它显示控制平面的身份管理网络资源,包括入口负载均衡器和 AKS 管理的公共(public) IP。上面的 CLI 命令向您显示了控制平面的身份。
此主体 Id 是一个对象 Id,您可以通过 CLI 获取服务主体,如下所示:
az ad sp show --id principalId
关于azure - AKS 群集托管标识中的 Nginx 服务无权读取 publicIPAddresses,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64934205/