azure - AKS 群集托管标识中的 Nginx 服务无权读取 publicIPAddresses

标签 azure azure-aks azure-virtual-network

我正在通过 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/

相关文章:

security - 静态时的 Azure 服务总线安全性

azure - 使用 AKS 时如何修复 "Kibana server is not ready yet"错误

kubernetes - 如何检测 helm 图表中的 kubernetes 集群提供程序(eks、aks)?

azure - Azure VM 的多个公共(public) IP

azure - 本地 Azure 部署问题

azure - 如何使用 Microsoft.WindowsAzure.Storage.Table 的 TableOperators.Not 运算符

azure - AKS 节点池处于失败状态,PODS 全部挂起

azure - AppService VNet 集成失败

postgresql - 添加 NSG 规则以在 Azure PostgreSQL 灵活服务器上实现高可用性

Azure AKS : Full access to new RBAC cluster with get-credentials without admin