在 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'
原因分析
此类问题是由于客户端没有权限在范围内执行操作导致,具体可参考 相关问题描述 。
解决方法
解决思路
-
根据 问题描述 中的问题,确认关键错误信息。
说明:此类问题中的缺失权限、范围等请按照实际情况替换。
-
对象 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> 部分即为 资源组。
-
-
在 Azure 门户网站(以下简称为 Azure 平台)中,确认范围并为角色增加相关权限,具体可参考 官网文档 。
操作步骤
-
进入 Azure 平台,单击 Azure 服务 区域的 Kubernetes 服务。
-
单击 解决思路 中根据范围所确定的 资源组 链接。
-
单击 访问控制(标识和访问管理) > 添加 > 添加角色分配,进入添加角色分配页面,通过角色分配以授予对 Azure 资源的访问权限。
-
单击 角色 > 作业职能角色,在搜索框中输入并查询内置或自定义的 子网带有 Read 和 Write 权限 的角色名称,查询后选中此角色。具体请参考 根据缺失权限获取对应角色名称 ,本文以使用 Network Contributor(网络参与者) 为例进行介绍。
-
单击 下一步。
-
在 成员 页签下,将访问权限分配到 项选择 托管标识 。
-
单击 选择成员。
-
在 选择托管标识 页面中,按需选择 托管标识,并在 选择 中选择成员,
提示:此成员名称与集群名称相同。
-
单击 选择,将托管标识加入到所选成员。
-
单击 下一步。在 审阅和分配 页面中可以看到,成员对应的 对象 ID 与 问题描述 中的一致、范围 与 问题描述 中的一致或是其父集。
-
单击 审阅和分配,等待右上角提示 已添加角色分配 即表示分配完成。
-
单击 角色分配 页签,在 网络参与者 区域下即可看到对应角色分配信息。
相关操作
根据缺失权限获取对应角色名称
本文以内置角色为例进行介绍,若需使用自定义角色,请参考 Azure 自定义角色 。
-
查看错误信息中缺失的权限:
Microsoft.Network/virtualNetworks/subnets/read及Microsoft.Network/virtualNetworks/subnets/write。 -
打开 官网文档-内置角色 ,搜索对应 子网带有 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" }