ARM模板中如何向Microsoft.Resources/deploymentScripts传递服务主体凭据
ARM DeploymentScripts 传递服务主体凭据实现登录的方案
前置准备
- 先创建拥有目标操作权限的服务主体,执行以下PowerShell命令完成创建,保存输出的应用ID、租户ID、客户端密码:
New-AzADServicePrincipal -DisplayName <自定义SP名称> -Role <所需RBAC角色> -Scope <权限作用域>
ARM模板配置步骤
- 新增三个安全参数存储凭据,避免明文泄露:
"parameters": { "spClientId": { "type": "secureString", "metadata": { "description": "服务主体应用ID" } }, "spClientSecret": { "type": "secureString", "metadata": { "description": "服务主体客户端密码" } }, "tenantId": { "type": "secureString", "metadata": { "description": "Azure AD租户ID" } } }
- 在deploymentScripts资源中通过安全环境变量传递凭据,在脚本内读取环境变量完成登录:
{ "type": "Microsoft.Resources/deploymentScripts", "apiVersion": "2020-10-01", "name": "customPwshScript", "location": "[resourceGroup().location]", "properties": { "azPowerShellVersion": "9.7", "environmentVariables": [ { "name": "SP_CLIENT_ID", "secureValue": "[parameters('spClientId')]" }, { "name": "SP_CLIENT_SECRET", "secureValue": "[parameters('spClientSecret')]" }, { "name": "TENANT_ID", "secureValue": "[parameters('tenantId')]" } ], "scriptContent": " # 读取环境变量构造凭据 $secret = ConvertTo-SecureString $env:SP_CLIENT_SECRET -AsPlainText -Force $cred = New-Object System.Management.Automation.PSCredential($env:SP_CLIENT_ID, $secret) # 登录Azure Connect-AzAccount -ServicePrincipal -Credential $cred -Tenant $env:TENANT_ID # 下方编写你需要执行的其他操作逻辑 ", "timeout": "PT30M", "cleanupPreference": "OnSuccess", "retentionInterval": "P1D" } }
部署说明
模板部署时将提前保存的三个服务主体凭据作为参数传入即可,无需硬编码到模板内容中。
提示:优先选择为deploymentScripts配置托管标识的方案,无需手动维护凭据,安全性更高。如果必须使用显式服务主体登录,请严格遵循最小权限原则配置服务主体的RBAC权限。
内容的提问来源于stack exchange,提问作者Ceros
相关产品推荐
相关产品推荐

