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

如何通过ARM模板将Key Vault部署为Azure App Service环境变量

ARM模板配置建议

1. 模板核心代码

修改原有ARM模板,添加Key Vault相关参数,并将应用设置改为引用Key Vault密钥的格式:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "webAppName": {
      "type": "string",
      "metadata": {
        "description": "App Service实例名称"
      }
    },
    "keyVaultName": {
      "type": "string",
      "metadata": {
        "description": "目标Key Vault名称"
      }
    },
    // 按需添加对应Key Vault中的密钥名称参数
    "dbConnSecretName": {
      "type": "string",
      "metadata": {
        "description": "数据库连接字符串对应的Key Vault密钥名"
      }
    },
    "apiKeySecretName": {
      "type": "string",
      "metadata": {
        "description": "API密钥对应的Key Vault密钥名"
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Web/sites",
      "apiVersion": "2022-03-01",
      "name": "[parameters('webAppName')]",
      "location": "[resourceGroup().location]",
      // 启用系统分配MSI,用于App Service访问Key Vault
      "identity": {
        "type": "SystemAssigned"
      },
      "properties": {
        "siteConfig": {
          "appSettings": [
            {
              "name": "DbConnectionString",
              "value": "[concat('@Microsoft.KeyVault(SecretUri=https://', parameters('keyVaultName'), '.vault.azure.net/secrets/', parameters('dbConnSecretName'), '/')]"
            },
            {
              "name": "ApiKey",
              "value": "[concat('@Microsoft.KeyVault(SecretUri=https://', parameters('keyVaultName'), '.vault.azure.net/secrets/', parameters('apiKeySecretName'), '/')]"
            }
            // 可继续添加更多引用Key Vault的应用设置项
          ]
        }
      }
    }
  ]
}

2. 参数文件(csmParametersFile)示例

创建parameters.json文件存储固定参数值,动态参数可在YAML中通过overrideParameters覆盖:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "webAppName": {
      "value": "my-demo-webapp"
    },
    "keyVaultName": {
      "value": "my-demo-keyvault"
    },
    "dbConnSecretName": {
      "value": "DbConnectionString"
    },
    "apiKeySecretName": {
      "value": "ServiceApiKey"
    }
  }
}
Azure DevOps YAML管道配置

在部署任务中保留csmParametersFile和overrideParameters的用法,传入Azure DevOps库中的Key Vault相关变量:

steps:
- task: AzureResourceManagerTemplateDeployment@3
  displayName: '部署App Service及Key Vault引用配置'
  inputs:
    deploymentScope: 'Resource Group'
    azureResourceManagerConnection: '<你的Azure服务连接名称>'
    subscriptionId: '<目标订阅ID>'
    action: 'Create Or Update Resource Group'
    resourceGroupName: '<目标资源组名称>'
    location: '<部署区域>'
    templateLocation: 'Linked artifact'
    csmFile: './templates/webapp-keyvault-template.json'
    csmParametersFile: './templates/parameters.json'
    # 用overrideParameters覆盖参数文件中的动态值,从Azure DevOps库拉取变量
    overrideParameters: >
      -webAppName $(WebAppName)
      -keyVaultName $(KeyVaultNameFromLibrary)
      -dbConnSecretName $(DbSecretName)
    deploymentMode: 'Incremental'
必需的权限配置
  • App Service MSI权限:在Key Vault的「访问策略」中,添加App Service的系统分配身份,授予「秘密-读取」权限,确保App Service能拉取Key Vault中的密钥。
  • Azure DevOps服务主体权限:给管道使用的服务主体添加Key Vault的「列表」权限,确保ARM模板部署时能验证密钥路径的有效性。

内容的提问来源于stack exchange,提问作者Ahsan Ullah Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 05:12:20