如何用PowerShell为多用户及托管标识分配Azure RBAC角色?
Azure RBAC角色批量分配实现方案
需求明确
- 批量给多个用户在订阅范围分配指定Azure RBAC角色
- 为现有虚拟机的系统托管标识,在存储账户范围分配Reader角色
修正优化后的完整脚本
# -------------------------- # 第一部分:给VM系统托管标识分配存储账户Reader角色 # -------------------------- # 获取目标虚拟机的系统托管标识主体ID $vm = Get-AzVM -ResourceGroupName "<资源组名称>" -Name "<虚拟机名称>" $vmIdentityId = $vm.Identity.PrincipalId # 执行角色分配 New-AzRoleAssignment ` -ObjectId $vmIdentityId ` -RoleDefinitionName "Reader" ` -Scope "/subscriptions/<订阅ID>/resourceGroups/<存储账户所在资源组>/providers/Microsoft.Storage/storageAccounts/<存储账户名称>" # -------------------------- # 第二部分:批量给多用户分配订阅级RBAC角色 # -------------------------- # 把需要分配角色的用户Object ID都列在这里 $userIds = @( "<用户1的Object ID>", "<用户2的Object ID>", "<用户3的Object ID>" # 要加更多用户直接往下加就行 ) # 指定要分配的RBAC角色(比如Contributor、Reader) $roleName = "<目标RBAC角色名称>" # 订阅范围的完整路径 $subscriptionScope = "/subscriptions/<订阅ID>" # 循环遍历用户列表,批量分配角色 foreach ($id in $userIds) { New-AzRoleAssignment ` -ObjectId $id ` -RoleDefinitionName $roleName ` -Scope $subscriptionScope ` -ErrorAction SilentlyContinue # 已拥有角色时不报错 }
使用注意事项
- 把所有带
<>的占位符替换成你实际的信息,比如资源组名、订阅ID、用户Object ID等 - 原脚本里的拼写错误(比如
StoragrAccounts、RoleDefination)已经修正,语法问题也修复了 - 加了
ErrorAction SilentlyContinue是为了避免重复分配角色时抛出错误,如果你想看到报错可以删掉这行
内容的提问来源于stack exchange,提问作者Jinnyroy
相关产品推荐
相关产品推荐

