在 AKS 桌面中设置权限和基于角色的访问控制 (RBAC)

显示群集操作员和开发人员角色的 AKS 桌面 RBAC 角色分配的关系图的屏幕截图

根据你作为群集操作员或开发人员的角色,你可以在 AKS 桌面中为开发人员提供环境(Project),以便开发人员部署、迁移或管理应用程序,或者允许他们在专用 AKS 群集上自行部署和管理应用程序。 或者,你可能希望向更多开发人员授予对应用程序进行管理、观察和故障排除的权限。

默认情况下,在 AKS 桌面中创建项目时,可以与组织中的其他人共享此项目,并为你设置权限。 但是,可能需要随时间推移维护权限,或者通过设置适当的权限来自动执行权限或定义操作模型。

本文介绍如何管理 RBAC 权限,使团队成员能够使用 AKS 桌面版。

注释

AKS 桌面当前不提供 UI 选项,用于在创建后修改项目权限。 若要在创建项目后更新权限或授予对其他用户的访问权限,请使用本文中所述的 Azure 门户或 Azure CLI。

注释

在 AKS 桌面中创建项目时, AKS 托管命名空间 在群集所在的资源组中创建。

先决条件

  • 一份 Azure 订阅。 如果没有 Azure 订阅,可以创建免费的 Azure 帐户
  • 安装并配置 Azure CLI 2.64.0 或更高版本。 使用 az --version 命令查看版本。 若要安装或升级,请参阅安装 Azure CLI
  • 这是 aks-preview Azure CLI 扩展。 使用 az extension add --name aks-preview 命令安装它。
  • 基本了解 Azure 基于角色的访问控制( RBAC),请参阅什么是 Azure RBAC?Azure 内置角色
  • 一个 Azure 资源组,其中包含 AKS 群集和通过 AKS 桌面创建的任何 AKS 托管项目。
  • 满足 AKS 桌面要求的 AKS 标准群集 ,即运行应用程序的 Kubernetes 群集。
  • 用于存储用于部署的容器映像的 Azure 容器注册表(ACR )。

群集操作员职责

作为群集操作员,你负责预配和配置基础基础结构,使开发团队能够生成和部署应用程序。 你的职责包括:

  • 创建所需的 Azure 基础结构(资源组、AKS 群集、ACR)。
  • 配置 ACR 与 AKS 群集的集成。
  • 为用户分配创建 Projects 的权限。
  • (可选)将权限管理委派给 Project 创建者。

创建基础结构和资源

若要创建基础结构资源,需要有权在 Azure 中创建资源。 如果未分配 “所有者 RBAC”角色,则需要 “参与者” 角色来创建资源和 “用户访问管理员 ”角色以向其他用户分配权限。 向用户分配权限,以便他们可以使用以下步骤在资源组中创建资源:

  1. 为资源组和群集名称设置环境变量。 请确保将占位符替换为实际的资源组和集群名称。

    export RESOURCE_GROUP=<infra-resource-group>
    export CLUSTER_NAME=<cluster-name>
    export SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    export ACR_NAME=<acr-name>
    
  2. 分配必要的角色,以使用 az role assignment create 命令在资源组中创建资源。 确保将 <user-id> 替换为相应的用户或服务主体 ID。

    az role assignment create --role "Contributor" \
        --assignee <user-id> \
        --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP
    

将 ACR 与 AKS 群集集成

使用 az aks update 命令将 Azure 容器注册表附加到 AKS 群集。

az aks update \
    --resource-group $RESOURCE_GROUP \
    --name $CLUSTER_NAME \
    --attach-acr $ACR_NAME

选择项目创建模型

作为群集操作员,有两个选项可用于开发人员如何在 AKS 桌面中使用 Projects:

  • 自助服务模型:开发人员创建和管理自己的项目。 此方法为开发人员提供完全自治,但需要向他们授予 Azure Kubernetes 服务命名空间参与者 角色。 当开发人员创建自己的项目时,他们会自动在托管命名空间上接收 “所有者” 角色,并且可以立即开始部署应用程序。
  • 托管模型:为开发人员创建项目并向其授予访问权限。 目前,可以在创建项目期间配置此配置。 此方法可更好地控制项目创建,但如果需要将更多团队成员分配到 Project 创建后,需要使用 Azure 门户或 Azure CLI 为其分配必要的权限,如后续部分所述。

自助服务模型:允许开发人员创建自己的项目

