首页 / 平台管理 / 集群管理 / 集群 / 常见问题 / 在 Azure AKS 集群中使用存储服务部署应用,如何解决无权限在范围内执行操作问题?

在 Azure AKS 集群中使用存储服务部署应用,如何解决无权限在范围内执行操作问题?

问题描述

在 Azure AKS 集群中尝试部署应用(例如 GitLab),并选择 azurefile-csi-nfs 存储类,但部署失败,实例无法正常启动,具体错误信息如下。

The client 'fe1edb5c-xxxx-xxxx-xxxx-322359922f59' with object id 'fe1edb5c-xxxx-xxxx-xxxx-322359922f59' does not have authorization to perform action 'Microsoft.Network/virtualNetworks/subnets/read' over scope '/subscriptions/fa3e6c1d-xxxx-xxxx-xxxx-c1d21f3ad8db/resourceGroups/ait-test-zgjia-01_group_db4fb7/providers/Microsoft.Network/virtualNetworks/ait-test-zgjia-01/subnets/ait-test-zgjia-01'

原因分析

此类问题是由于客户端没有权限在范围内执行操作导致,具体可参考 相关问题描述

解决方法

解决思路

  1. 根据 问题描述 中的问题,确认关键错误信息。

    说明:此类问题中的缺失权限、范围等请按照实际情况替换。

    • 对象 ID:fe1edb5c-xxxx-xxxx-xxxx-322359922f59。

    • 缺失的权限:Microsoft.Network/virtualNetworks/subnets/read 及 Microsoft.Network/virtualNetworks/subnets/write。

      注意:使用 azurefile-csi-nfs 存储类,除了需要 Read 权限 外还需要 Write 权限

    • 范围:/subscriptions/fa3e6c1d-xxxx-xxxx-xxxx-c1d21f3ad8db/resourceGroups/<ait-test-zgjia-01_group_db4fb7>/providers/Microsoft.Network/virtualNetworks/ait-test-zgjia-01/subnets/ait-test-zgjia-01。

      说明<ait-test-zgjia-01_group_db4fb7> 部分即为 资源组

  2. 在 Azure 门户网站(以下简称为 Azure 平台)中,确认范围并为角色增加相关权限,具体可参考 官网文档

操作步骤

  1. 进入 Azure 平台,单击 Azure 服务 区域的 Kubernetes 服务

  2. 单击 解决思路 中根据范围所确定的 资源组 链接。

  3. 单击 访问控制(标识和访问管理) > 添加 > 添加角色分配,进入添加角色分配页面,通过角色分配以授予对 Azure 资源的访问权限。

  4. 单击 角色 > 作业职能角色,在搜索框中输入并查询内置或自定义的 子网带有 Read 和 Write 权限 的角色名称,查询后选中此角色。具体请参考 根据缺失权限获取对应角色名称 ,本文以使用 Network Contributor(网络参与者) 为例进行介绍。

  5. 单击 下一步

  6. 成员 页签下,将访问权限分配到 项选择 托管标识

  7. 单击 选择成员

  8. 选择托管标识 页面中,按需选择 托管标识,并在 选择 中选择成员,

    提示:此成员名称与集群名称相同。

  9. 单击 选择,将托管标识加入到所选成员。

  10. 单击 下一步。在 审阅和分配 页面中可以看到,成员对应的 对象 ID 问题描述 中的一致、范围 问题描述 中的一致或是其父集。

  11. 单击 审阅和分配,等待右上角提示 已添加角色分配 即表示分配完成。

  12. 单击 角色分配 页签,在 网络参与者 区域下即可看到对应角色分配信息。

相关操作

根据缺失权限获取对应角色名称

本文以内置角色为例进行介绍,若需使用自定义角色,请参考 Azure 自定义角色

  1. 查看错误信息中缺失的权限:Microsoft.Network/virtualNetworks/subnets/readMicrosoft.Network/virtualNetworks/subnets/write

  2. 打开 官网文档-内置角色 ,搜索对应 子网带有 Read 和 Write 的权限,例如: Microsoft.Network/virtualNetworks/subnets/*Microsoft.Network/* 等均可。本文以搜索 Microsoft.Network/* 为例进行介绍,其中一个搜索结果如下,对应的 roleName 值为 Network Contributor(网络参与者)

    {
      "assignableScopes": [
        "/"
      ],
      "description": "Lets you manage networks, but not access to them.",
      "id": "/providers/Microsoft.Authorization/roleDefinitions/4d97b98b-1d4f-4787-a291-c67834d212e7",
      "name": "4d97b98b-1d4f-4787-a291-c67834d212e7",
      "permissions": [
        {
          "actions": [
            "Microsoft.Authorization/*/read",
            "Microsoft.Insights/alertRules/*",
            "Microsoft.Network/*",
            "Microsoft.ResourceHealth/availabilityStatuses/read",
            "Microsoft.Resources/deployments/*",
            "Microsoft.Resources/subscriptions/resourceGroups/read",
            "Microsoft.Support/*"
          ],
          "notActions": [],
          "dataActions": [],
          "notDataActions": []
        }
      ],
      "roleName": "Network Contributor",
      "roleType": "BuiltInRole",
      "type": "Microsoft.Authorization/roleDefinitions"
    }