You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Microsoft.Resources/deploymentScripts遇DeploymentScriptOperationFailed错误求助

解决Microsoft.Resources/deploymentScripts存储密钥被策略禁止的问题

核心原因

你的DeploymentScripts服务原本通过存储账户密钥访问存储,但当前Azure策略禁止使用共享存储访问密钥,导致操作失败。

推荐解决方法:切换为托管标识访问存储账户

既然你已经在使用用户托管标识执行脚本,只需调整模板配置,让服务通过托管标识授权访问存储,不再依赖存储密钥:

  1. 配置托管标识的存储权限

    • 给当前使用的用户托管标识分配目标存储账户的Storage Blob Data Contributor角色(遵循最小权限原则,可根据脚本实际需求调整为更窄的权限)
  2. 修改ARM模板

    • 移除storageAccountConfiguration中的storageAccountKey字段,仅保留storageAccountName
    • 确保模板中deploymentScript资源的identity部分正确指定用户托管标识

示例模板片段:

{
  "type": "Microsoft.Resources/deploymentScripts",
  "apiVersion": "2023-08-01",
  "name": "[parameters('scriptName')]",
  "identity": {
    "type": "UserAssigned",
    "userAssignedIdentities": {
      "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('userManagedIdentityName'))]": {}
    }
  },
  "properties": {
    "storageAccountConfiguration": {
      "storageAccountName": "[parameters('storageAccountName')]"
    },
    // 保留其他脚本执行相关配置
  }
}
  1. 确保部署顺序正确
    如果是在同一模板中创建角色分配,需添加依赖关系,保证角色分配在DeploymentScripts资源之前完成,避免权限未生效的问题。

临时应急方案(不推荐长期使用)

如果无法立即修改模板,可通过Azure Policy创建策略例外,允许当前DeploymentScripts资源或关联的存储账户使用共享密钥。但此方案违背安全策略初衷,仅作为临时过渡使用。

替代方案

若现有场景允许,可将DeploymentScripts替换为Azure Automation Runbook:

  • Runbook同样支持用户托管标识授权访问存储账户
  • 适合需要更复杂调度、日志管理或脚本生命周期管理的场景,需调整现有脚本适配Runbook环境

内容的提问来源于stack exchange,提问作者Albert Samigullin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 10:45:54