若要允许开发人员创建自己的项目,请在 AKS 群集上为其分配 Azure Kubernetes 服务命名空间参与者 角色。 AKS 桌面项目在后台创建 AKS 托管命名空间 ,此角色授予必要的权限。

使用命令为开发人员分配 az role assignment create角色。 请确保将占位符替换为相应的用户或服务主体 ID。

az role assignment create \
    --role "Azure Kubernetes Service Namespace Contributor" \
    --assignee <developer-user-id> \
    --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.ContainerService/managedClusters/$CLUSTER_NAME

托管模型:为开发人员创建项目并分配访问权限

如果希望代表开发人员创建项目,则必须分配三个基本角色,使其能够访问群集并在分配的命名空间内工作:

  • Azure Kubernetes 服务群集用户角色:允许开发人员使用 az aks get-credentials 命令下载群集凭据。
  • Azure Kubernetes 服务命名空间用户:授予对托管命名空间的访问权限。
  • Kubernetes RBAC 角色之一(读者写者管理员):控制他们可以在命名空间中执行的操作。

开发人员需要这三个角色才能在 AKS 桌面中成功访问和使用其项目。 如果没有 Azure Kubernetes 服务群集用户角色,开发人员无法下载连接到群集所需的 kubeconfig 文件。

分配群集访问权限

分配 Azure Kubernetes 服务群集用户角色 ,以使用 az role assignment create 命令启用 kubeconfig 下载。 请确保将占位符替换为相应的用户或服务主体 ID。

az role assignment create \
    --role "Azure Kubernetes Service Cluster User Role" \
    --assignee <developer-user-id> \
    --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.ContainerService/managedClusters/$CLUSTER_NAME

分配命名空间访问权限

使用命令为特定 Project/namespace 分配 az role assignment create角色。 请确保将占位符替换为相应的用户或服务主体 ID。

export NAMESPACE_NAME=<namespace-or-project-name>

az role assignment create \
    --role "Azure Kubernetes Service Namespace User" \
    --assignee <developer-user-id> \
    --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.ContainerService/managedClusters/$CLUSTER_NAME/namespaces/$NAMESPACE_NAME

分配 Kubernetes RBAC 角色

根据开发人员需要执行的操作分配适当的 Kubernetes RBAC 角色:

  • 用于只读访问的 Azure Kubernetes 服务 RBAC 读取者角色。
  • 用于部署应用程序的 Azure Kubernetes 服务 RBAC 编写器
  • 用于完全管理控制的 Azure Kubernetes 服务 RBAC 管理员角色。
  1. 使用 az aks show 命令获取 AKS 群集 ID。

    AKS_ID=$(az aks show \
        --resource-group $RESOURCE_GROUP \
        --name $CLUSTER_NAME \
        --query id \
        --output tsv)
    
  2. 使用 az role assignment create 命令分配相应的 Kubernetes RBAC 角色。 请确保将占位符替换为相应的用户或服务主体 ID。 以下示例分配 Azure Kubernetes 服务 RBAC 写入者角色:

    az role assignment create \
        --role "Azure Kubernetes Service RBAC Writer" \
        --assignee <developer-user-id> \
        --scope $AKS_ID/namespaces/$NAMESPACE_NAME
    

允许项目创建者分配访问权限(可选)

如果希望 Project 创建者能够向其他用户分配访问权限,请向他们授予 “用户访问管理员 ”角色。 此权限允许用户设置对基础结构资源组中的任何资源的权限。

使用命令分配az role assignment create角色。 请确保将占位符替换为相应的用户或服务主体 ID。

az role assignment create \
    --role "User Access Administrator" \
    --assignee <user-id> \
    --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP

开发人员职责

作为开发人员,可以在现有的 AKS 桌面环境中部署应用程序、管理项目和监视工作负荷。 群集操作员授予执行这些任务所需的权限。 你的职责包括:

  • 将应用程序部署到 Projects 中。
  • 查看和管理已部署的应用程序。
  • 监视应用程序指标和日志。
  • 修改项目访问权限(如果需要)。

开发人员所需的用户角色

若要以开发人员身份使用 AKS 桌面,群集操作员必须分配三个基本角色:

  • Azure Kubernetes 服务群集用户角色:允许使用 az aks get-credentials 命令下载群集凭据,这是从本地计算机或通过 AKS 桌面连接到群集的要求。

  • Azure Kubernetes 服务命名空间用户:授予对分配的托管命名空间/项目的访问权限。

  • Kubernetes RBAC 角色之一(读取者写入者管理员):

    • 用于只读访问的 Azure Kubernetes 服务 RBAC 读取者角色。
    • 用于部署应用程序的 Azure Kubernetes 服务 RBAC 编写器
    • 用于完全管理控制的 Azure Kubernetes 服务 RBAC 管理员角色。

