本文概述了 AKS 中的系统分配和用户分配的托管标识,包括工作原理、角色分配和 AKS 特定的托管标识功能。
有关 Azure 中的托管标识的详细信息,请参阅 Azure 资源的托管标识文档。
注释
托管标识涵盖 AKS 中的 群集到 Azure 标识方案 - AKS 群集如何在 Azure 上代表您管理资源。 有关其他标识方案(控制平面身份验证和授权以及 Pod 到 Azure 工作负荷标识),请参阅 AKS 的访问和标识选项。
注释
系统分配的标识类型和用户分配的标识类型不同于 工作负荷标识,该标识适用于在 Pod 上运行的应用程序。
AKS 管理标识授权流
AKS 群集使用系统分配的或用户分配的 托管标识 来请求 Microsoft Entra 的令牌。 这些令牌有助于授权访问 Azure 中运行的其他资源。 将 Azure 基于角色的访问控制(Azure RBAC) 角色分配给托管标识,以向其授予特定 Azure 资源的权限。 例如,可以向托管标识授予权限,以访问 Azure 密钥保管库中的机密供群集使用。
AKS 中的托管标识行为
部署 AKS 群集时,默认情况下会为你创建系统分配的托管标识。 还可以使用用户分配的托管标识创建群集,或将现有群集更新为不同类型的托管标识。
如果群集已使用托管标识并更改标识类型(例如,从系统分配到用户分配),则控制平面组件切换到新标识时存在延迟。 控制平面组件会继续使用原有身份,直到该身份的令牌过期。 令牌刷新后,他们会切换到新的身份。 此过程可能需要几小时的时间。
注释
还可以使用应用程序 服务主体 而不是托管标识创建群集。 但是,出于安全性和易用性考虑,应优先使用托管标识,而不是应用程序服务主体。 如果有使用应用程序服务主体的现有群集,则可以将其更新为使用托管标识。
AKS 标识和凭据管理
Azure 平台同时管理系统分配的托管标识和用户分配的托管标识及其凭据,因此无需预配或轮换任何机密即可授权从应用程序进行访问。
系统分配的托管标识
下表总结了 AKS 中系统分配的托管标识的主要特征:
| 创建方式 | 生命周期行为 | 资源共享 | AKS 中的常见用例 |
|---|---|---|---|
| 作为 Azure 资源的一部分创建,例如 AKS 群集 | 绑定到父资源的生命周期,以便在删除父资源时将其删除 | 只能与单个资源关联 | • 单个 Azure 资源中包含的工作负荷 • 需要独立标识的工作负荷 |
用户分配的管理标识
下表总结了 AKS 中用户分配的托管标识的主要特征:
| 创建方式 | 生命周期行为 | 资源共享 | AKS 中的常见用例 |
|---|---|---|---|
| 创建为独立的 Azure 资源,在创建群集之前必须存在 | 独立于任何特定资源的生命周期,因此如果不再需要,则需要手动删除 | 可以在多个资源之间共享 | • 在多个资源上运行并可以共享单个标识的工作负荷 • 需要在供应过程中对安全资源进行预授权的工作负荷 • 资源被频繁重用但需要一致权限的工作负荷 |
预先创建的 kubelet 托管标识
预先创建的 kubelet 托管标识是一种可选的用户分配标识,kubelet 可用于访问 Azure 中的其他资源。 此功能允许在创建群集期间连接到 Azure 容器注册表(ACR)等方案。 如果未为 kubelet 指定用户分配的托管标识,AKS 会在节点资源组中创建用户分配的 kubelet 标识。 对于位于默认工作节点资源组之外的用户分配的 kubelet 标识,请将 托管标识操作员 角色授予集群的控制平面标识(无论该标识是系统分配的还是用户分配的),并将角色分配的作用域限定为该 kubelet 标识。
AKS 中托管身份的角色分配
可以将 Azure RBAC 角色分配给托管标识,从而为群集授予对其他 Azure 资源的权限。 Azure RBAC 支持指定权限级别的内置角色定义和自定义角色定义。 若要分配角色,请参阅 分配 Azure 角色的步骤。
在为托管标识分配 Azure RBAC 角色时,必须明确角色的范围。 一般情况下,最佳做法是将角色的范围限制为托管标识所需的最低权限。 有关确定 Azure RBAC 角色的范围的详细信息,请参阅 了解 Azure RBAC 的范围。
控制平面托管标识角色分配
创建和使用自己的 VNet、附加的 Azure 磁盘、静态 IP 地址、路由表或用户分配的 kubelet 标识时,资源位于辅助角色节点资源组之外时,Azure CLI 会自动添加角色分配。 如果使用 ARM 模板或其他方法,请使用托管标识的主体 ID 来执行角色分配。
如果不使用 Azure CLI,但使用的是自己的 VNet、附加的 Azure 磁盘、静态 IP 地址、路由表或用户分配的 kubelet 身份,并且这些资源位于工作节点资源组之外,我们建议使用用于控制平面的用户分配托管标识,并使用该标识的主体 ID 手动完成所需的角色分配。
当控制平面使用系统分配的托管标识时,可以在创建群集的同时创建标识,因此在群集创建之后才能执行角色分配。 创建群集后,获取该标识的主体 ID,并添加所需的角色分配项。
AKS 使用的托管标识摘要
AKS 使用多个托管身份来支持内置服务和加载项。 下表总结了 AKS 使用的托管标识、其用例、默认权限以及是否可以自带标识:
| 身份 | Name | 用例 | 默认权限 | 自带身份验证 |
|---|---|---|---|---|
| 控制面板 | AKS 群集名称 | AKS 控制平面组件用于管理群集资源,包括入口负载均衡器和 AKS 托管的公共 IP、群集自动缩放程序、Azure 磁盘、文件、Blob CSI 驱动程序 | 节点资源组的贡献者角色 | 已支持 |
| Kubelet | AKS 群集名称代理池 | 使用 Azure 容器注册表进行身份验证 (ACR) | 没有;需要基于注册表权限模式的 ACR 拉取角色 | 已支持 |
| 加载项 | AzureNPM | 不需要标识 | N/A | 不支持 |
| 加载项 | AzureCNI 网络监控 | 不需要标识 | N/A | 不支持 |
| 加载项 | azure-policy (Gatekeeper) | 不需要标识 | N/A | 不支持 |
| 加载项 | Calico | 不需要标识 | N/A | 不支持 |
| 加载项 | 应用程序路由 (NGINX) | 管理 Azure DNS 和 Azure 密钥保管库 证书 | 适用于 密钥保管库 的 密钥保管库 证书用户角色,以及适用于 DNS 区域的 DNS 区域参与者角色 | 不支持 |
| 加载项 | ingressapplicationgateway-AKS 群集名称 | 管理应用程序网关入口控制器(AGIC)所需的网络资源 | 取决于部署拓扑 | 不支持 |
| 加载项 | 容器洞察 | 收集容器日志和清单数据并将其发送到Log Analytics工作区 | 使用集群托管标识;不需要“监视指标发布者”角色 | 使用群集标识 |
| 加载项 | Virtual-Node (ACIConnector) | 管理 Azure 容器实例(ACI)所需的网络资源 | 节点资源组的贡献者角色 | 不支持 |
| 加载项 | 成本分析标识 | 收集用于成本分摊的 Azure 资源管理器 标识符 | 对节点资源组的读取权限 | 不支持 |
| 工作负载标识 | 用户配置的Microsoft Entra标识 | 使应用程序能够使用 Microsoft Entra 工作负荷 ID 安全地访问云资源 | 取决于工作负载所访问的资源 | Required |
注释
kubelet 身份需要具有 ACR 拉取角色。 对于处于 RBAC 注册表权限模式的注册表,请使用 AcrPull 角色。 对于处于 RBAC 注册表 + ABAC 存储库权限模式的注册表,请使用 Container Registry Repository Reader 角色。 仅当该标识需要列出存储库时,才添加 Container Registry Repository Catalog Lister 角色。 有关详细信息,请参阅 AKS 节点映射标识。
应用程序路由行描述了基于 NGINX 的体验。 Microsoft 为应用程序路由加载项 NGINX Ingress 资源的关键安全补丁提供支持,截至 2026 年 11 月。 到 2026 年 11 月,迁移到 应用程序路由网关 API 或其他受支持的实现。 Gateway API 的 DNS 和 TLS 集成使用 Microsoft Entra Workload ID,而不是加载项的托管标识。 对于 Gateway API,请创建用户分配的托管标识,向其授予所需的 Azure DNS 和 Azure 密钥保管库 的角色,并为 Kubernetes 服务帐户创建联合身份凭据。
AGIC 权限取决于部署应用程序网关的方式。 当加载项创建新的应用程序网关时,它通常会自动分配所需的权限。 如果需要手动分配权限,请在 Application Gateway 子网上向加载项标识授予“Network Contributor”角色。 对于位于与 AKS 群集不同资源组中的现有应用程序网关,请在该应用程序网关所在的资源组上向加载项标识授予“网络参与者”和“读取者”角色。 有关详细信息,请参阅 使用新的应用程序网关启用 AGIC ,并使用 现有应用程序网关启用 AGIC。
Container Insights 默认为托管标识身份验证,并使用群集托管标识将数据发送到Azure Monitor。 需要具备监控指标发布者角色的旧版身份验证将于 2026 年 9 月 30 日弃用。 Container Insights 在 Log Analytics 工作区中收集日志和清单数据;用于 Prometheus 的 Azure Monitor 托管服务则单独在 Azure Monitor 工作区中收集 Prometheus 指标。 有关详细信息,请参阅 Container Insights 身份验证。
AKS 创建 cost-analysis-identity 对节点资源组的读取访问权限,并在启用成本分析时将其分配给群集的节点池。 不能为加载项提供不同的标识。 有关详细信息,请参阅 “启用 AKS 成本分析”。
Microsoft Entra Workload ID 是一种从 Pod 到 Azure 的身份模型,而不是集群或加载项托管身份。 配置每个工作负载使用的 Microsoft Entra 标识,使用该标识的客户端 ID 对 Kubernetes 服务帐户进行注释,并创建联合标识凭据。 有关详细信息,请参阅部署和配置Microsoft Entra Workload ID。
后续步骤
使用以下指南在新的或现有的 AKS 群集上启用所需的托管标识类型: