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

如何通过ARM模板将Azure KeyVault机密配置到同资源组App Service

实现方案

你可以通过ARM模板原生能力完成配置,全程不需要手动拷贝机密值,优先使用App Service原生Key Vault引用方案,避免机密明文泄露。

前置配置(必须完成,否则权限不足无法读取机密)

  • 为App Service开启系统分配托管标识,在App Service的资源定义中添加如下配置段:
"identity": {
  "type": "SystemAssigned"
},
"dependsOn": [
  "[resourceId('Microsoft.KeyVault/vaults', variables('vault').name)]"
]
  • 在Key Vault资源的访问策略(properties.accessPolicies数组)中,为上述App Service的托管标识分配机密读取权限:
{
  "objectId": "[reference(resourceId('Microsoft.Web/sites', variables('appServiceName')), '2022-03-01', 'Full').identity.principalId]",
  "tenantId": "[subscription().tenantId]",
  "permissions": {
    "secrets": ["get"]
  }
}

将代码里的variables('appServiceName')替换为你模板中定义的App Service名称变量即可,同资源组下不需要额外写全资源路径。

配置App Settings取值

直接在你之前的siteConfig.appSettings段中,使用Key Vault引用格式填写value即可,最终配置如下:

"siteConfig": {
  "appSettings": [
    {
      "name": "COSMOS_CONNECTION_STRING",
      "value": "[concat('@Microsoft.KeyVault(SecretUri=', reference(resourceId('Microsoft.KeyVault/vaults/secrets', variables('vault').name, 'mongodb')).secretUri, ')')]"
    }
  ]
}

注意事项

  • 上述写法默认拉取Key Vault中mongodb机密的最新启用版本,如果需要绑定固定版本,可以在secretUri后拼接/<你的机密版本号>即可
  • 不要使用listSecrets()类函数直接拉取机密明文填入appSettings,该方式会将连接字符串明文存储在ARM部署记录、App Service配置历史中,存在明确的泄露风险
  • 如果你的Key Vault开启了公网访问限制,需要将App Service与Key Vault部署在同一可连通的VNet中,否则App Service运行时无法拉取机密值
  • 部署时确认ARM模板的部署身份拥有Key Vault的机密读取权限,否则模板校验阶段就会报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.21 16:16:02