为群集集成 Microsoft Entra ID

已完成

保护对群集的访问和来自群集的访问至关重要。 在做出安全选择时,请从群集的角度思考:

  • 由内向外的访问。 AKS 访问 Azure 组件,例如网络基础结构、Azure 容器注册表和 Azure Key Vault。 仅授权允许群集访问的这些资源。
  • 由外向内的访问。 提供对 Kubernetes 群集的标识访问权限。 仅授权允许访问 Kubernetes API 服务器和 Azure 资源管理器的外部实体。

AKS 对 Azure 的访问

可以通过 Microsoft Entra ID 使用两种方式来管理 AKS 到 Azure 的访问权限:服务主体或者Azure 资源的托管标识

在两种方法中,建议使用托管身份。 使用服务主体时,需要以手动或编程方式管理和轮换机密。 使用托管标识,Azure AD 会为你管理和执行身份验证并及时轮换机密。

建议启用托管标识,以便群集可以通过 Microsoft Entra 与外部 Azure 资源进行交互。 只能在创建群集期间启用此设置。 即使Microsoft Entra 未立即使用,也可以稍后合并它。

默认情况下,群集使用两个主要标识、 群集标识kubelet 标识。 AKS 控制平面组件使用 群集标识 来管理群集资源,包括入口负载均衡器、AKS 托管的公共 IP 等。 kubelet 标识 用于通过 Azure 容器注册表(ACR)进行身份验证。 某些加载项还支持使用托管标识进行身份验证。

以从内向外的情况为例,我们来研究一下当群集需要从容器注册表拉取映像时如何使用托管标识。 此操作需要群集获取注册表的凭据。 一种方法是将信息存储在 Kubernetes Secrets 对象中,并使用 imagePullSecrets 来检索机密。 不建议使用此方法,因为安全复杂性。 不仅需要事先了解机密,还需要通过 DevOps 管道披露该机密。 另一个原因是管理机密轮换的操作开销。 相反,请向群集的 kubelet 托管标识授予对注册表的 acrPull 访问权限。 此方法解决了这些问题。

在此体系结构中,群集通过 Microsoft Entra 来保护对 Azure 资源的访问,并执行支持托管标识的操作。 根据群集要执行的操作,将 Azure 基于角色的访问控制(Azure RBAC)和权限分配给群集的托管标识。 群集向 Microsoft Entra 进行身份验证,然后根据分配给它的角色被允许或拒绝访问。 下面是此参考实现中的一些示例,其中 Azure 内置角色已分配给群集:

  • 网络参与者。 群集控制分支虚拟网络的能力。 此角色分配允许 AKS 群集系统分配的身份使用专用子网来处理内部入口控制器服务。
  • 监视指标发布者。 群集发送指标到 Azure Monitor 的能力。
  • AcrPull。 群集从指定的 Azure 容器注册表拉取映像的能力。

群集访问

Microsoft Entra 集成还简化了由外向内访问的安全性。 假设用户想要使用 kubectl。 作为初始步骤,他们运行 az aks get-credentials 命令来获取群集的凭据。 Microsoft Entra 对用户的身份进行验证,以确保与允许获取群集凭据的 Azure 角色一致。

AKS 允许通过两种方式使用 Microsoft Entra 进行 Kubernetes 访问。 第一种方法是将 Microsoft Entra 用作与本机 Kubernetes RBAC 系统集成的标识提供者。 另一种是使用本机 Azure RBAC 来控制群集访问。