Azure Operator Nexus Kubernetes 群集中的角色型访问控制

本文提供了有关如何使用 Microsoft Entra ID 管理对 Nexus Kubernetes 群集的访问的综合指南。 具体而言,我们专注于基于角色的访问控制,这使你能够根据组织内的角色或职责向用户授予权限。

在您开始之前

  1. 首先,请为群集管理员创建Microsoft Entra 组,并向其分配成员。 Microsoft Entra ID 允许将访问权限授予整个组,而不是单独管理每个用户的权限。
  2. 创建 Nexus Kubernetes 群集时,使用创建的组 ID 作为“adminGroupObjectIds”的值,以确保组成员获得管理群集的权限。 有关如何创建和访问 Nexus Kubernetes 群集的说明,请参阅 快速入门 指南。

管理员对群集的访问权限

Nexus 会使用默认的 Kubernetes 角色cluster-admin和你指定的 Microsoft Entra 组adminGroupObjectIds创建 Kubernetes 群集角色绑定。 群集管理员对群集具有完全访问权限,可以在群集上执行所有作。 群集管理员还可以通过将其他用户分配到相应的Microsoft Entra 组来授予对其他用户的访问权限。

注释

创建 Nexus Kubernetes 群集时,Nexus 会自动创建一个专用于存储群集资源的托管资源组,在此组中建立 Arc 连接的群集资源。

若要访问群集,需要设置群集连接 kubeconfig。 登录具有相关 Microsoft Entra 实体的 Azure CLI 后,可以获取 kubeconfig,以便从任何位置与群集进行通信,即使在包围群集的防火墙之外也是如此。

  1. 设置CLUSTER_NAMERESOURCE_GROUPSUBSCRIPTION_ID变量。

    CLUSTER_NAME="myNexusK8sCluster"
    RESOURCE_GROUP="myResourceGroup"
    SUBSCRIPTION_ID=<set the correct subscription_id>
    
  2. 使用 az 查询托管资源组,并存储在 MANAGED_RESOURCE_GROUP 里。

     az account set -s $SUBSCRIPTION_ID
     MANAGED_RESOURCE_GROUP=$(az networkcloud kubernetescluster show -n $CLUSTER_NAME -g $RESOURCE_GROUP --output tsv --query managedResourceGroupConfiguration.name)
    
  3. 以下命令启动 connectedk8s 代理,该代理允许连接到指定的 Nexus Kubernetes 群集的 Kubernetes API 服务器。

    az connectedk8s proxy -n $CLUSTER_NAME  -g $MANAGED_RESOURCE_GROUP &
    
  4. 使用 kubectl 将请求发送到群集。

    kubectl get pods -A
    

    现在应会看到包含所有节点列表的群集的响应。

注释

如果看到错误消息“无法将访问令牌发布到客户端代理”或“无法连接到 MSI”,则可能需要执行 az login 重新与 Azure 进行身份验证。

基于角色的访问控制

作为管理员,可以通过创建具有 Microsoft Entra 组对象 ID 的角色绑定,为群集提供基于角色的访问控制。 对于只需要“查看”权限的用户,可以通过将他们添加到与‘查看’角色关联的Microsoft Entra组来完成该任务。

  1. 为需要获得“查看”访问权限的用户创建Microsoft Entra组,参考默认的Kubernetes角色view。 此角色只是一个示例,如有必要,可以创建自定义角色并改用它们。 有关 Kubernetes 中面向用户的角色的详细信息,请参阅 Kubernetes 基于滚动的访问角色的官方文档。

  2. 记下创建时生成的 Microsoft Entra 组对象 ID。

  3. 使用 kubectl 命令创建具有“view”角色的 clusterrolebinding,并将其与 Microsoft Entra 组相关联。 将 AZURE_AD_GROUP_OBJECT_ID 替换为您 Microsoft Entra 组的对象 ID。

    kubectl create clusterrolebinding nexus-read-only-users --clusterrole view --group=AZURE_AD_GROUP_OBJECT_ID
    

    此命令创建一个群集角色绑定,该绑定将 nexus-read-only-users 角色分配给 view 指定Microsoft Entra 组的成员。

  4. 验证是否已成功创建角色绑定。

    kubectl get clusterrolebinding nexus-read-only-users
    
  5. 现在,Microsoft Entra 组中的用户具有对群集的“查看”访问权限。 他们可以使用az connectedk8s proxy访问群集来查看资源,但无法进行任何更改

后续步骤

可以通过创建自定义具有特定权限的角色来进一步微调访问控制。 创建这些角色涉及 Kubernetes 原生的 RoleBinding 或 ClusterRoleBinding 资源。 可以根据要求查看官方 Kubernetes 文档 ,了解有关创建自定义角色和角色绑定的详细指南。