如何在Azure服务中使用Key Vault公钥证书并通过DevOps Pipeline配置
替代WEBSITE_LOAD_ROOT_CERTIFICATES的Key Vault集成方案
核心逻辑
直接利用Azure App Service/Functions的内置能力,结合Key Vault存储自签名根/中间证书,通过配置项让应用自动加载并信任这些证书,全程无需手动编写证书加载代码。
一、Key Vault准备
- 将组织的自签名根证书、中间证书以证书类型上传至Key Vault(支持.cer格式,上传时选择"证书"而非"秘密/密钥",确保证书链能被正确解析)
- 为目标App Service/Functions的系统托管标识(或用户托管标识)分配
Key Vault Certificates User权限,允许其读取Key Vault中的证书
二、App Service/Functions配置
- 启用应用的系统托管标识(若使用用户托管标识,需先创建并关联至应用)
- 添加以下应用配置项:
- 若需将证书加载至信任根存储(对应原
WEBSITE_LOAD_ROOT_CERTIFICATES的场景):
设置WEBSITE_TRUSTED_ROOT_CERTIFICATES的值为Key Vault中证书的引用格式,示例:
多个证书用逗号分隔即可。@Microsoft.KeyVault(SecretUri=https://<你的Key Vault名称>.vault.azure.net/secrets/<证书名称>) - 若仅需加载证书到应用的个人存储(供客户端证书认证等场景):
设置WEBSITE_LOAD_CERTIFICATES为证书指纹或Key Vault引用,逻辑与原配置一致,但证书来源为Key Vault。
- 若需将证书加载至信任根存储(对应原
三、Azure DevOps Pipeline自动化实现
通过Pipeline完成证书上传、权限配置、应用设置的全流程自动化:
示例Pipeline代码
# 1. 上传自签名证书到Key Vault - task: AzureKeyVault@2 inputs: azureSubscription: '<你的Azure服务连接名称>' KeyVaultName: '<目标Key Vault名称>' UploadCertificateFile: './artifacts/internal-root-cert.cer' # 证书在Pipeline工件中的路径 UploadCertificateName: 'internal-root-cert' UploadCertificateContentType: 'application/x-x509-ca-cert' # 2. 为应用托管标识配置Key Vault访问权限 - task: AzureCLI@2 inputs: azureSubscription: '<你的Azure服务连接名称>' scriptType: 'bash' inlineScript: | # 获取应用托管标识ID identity_id=$(az webapp identity show --name <App Service名称> --resource-group <资源组名称> --query id -o tsv) # 分配证书读取权限 az keyvault set-policy --name <目标Key Vault名称> --object-id $identity_id --certificate-permissions get list # 3. 配置应用的信任证书加载项 - task: AzureAppServiceSettings@1 inputs: azureSubscription: '<你的Azure服务连接名称>' appName: '<App Service/Functions名称>' resourceGroupName: '<资源组名称>' appSettings: | [ { "name": "WEBSITE_TRUSTED_ROOT_CERTIFICATES", "value": "@Microsoft.KeyVault(SecretUri=https://<目标Key Vault名称>.vault.azure.net/secrets/internal-root-cert)", "slotSetting": false } ]
关键说明
WEBSITE_TRUSTED_ROOT_CERTIFICATES会自动将Key Vault中的证书注入应用的信任根存储,HttpClient发起请求时会默认信任这些证书,无需额外代码配置- 若需同时加载多个证书,只需在配置值中用逗号分隔多个Key Vault引用
- 确保Key Vault的防火墙规则允许App Service/Functions的出站IP访问(或启用"允许受信任的Microsoft服务访问此Key Vault"选项)
内容的提问来源于stack exchange,提问作者Aran Mulholland
相关产品推荐
相关产品推荐

