尝试访问 AKS 群集资源时出现“禁止访问”错误

本文介绍如何在尝试查看 Azure Kubernetes 服务 (AKS) 群集中的 Kubernetes 资源时解决与基于角色的访问控制(RBAC)相关的“服务器错误”错误。

先决条件

Kubernetes 群集命令行工具 (kubectl

注意

如果使用 Azure Cloud Shell 运行 shell 命令,则已安装 kubectl。 如果使用本地 shell 并已安装 Azure CLI ,则可以运行 az aks install-cli 命令来安装 kubectl。

现象

运行 kubectl 命令以查看 Kubernetes 资源类型的详细信息(例如部署、Pod 或工作器节点)时,会收到以下错误消息:

$ kubectl get nodes
Error from server (Forbidden): nodes is forbidden: User "aaaa11111-11aa-aa11-a1a1-111111aaaaa" cannot list resource "nodes" in API group "" at the cluster scope

原因

此错误表示你正尝试使用没有所需基于角色的访问控制 (RBAC) 权限的 Microsoft Entra ID 帐户访问 Kubernetes 资源。

解决方案

根据为群集(Kubernetes RBAC 或 Azure RBAC)配置的 RBAC 类型,可能会应用不同的解决方案。 运行以下命令来确定群集正在使用的 RBAC 类型:

	az aks show -g <CLUSTER_RESOURCE_GROUP> -n <CLUSTER_NAME> --query aadProfile.enableAzureRbac

解决基于 Kubernetes RBAC 的 AKS 群集中的权限问题

如果群集使用 Kubernetes RBAC,则通过创建 RoleBinding 或 ClusterRoleBinding Kubernetes 资源来配置用户帐户的权限。 有关详细信息,请参阅 Kubernetes RBAC 文档

此外,在 Microsoft Entra ID 集成群集中,系统会自动创建 ClusterRoleBinding 资源,以授予管理员对群集的访问权限,以访问预先指定的Microsoft Entra ID 组的成员。

若要解决特定用户的“服务器错误(禁止访问)”错误,请使用以下方法之一。

方法 1:创建自定义 RoleBinding 或 ClusterRoleBinding 资源

可以创建自定义 RoleBinding 或 ClusterRoleBinding 资源,以向用户授予必要的权限(或用户所属的组)。 有关详细步骤,请参阅在 Azure Kubernetes 服务 中将 Kubernetes 基于角色的访问控制与 Microsoft Entra ID 配合使用。

方法 2:将用户添加到预先指定的Microsoft Entra ID 管理员组

  1. 检索预先指定的Microsoft Entra ID 管理组的 ID。 为此,请运行以下命令:

    az aks show -g <CLUSTER_RESOURCE_GROUP> -n <CLUSTER_NAME> --query aadProfile.adminGroupObjectIDs
    
  2. 使用在上一步中检索到的组 ID 将用户添加到预先指定的Microsoft Entra ID 管理员组。 有关更详细的步骤,请参阅 添加组的成员或所有者。

解决基于 Azure RBAC 的 AKS 群集中的权限问题

如果群集使用 Azure RBAC,则通过创建 Azure 角色分配来配置用户的权限。

AKS 提供了一组内置角色,可用于为 Microsoft Entra ID 用户或组创建角色分配,以授予他们对特定命名空间或群集范围内 Kubernetes 对象的访问权限。 有关将内置角色分配给基于 Azure RBAC 的群集中的用户或组的详细步骤,请参阅 AKS 内置角色

或者,可以创建自己的自定义 Azure 角色定义,以便对特定类型的 Kubernetes 对象和操作提供更精细的权限管理。 有关在基于 Azure RBAC 的群集中创建和分配自定义角色的详细指南,请参阅 创建自定义角色定义

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区