ARM模板中托管应用关联用户分配托管标识的问题及权限报错咨询
看起来你是想把预先创建好的用户分配托管标识关联到托管应用(或者它部署的VM这类资源),之后用这个标识给托管应用生成的身份做外部资源的角色映射对吧?先结合你遇到的问题梳理下可能的原因和解决方向:
先明确你的场景和问题核心
- 你的需求:关联已存在的用户分配托管标识到托管应用/其部署的资源,后续用该标识完成外部资源的角色映射操作
- 已尝试动作:通过AZ CLI脚本,使用用户提供的标识登录,尝试将该用户标识绑定到VM
- 遇到的核心问题:操作标识虽然有VM的
Microsoft.Compute/virtualMachines/write权限,但缺少托管标识关联相关的权限(报错里截断的部分应该是Microsoft.ManagedIdentity/userAssignedIdentities/assign/action这类关键权限)
具体的解决建议
补全关键RBAC权限
要将用户分配标识关联到VM,你的操作标识必须拥有Microsoft.ManagedIdentity/userAssignedIdentities/assign/action权限,这个权限是专门用于把用户分配标识绑定到资源的核心权限。你需要在用户分配标识的资源范围(比如其所在的资源组、订阅)给操作标识赋予这个权限,而不只是VM所在的资源组。
嫌自定义角色麻烦的话,直接给操作标识分配内置的「托管标识操作员」角色也可以,这个角色包含了大部分托管标识的管理权限。如果用ARM模板部署托管应用,调整模板权限声明
要是你是通过ARM模板来部署托管应用并关联标识,除了在VM的identity块里指定用户分配标识的ID,还要确保模板的权限配置部分声明了对该用户分配标识的访问权限。简单说就是部署模板的主体得有读取这个外部用户分配标识并将其关联到VM的权限。确认权限的覆盖范围
报错里的权限检查是在VM的范围,但用户分配标识的权限校验是在标识自身的资源范围。举个例子:如果你的用户分配标识在ResourceGroup A,VM在ResourceGroup B,那操作标识不仅要在B有VM的写入权限,还要在A有托管标识的关联权限才行。AZ CLI操作的小提醒
用AZ CLI执行关联操作时,一定要确认当前登录的上下文是拥有足够权限的标识,命令格式大概是这样:az vm identity assign --resource-group <你的VM资源组名> --name <VM名称> --identities <用户分配标识的资源ID>
备注:内容来源于stack exchange,提问作者Cod_enthu

