Azure Kubernetes 服务(AKS)中的托管标识概述

本文概述了 AKS 中的系统分配和用户分配的托管标识,包括工作原理、角色分配和 AKS 特定的托管标识功能。

若要在新的或现有的 AKS 群集上启用托管标识,请参阅 在 Azure Kubernetes 服务(AKS)中使用托管标识。 有关 Azure 中的托管标识的详细信息,请参阅 Azure 资源的托管标识文档

注释

系统分配的标识类型和用户分配的标识类型不同于 工作负荷标识,该标识适用于在 Pod 上运行的应用程序。

AKS 管理标识授权流

AKS 群集使用系统分配的或用户分配的 托管标识 来请求 Microsoft Entra 的令牌。 这些令牌有助于授权访问 Azure 中运行的其他资源。 将 Azure 基于角色的访问控制(Azure RBAC) 角色分配给托管标识,以向其授予特定 Azure 资源的权限。 例如,可以向托管标识授予权限,以访问 Azure 密钥保管库中的机密供群集使用。

AKS 中的托管标识行为

部署 AKS 群集时,默认情况下会为你创建系统分配的托管标识。 还可以使用用户分配的托管标识创建群集,或将现有群集更新为不同类型的托管标识。

如果群集已使用托管标识并更改标识类型(例如,从系统分配到用户分配),则控制平面组件切换到新标识时存在延迟。 控制平面组件将继续使用旧标识,直到其令牌过期。 令牌刷新后,他们会切换到新的身份。 此过程可能需要几小时的时间。

注释

还可以创建具有应用程序 服务主体 的群集,而非托管标识。 但是,我们建议使用托管身份而不是应用程序服务主体,以便于实现安全性和易用性。 如果有使用应用程序服务主体的现有群集,则可以将其更新为使用托管标识。

AKS 标识和凭据管理

Azure 平台同时管理系统分配的托管标识和用户分配的托管标识及其凭据,因此无需预配或轮换任何机密即可授权从应用程序进行访问。

系统分配的托管标识

下表总结了 AKS 中系统分配的托管标识的主要特征:

创建 Lifecycle 跨资源共享 常见用例
作为 Azure 资源的一部分创建,例如 AKS 群集 绑定到父资源的生命周期,以便在删除父资源时将其删除 只能与单个资源关联 • 单个 Azure 资源中包含的工作负荷
• 需要独立标识的工作负荷

用户分配的管理标识

下表总结了 AKS 中用户分配的托管标识的主要特征:

创建 Lifecycle 跨资源共享 常见用例
创建为独立的 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 标识,我们建议为控制平面使用用户分配的托管标识

当控制平面使用系统分配的托管标识时,该标识与群集同时创建,因此在创建群集后才能执行角色分配。

AKS 使用的托管标识摘要

AKS 使用多个托管身份来支持内置服务和加载项。 下表总结了 AKS 使用的托管标识、其用例、默认权限以及是否可以自带标识:

身份 Name 用例 默认权限 自带身份验证
控制面板 AKS 群集名称 AKS 控制平面组件用于管理群集资源,包括入口负载均衡器和 AKS 托管的公共 IP、群集自动缩放程序、Azure 磁盘、文件、Blob CSI 驱动程序 节点资源组的贡献者角色 已支持
Kubelet AKS 群集名称代理池 使用 Azure 容器注册表进行身份验证 (ACR) 对于 Kubernetes 版本 1.15 及更高版本,不适用 已支持
加载项 AzureNPM 不需要标识 N/A 不支持
加载项 AzureCNI 网络监控 不需要标识 N/A 不支持
加载项 azure-policy (Gatekeeper) 不需要标识 N/A 不支持
加载项 Calico 不需要标识 N/A 不支持
加载项 应用程序路由 管理 Azure DNS 和 Azure Key Vault 证书 适用于 Key Vault 的 Key Vault 机密用户角色、适用于 DNS 区域的 DNS 区域参与者角色、适用于专用 DNS 区域的专用 DNS 区域参与者角色 不支持
加载项 HTTP应用程序路由 管理所需的网络资源 节点资源组的读取权限,DNS 区域的使用者权限 不支持
加载项 入口应用程序网关 管理所需的网络资源 节点资源组的贡献者角色 不支持
加载项 omsagent 用于将 AKS 指标发送到 Azure Monitor “监视指标发布者”角色 不支持
加载项 Virtual-Node (ACIConnector) 管理 Azure 容器实例(ACI)所需的网络资源 节点资源组的贡献者角色 不支持
加载项 成本分析 用于收集成本分配数据 N/A 已支持
工作负载标识 Microsoft Entra 工作负载 ID 使应用程序能够使用 Microsoft Entra 工作负荷 ID 安全地访问云资源 N/A 不支持

下一步:在 AKS 中启用托管标识

若要了解如何在新的或现有的 AKS 群集上启用托管标识,请参阅 在 Azure Kubernetes 服务(AKS)中使用托管标识