使用 AKS 托管的 Microsoft Entra 集成进行群集访问控制

将 Microsoft Entra ID 与 AKS 群集集成后,可以使用条件访问Privileged Identity Management (PIM) 实时请求来控制对群集的访问。 本文介绍如何在 AKS 群集上启用条件访问和 PIM。

注意

Microsoft Entra 条件访问和 Privileged Identity Management (PIM) 是需要 Premium P2 SKU 的 Microsoft Entra ID P1、P2 或治理功能。 有关 Microsoft Entra ID 许可证和 SKU 的详细信息,请参阅 Microsoft Entra ID 治理许可基础知识定价指南

开始之前

将条件访问与 Microsoft Entra ID 和 AKS 配合使用

  1. 在 Azure 门户中转到“Microsoft Entra ID”页,然后选择“企业应用程序”。

  2. 选择“条件访问”>“策略”>“新建策略”。

    添加条件访问策略的屏幕截图。

  3. 为策略输入名称,例如“aks-policy”。

  4. 在“分配” 下,选择“用户和组” 。 选择要将策略应用到的用户和组。 在此示例中,请选择对你的群集拥有管理员访问权限的同一个 Microsoft Entra 组。

    选择要应用条件访问策略的用户或组的屏幕截图。

  5. 在“云应用或操作”>“包括”下,选择“选择应用”。 搜索“Azure Kubernetes 服务”,然后选择“Azure Kubernetes 服务 Microsoft Entra 服务器”。

    选择 Azure Kubernetes 服务 AD 服务器以应用条件访问策略的屏幕截图。

  6. 在“访问控制>授权”下,依次选择“授予访问权限”、“要求将设备标记为合规”和“需要所有已选控件”。

    选择此设置以仅允许符合条件访问策略的设备的屏幕截图。

  7. 确认设置,将“启用策略”设置为“”,然后选择“创建”。

    启用条件访问策略的屏幕截图。

验证是否已成功列出条件访问策略

  1. 使用 az aks get-credentials 命令获取用户凭据以访问群集。

     az aks get-credentials --resource-group myResourceGroup --name myManagedCluster
    
  2. 按照说明进行登录。

  3. 使用 kubectl get nodes 命令查看群集中的节点。

    kubectl get nodes
    
  4. 在 Azure 门户中导航到“Microsoft Entra ID”,然后选择“企业应用程序”>“活动”>“登录”。

  5. 在“条件访问列下,应会看到“成功”状态。 选择事件,然后选择“条件访问”选项卡。将列出条件访问策略。

    显示由于条件访问策略而失败的登录条目的屏幕截图。

使用 Microsoft Entra ID 和 AKS 配置实时群集访问

  1. 在 Azure 门户中转到“Microsoft Entra ID”,然后选择“属性”。

  2. 注意在“租户 ID”下列出的值。 在稍后的步骤中,将会引用该值作为 <tenant-id>

    Microsoft Entra ID 的 Azure 门户屏幕的屏幕截图,其中突出显示了租户的 ID。

  3. 选择“”>“新建组”。

    Azure 门户 Active Directory 组的屏幕截图,其中突出显示“新建组”选项。

  4. 检查是否已选择组类型“安全性”并指定组名称,例如 myJITGroup。 在“可将 Microsoft Entra 角色分配到此组(预览版)”下选择“”,然后选择“创建”。

    Azure 门户中创建新组的屏幕截图。

  5. 在“组”页上选择刚刚创建的组,并记下“对象 ID”。 在稍后的步骤中,会将其引用为 <object-id>

    刚刚创建组的 Azure 门户屏幕截图,其中突出显示对象 ID。

  6. 结合 --aad-admin-group-objects-ids--aad-tenant-id parameters 使用 az aks create 命令创建启用了 AKS 托管的 Microsoft Entra 集成的 AKS 群集,并包含前面步骤中记下的值。

    az aks create \
        --resource-group myResourceGroup \
        --name myManagedCluster \
        --enable-aad \
        --aad-admin-group-object-ids <object-id> \
        --aad-tenant-id <tenant-id> \
    
  7. 在 Azure 门户中,选择“活动”>“特权访问(预览版)”>“启用特权访问”。

    Azure 门户中特权访问(预览)页面的屏幕截图,其中突出显示启用特权访问。

  8. 若要授予访问权限,请选择“添加分配”。

    Azure 门户中特权访问启用后(预览)的屏幕截图。突出显示了“添加分配”选项。

  9. 从“选择角色”下拉列表中,选择要为其授予群集访问权限的用户和组。 组管理员随时可以修改这些分配。 然后,选择“下一步”。

    Azure 门户中“添加分配成员身份”的屏幕截图,其中选择了要添加为成员的示例用户。突出显示“下一步”选项。

  10. 在“分配类型”下选择“活动”,然后指定所需的持续时间。 提供理由,然后选择“分配”。

    Azure 门户中“添加分配设置”的屏幕截图。已选择“活动”分配类型,并给出了示例理由。突出显示“分配”选项。

有关分配类型的详细信息,请参阅在 Privileged Identity Management 中为特权访问组分配资格(预览版)

通过访问群集验证实时访问是否有效

  1. 使用 az aks get-credentials 命令获取用户凭据以访问群集。

    az aks get-credentials --resource-group myResourceGroup --name myManagedCluster
    
  2. 按照以下步骤登录。

  3. 使用 kubectl get nodes 命令查看群集中的节点。

    kubectl get nodes
    
  4. 请注意身份验证要求,并按照步骤完成身份验证。 如果成功,应会看到类似于以下示例输出的输出:

    To sign in, use a web browser to open the page https://microsoft.com/deviceloginchina and enter the code AAAAAAAAA to authenticate.
    NAME                                STATUS   ROLES   AGE     VERSION
    aks-nodepool1-61156405-vmss000000   Ready    agent   6m36s   v1.18.14
    aks-nodepool1-61156405-vmss000001   Ready    agent   6m42s   v1.18.14
    aks-nodepool1-61156405-vmss000002   Ready    agent   6m33s   v1.18.14
    

在命名空间级别应用即时访问

  1. 将 AKS 群集与 Azure RBAC 集成。

  2. 使用 az role assignment create 命令将要与即时访问集成的组与群集中的命名空间相关联。

    az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>
    
  3. 将在命名空间级别配置的组与 PIM 相关联以完成配置。

疑难解答

如果 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

请确保安全组的管理员为你的帐户提供了“活动”分配。

后续步骤

  • 使用 kubelogin 来访问 kubectl 中未提供的 Azure 身份验证功能。