如何借助托管标识实现跨订阅Azure Automation账户Runbook?
无需RunAs账户实现Azure Automation跨订阅Runbook的方法
核心方案:使用托管标识(Managed Identity)
替代即将弃用的RunAs账户,托管标识是Azure官方推荐的身份验证方式,无需维护证书,安全性更高。
步骤1:为Azure Automation账户启用托管标识
- 系统分配托管标识:进入Automation账户的「标识」>「系统分配」页面,将状态切换为「开启」后保存。
- 用户分配托管标识:若需在多个Automation账户间共享身份,先创建用户分配托管标识,再在Automation账户的「标识」>「用户分配」页面添加该标识。
步骤2:为托管标识授予目标订阅的RBAC权限
- 登录Azure门户,进入目标订阅的「访问控制(IAM)」页面。
- 添加角色分配:选择所需角色(如「参与者」「读者」或自定义角色),将托管标识(系统分配的标识名称与Automation账户名一致;用户分配的标识为自身名称)设为被授权对象。
步骤3:Runbook跨订阅操作代码示例(PowerShell)
# 通过托管标识自动完成Azure身份验证 Connect-AzAccount -Identity # 获取托管标识有权访问的所有订阅(解决Get-AzSubscription失败:需确保标识有订阅级「读者」或更高权限) $subscriptions = Get-AzSubscription # 遍历订阅执行操作 foreach ($sub in $subscriptions) { # 切换到目标订阅上下文 Set-AzContext -Subscription $sub.Id # 示例操作:获取当前订阅下的VM列表 $vms = Get-AzVM Write-Output "订阅 $($sub.Name) 下的VM数量:$($vms.Count)" } # 指定单个目标订阅执行操作的示例 $targetSubId = "xxxx-xxxx-xxxx-xxxx" Set-AzContext -Subscription $targetSubId New-AzResourceGroup -Name "RG-CrossSub-Demo" -Location "East US"
解决Get-AzSubscription失败的常见问题
- 权限不足:托管标识必须在目标订阅级别至少拥有「读者」角色,否则无法枚举订阅资源。
- 未启用托管标识:确认Automation账户已开启托管标识,且Runbook中使用
Connect-AzAccount -Identity完成身份验证。 - 模块版本过旧:确保Automation账户中的Az模块为最新版本,旧版本可能不支持托管标识的完整功能。
内容的提问来源于stack exchange,提问作者Shekar
相关产品推荐
相关产品推荐

