在 AKS 中使用 Azure RBAC 进行 Kubernetes 授权

本手册旨在指导您如何在 Azure Kubernetes Service (AKS) 中配置和使用 Azure RBAC 来管理对 Kubernetes API 的访问权限。


第一章:核心概念解析

1.1 Azure RBAC (基于角色的访问控制)

  • 定义: Azure 平台级别的权限控制机制。
  • 作用: 管理对 Azure 资源(如 AKS 集群、虚拟机、存储账户等)的访问。
  • 范围: 订阅 → 资源组 → 具体资源。
  • 典型角色: Owner, Contributor, Reader 等。
  • 控制对象: 谁可以调用 Azure 资源管理器 API (ARM API)。

1.2 Kubernetes RBAC

  • 定义: Kubernetes 集群内部的访问控制机制。
  • 作用: 管理用户、ServiceAccount 对 Kubernetes API 资源(如 Pods, Deployments, ConfigMaps 等)的操作权限。
  • 范围: ClusterRole/ClusterRoleBinding (集群级别) 或 Role/RoleBinding (命名空间级别)。
  • 典型角色: view, edit, admin 等。
  • 控制对象: 谁可以调用 Kubernetes API Server。

1.3 两者关系与集成

默认情况下,Azure RBAC 和 Kubernetes RBAC 是两套独立的权限系统,不能直接互通。

然而,AKS 提供了两种集成方式:

  1. AKS + Azure AD + Kubernetes RBAC: 使用 Azure AD 进行身份验证,但集群内的授权仍由 Kubernetes RBAC 控制。身份统一,权限分离。
  2. AKS + Azure RBAC for Kubernetes Authorization: 直接使用 Azure RBAC 来管理 Kubernetes API 的操作权限,替代集群内的 Kubernetes RBAC。本手册重点介绍此模式。

第二章:启用 Azure RBAC 授权模式

2.1 前提条件

  1. AKS 版本: 建议使用 v1.20 或更高版本。
  2. Azure CLI 版本: 需 2.20.0 或更高版本。使用 az upgrade 进行升级。
  3. Azure AD 集成: 集群必须启用 Azure AD 集成 (--enable-aad)。
  4. Azure RBAC 授权: 创建或更新集群时必须启用 --enable-azure-rbac

2.2 创建新的 AKS 集群

使用以下命令创建一个启用了 Azure RBAC 授权的新 AKS 集群:

az aks create \
  --resource-group MyResourceGroup \
  --name MyAKSCluster \
  --enable-aad \
  --enable-azure-rbac \
  --aad-admin-group-object-ids <AAD_GROUP_OBJECT_ID> \
  --node-count 1 \
  --enable-addons monitoring \
  --generate-ssh-keys

关键参数:

  • --enable-aad: 启用 Azure AD 集成。
  • --enable-azure-rbac: 启用 Azure RBAC 授权模式。
  • --aad-admin-group-object-ids: 指定一个 Azure AD 组的 Object ID,该组成员将拥有集群管理员权限。

2.3 更新现有的 AKS 集群

对于已存在的、已启用 Azure AD 集成的集群,可以运行以下命令来开启 Azure RBAC 授权模式:

az aks update \
  --resource-group MyResourceGroup \
  --name MyAKSCluster \
  --enable-azure-rbac

第三章:角色分配与权限验证

3.1 分配 Azure RBAC 角色

启用该功能后,您需要通过分配 Azure 内置的 AKS 相关角色来授予用户或组对 Kubernetes API 的访问权限。

Azure RBAC 角色 对应的 Kubernetes 权限
Azure Kubernetes Service RBAC Cluster Admin 完全管理整个集群 (相当于 cluster-admin)
Azure Kubernetes Service RBAC Admin 管理所有命名空间 (相当于 admin)
Azure Kubernetes Service RBAC Writer 可编辑所有命名空间 (相当于 edit)
Azure Kubernetes Service RBAC Reader 只读访问所有命名空间 (相当于 view)

示例:为用户分配只读权限 (Reader)

az role assignment create \
  --assignee <USER_OR_GROUP_OBJECT_ID_OR_UPN> \
  --role "Azure Kubernetes Service RBAC Reader" \
  --scope $(az aks show -g MyResourceGroup -n MyAKSCluster --query id -o tsv)

参数说明:

  • --assignee: 目标用户或组的 Object ID 或 UPN。
  • --role: 要分配的 Azure RBAC 角色名称。
  • --scope: 作用范围,此处为 AKS 资源的 ARM ID。

3.2 登录并验证权限

  1. 登录 Azure CLI:

    az login
    
  2. 获取 kubeconfig:

    # 如果你是管理员
    az aks get-credentials --resource-group MyResourceGroup --name MyAKSCluster --admin
    # 如果是普通用户
    az aks get-credentials --resource-group MyResourceGroup --name MyAKSCluster
    
  3. 测试权限:

    kubectl get pods -A
    

    被授予 Reader 角色的用户应该能成功列出 Pod,但如果尝试创建或删除资源,操作将会失败。


第四章:重要注意事项

  • 权限管理转移: 开启此功能后,Kubernetes 原生的 RBAC (Role/RoleBinding) 将被旁路,所有权限管理都必须通过 Azure RBAC 进行。
  • 回退机制: 如果需要回退到 Kubernetes 原生 RBAC,需要禁用 --enable-azure-rbac 并手动重新配置集群内的 Role 和 RoleBinding。
  • 自定义角色: 如果内置角色无法满足精细化的权限需求,可以创建自定义的 Azure 角色来定义对特定 Kubernetes API 资源和操作 (verbs) 的权限。
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