如何通过ARM模板在Azure自动化中创建AzureRunAsConnection?
我明白你的困扰——ARM模板确实没办法直接定义AzureRunAsConnection,因为这个连接的创建依赖于自动化账户生成后的服务主体、证书等关联资源,官方目前没有提供对应的ARM资源类型来直接声明它。不过有几个可行的方案可以帮你完成自动化部署:
方案1:在ARM模板中嵌入部署脚本
你可以在ARM模板里添加一个Microsoft.Resources/deploymentScripts资源,让它在自动化账户部署完成后,自动执行PowerShell脚本来创建RunAs连接。这样能把整个流程整合到一个ARM部署中。
示例代码片段:
{ "type": "Microsoft.Resources/deploymentScripts", "apiVersion": "2020-10-01", "name": "ProvisionRunAsAccount", "location": "[resourceGroup().location]", "dependsOn": [ "[resourceId('Microsoft.Automation/automationAccounts', variables('automationAccountName'))]" ], "identity": { "type": "SystemAssigned" }, "properties": { "azPowerShellVersion": "7.2", "scriptContent": "New-AzAutomationRunAsAccount -ResourceGroupName '[resourceGroup().name]' -AutomationAccountName '[variables('automationAccountName')]'", "timeout": "PT30M", "cleanupPreference": "OnSuccess" } }
⚠️ 注意:要给这个部署脚本的系统分配身份配置足够的权限(比如订阅级的Contributor,或者更细粒度的权限组合:能创建服务主体、管理自动化账户、读取证书等),否则脚本执行会失败。
方案2:分阶段部署(ARM模板 + 外部脚本)
如果觉得嵌入脚本的ARM模板过于复杂,可以拆成两个独立的部署阶段:
- 第一阶段:用ARM模板完成自动化账户的部署;
- 第二阶段:通过Azure PowerShell/CLI脚本、Azure DevOps Pipeline或者GitHub Actions,调用
New-AzAutomationRunAsAccount命令来创建RunAs连接。
这种方式更灵活,方便单独调试脚本部分,也适合已经有成熟CI/CD流程的场景。
方案3:改用Azure Bicep简化部署逻辑
如果你愿意尝试Azure Bicep(ARM的声明式语法扩展,比纯ARM更易读和维护),可以用Bicep的deploymentScript资源来实现同样的自动化流程,代码会简洁很多:
示例Bicep代码:
param automationAccountName string = 'my-auto-account' resource automationAccount 'Microsoft.Automation/automationAccounts@2023-11-01' = { name: automationAccountName location: resourceGroup().location properties: { sku: { name: 'Basic' } } } resource createRunAsAccount 'Microsoft.Resources/deploymentScripts@2020-10-01' = { name: 'CreateRunAsAccount' location: resourceGroup().location dependsOn: [ automationAccount ] identity: { type: 'SystemAssigned' } properties: { azPowerShellVersion: '7.2' scriptContent: ''' New-AzAutomationRunAsAccount -ResourceGroupName '${resourceGroup().name}' -AutomationAccountName '${automationAccount.name}' ''' timeout: 'PT30M' cleanupPreference: 'OnSuccess' } }
同样需要给Bicep部署的身份配置对应的权限,确保能创建服务主体等关联资源。
额外提醒
创建RunAsAccount时会自动生成服务主体、自签名证书等资源,所以执行脚本的身份必须具备这些资源的创建权限。如果想遵循最小权限原则,可以给身份分配Application Administrator(用于创建服务主体)加上Automation Contributor(用于管理自动化账户)的角色组合。
内容的提问来源于stack exchange,提问作者Mani