如何分配权限

根据如何在 AKS 桌面中创建项目来分配权限:

  • 项目创建者:自动接收托管命名空间上的 所有者 角色以及部署应用程序所需的所有权限。

  • 其他用户:必须由群集操作员或 Project 创建者授予访问权限。 他们会收到:

    • 群集上的 Azure Kubernetes 服务群集用户角色
    • 命名空间中的 Azure Kubernetes 服务命名空间用户 角色。
    • Kubernetes RBAC 角色之一(读取者编写者管理员)。

若要部署应用程序,需要 “编写者 ”或 “管理员 ”角色。 有关详细信息,请参阅托管命名空间内置角色

查看应用程序指标

注释

部署应用程序后,指标最多可能需要 10 分钟才能填充。

在 Project 主屏幕中,可以查看应用程序的指标,例如 CPU、内存和网络使用情况。 这些指标由 Azure Monitor 工作区支持的托管 Prometheus 终结点提供。

若要查看指标,需要在 Azure Monitor 工作区上具有 “监视数据读取者 ”角色。 此角色授予对群集的所有指标的访问权限,而不仅仅是特定项目。

群集操作员可以使用以下步骤分配此权限:

  1. 使用 az alerts-management prometheus-rule-group list 命令标识群集使用的 Azure Monitor 工作区。

    export WORKSPACE_ACC_FOR_PROM_RULES=$(az alerts-management prometheus-rule-group list \
        --resource-group "$RESOURCE_GROUP" \
        --query "[?clusterName=='$CLUSTER_NAME'] | [0].scopes[0]" \
        --output tsv)
    
  2. 使用命令分配az role assignment create角色。 请确保将占位符替换为相应的用户或服务主体 ID。

    az role assignment create \
        --role "Monitoring Data Reader" \
        --assignee <user-id> \
        --scope $WORKSPACE_ACC_FOR_PROM_RULES
    

修改项目访问权限

目前,AKS 桌面不提供在创建后修改项目权限的 UI 选项。 如果需要更新权限或授予对其他人的访问权限,请与群集操作员合作,使用 Azure 门户或 Azure CLI 更新权限。 以下步骤概述了如何使用 Azure CLI 分配必要的角色:

分配群集访问权限

分配 Azure Kubernetes 服务群集用户角色 ,以使用 az role assignment create 命令启用 kubeconfig 下载。 请确保将占位符替换为相应的用户或服务主体 ID。

az role assignment create \
    --role "Azure Kubernetes Service Cluster User Role" \
    --assignee <developer-user-id> \
    --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.ContainerService/managedClusters/$CLUSTER_NAME

分配命名空间访问权限

使用命令为特定 Project/namespace 分配 az role assignment create角色。 请确保将占位符替换为相应的用户或服务主体 ID。

export NAMESPACE_NAME=<namespace-or-project-name>

az role assignment create \
    --role "Azure Kubernetes Service Namespace User" \
    --assignee <developer-user-id> \
    --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.ContainerService/managedClusters/$CLUSTER_NAME/namespaces/$NAMESPACE_NAME

分配 Kubernetes RBAC 角色

根据开发人员需要执行的操作分配适当的 Kubernetes RBAC 角色:

  • 用于只读访问的 Azure Kubernetes 服务 RBAC 读取者角色。
  • 用于部署应用程序的 Azure Kubernetes 服务 RBAC 编写器
  • 用于完全管理控制的 Azure Kubernetes 服务 RBAC 管理员角色。
  1. 使用 az aks show 命令获取 AKS 群集 ID。

    AKS_ID=$(az aks show \
        --resource-group $RESOURCE_GROUP \
        --name $CLUSTER_NAME \
        --query id \
        --output tsv)
    
  2. 使用 az role assignment create 命令分配相应的 Kubernetes RBAC 角色。 请确保将占位符替换为相应的用户或服务主体 ID。 以下示例分配 Azure Kubernetes 服务 RBAC 写入者角色:

    az role assignment create \
        --role "Azure Kubernetes Service RBAC Writer" \
        --assignee <developer-user-id> \
        --scope $AKS_ID/namespaces/$NAMESPACE_NAME
    

授予查看指标的权限(可选)

若要授予查看指标的权限,请按照 “查看应用程序指标 ”部分中的步骤作。