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

如何使用Azure.ResourceManager .NET库将KeyVault证书导入AppService

使用Azure.ResourceManager从KeyVault导入证书到App Service(非SSL绑定)

我在GitHub提交问题未获回复,现寻求帮助:

环境信息

  • 使用库及版本:Azure.ResourceManager 1.12.0
  • 需求:创建/更新App Service(Function App)时,从KeyVault导入证书供应用代码做数据库身份验证使用,非用于TLS/SSL主机绑定。
  • 等效Azure CLI命令:
    az webapp config ssl import --resource-group MyResourceGroup --name MyWebapp --key-vault MyKeyVault --key-vault-certificate-name MyCertificateName
    

之前的错误尝试

我曾错误使用HostNameSslStates添加证书,这是用于SSL主机绑定的逻辑,无法实现证书导入到App Service存储的需求:

// First set up WebSiteData (a function app in my case)
var webSiteData = new WebsiteData(...);

new CertificateClient(new Uri(_keyVaultUrl), new DefaultAzureCredential());
KeyVaultCertificateWithPolicy vaultCertificate = await certificateClient.GetCertificateAsync("cert-name");

webSiteData.HostNameSslStates.Add(new HostNameSslState
{
    Name = vaultCertificate.Name,
    ThumbprintString = vaultCertificate.Properties.X509ThumbprintString,
    SslState = HostNameBindingSslState.SniEnabled
});

var webSite = (await resourceGroup.GetWebSites().CreateOrUpdateAsync(
    WaitUntil.Completed,
    "site-name",
    webSiteData
)).Value;

正确的实现方式

要实现与CLI命令等效的功能,需要通过WebAppCertificate资源的创建操作,将KeyVault中的证书导入到App Service的证书存储中,代码示例如下:

using Azure.ResourceManager.AppService;
using Azure.ResourceManager.AppService.Models;
using Azure.Security.KeyVault.Certificates;

// 1. 初始化KeyVault客户端获取证书信息(可选,也可直接构造KeyVault参数)
var certificateClient = new CertificateClient(new Uri(_keyVaultUrl), new DefaultAzureCredential());
var vaultCertificate = await certificateClient.GetCertificateAsync("cert-name");

// 2. 构造证书导入的配置数据
var certImportData = new WebAppCertificateData(webSiteData.Location)
{
    // 指定KeyVault的资源ID
    KeyVaultId = "/subscriptions/{你的订阅ID}/resourceGroups/{资源组名}/providers/Microsoft.KeyVault/vaults/{KeyVault名称}",
    // KeyVault中证书的名称(对应CLI的--key-vault-certificate-name)
    KeyVaultSecretName = vaultCertificate.Name,
    // 可选:指定证书版本,不填则使用最新版本
    // KeyVaultSecretVersion = vaultCertificate.Properties.Version,
    // 指定App Service计划的资源ID
    ServerFarmId = "/subscriptions/{你的订阅ID}/resourceGroups/{资源组名}/providers/Microsoft.Web/serverfarms/{AppService计划名称}"
};

// 3. 执行证书导入操作
var webAppCertificates = resourceGroup.GetWebAppCertificates();
var importedCertificate = await webAppCertificates.CreateOrUpdateAsync(
    WaitUntil.Completed,
    $"imported-{vaultCertificate.Name}", // 证书在App Service中的显示名称,可自定义
    certImportData
);

注意事项

  • 确保App Service的系统分配身份(或指定的服务主体)拥有KeyVault的Key Vault Secrets User角色权限,否则会因权限不足导致导入失败。
  • 导入完成后,应用代码可通过证书指纹或名称访问该证书,用于数据库等服务的身份验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:07:11