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

如何自动为现有Azure应用服务配置Key Vault证书

Azure Key Vault 关联现有App/Function Apps自动化实现方案

前置条件确认

  • 所有目标App Service/Function App已启用系统分配托管标识(system assigned identity = true)
  • 操作账号具备Key Vault管理员、App Service贡献者及相关资源组的访问权限
  • 目标证书已提前存入Azure Key Vault中

方案1:PowerShell 脚本实现

首先确保本地已安装Az模块,执行前先运行Connect-AzAccount登录Azure租户,替换脚本中占位符为实际资源参数即可运行:

# 配置参数
$subscriptionId = "你的订阅ID"
$keyVaultName = "目标Key Vault名称"
$appName = "App Service/Function App名称"
$resourceGroupName = "资源组名称"
$certNameInKV = "Key Vault中的证书名称"
$certStoreName = "My" # 证书存储位置默认用My即可

# 切换订阅
Set-AzContext -Subscription $subscriptionId

# 1. 获取App的系统托管标识ID
$app = Get-AzWebApp -ResourceGroupName $resourceGroupName -Name $appName
$identityId = $app.Identity.PrincipalId

# 2. 为托管标识添加Key Vault访问策略,授予证书读取权限
Set-AzKeyVaultAccessPolicy -VaultName $keyVaultName `
  -ObjectId $identityId `
  -PermissionsToCertificates Get,List `
  -PassThru

# 3. 从Key Vault导入证书到App Service
$kv = Get-AzKeyVault -VaultName $keyVaultName -ResourceGroupName $resourceGroupName
$certSecretId = (Get-AzKeyVaultCertificate -VaultName $keyVaultName -Name $certNameInKV).SecretId
New-AzWebAppCertificate -ResourceGroupName $resourceGroupName `
  -Name $certNameInKV `
  -WebAppName $appName `
  -KeyVaultId $kv.ResourceId `
  -KeyVaultSecretId $certSecretId `
  -Location $app.Location

脚本执行完成后可在App Service的TLS/SSL设置中查看已导入的证书。


方案2:Azure Automation 实现

  1. 提前创建Azure Automation账户,在【模块】中导入Az.Accounts、Az.KeyVault、Az.Websites三个模块
  2. 在自动化账户的【身份标识】中启用系统托管标识,为该标识授予对应资源组的贡献者权限、Key Vault的管理员权限
  3. 创建PowerShell类型的Runbook,粘贴以下代码,配置参数后即可手动触发或配置定时触发:
Param(
  [Parameter(Mandatory=$true)]
  [string]$SubscriptionId,
  [Parameter(Mandatory=$true)]
  [string]$ResourceGroupName,
  [Parameter(Mandatory=$true)]
  [string]$KeyVaultName,
  [Parameter(Mandatory=$true)]
  [string]$AppName,
  [Parameter(Mandatory=$true)]
  [string]$CertNameInKV
)

# 自动化账户登录
Connect-AzAccount -Identity
Set-AzContext -Subscription $SubscriptionId

# 后续逻辑和上述PowerShell脚本一致
$app = Get-AzWebApp -ResourceGroupName $ResourceGroupName -Name $AppName
$identityId = $app.Identity.PrincipalId

Set-AzKeyVaultAccessPolicy -VaultName $KeyVaultName `
  -ObjectId $identityId `
  -PermissionsToCertificates Get,List `
  -PassThru

$kv = Get-AzKeyVault -VaultName $KeyVaultName -ResourceGroupName $ResourceGroupName
$certSecretId = (Get-AzKeyVaultCertificate -VaultName $KeyVaultName -Name $CertNameInKV).SecretId
New-AzWebAppCertificate -ResourceGroupName $ResourceGroupName `
  -Name $CertNameInKV `
  -WebAppName $AppName `
  -KeyVaultId $kv.ResourceId `
  -KeyVaultSecretId $certSecretId `
  -Location $app.Location

方案3:Terraform 实现

如果现有资源已经通过Terraform管理,可直接添加以下配置片段,执行terraform apply即可完成配置:

# 引用现有App Service资源
data "azurerm_linux_web_app" "existing_app" {
  name                = "你的App名称"
  resource_group_name = "资源组名称"
}

# 引用现有Key Vault资源
data "azurerm_key_vault" "existing_kv" {
  name                = "Key Vault名称"
  resource_group_name = "资源组名称"
}

# 引用Key Vault中的现有证书
data "azurerm_key_vault_certificate" "existing_cert" {
  name         = "证书在Key Vault中的名称"
  key_vault_id = data.azurerm_key_vault.existing_kv.id
}

# 添加Key Vault访问策略,授予App托管标识证书读取权限
resource "azurerm_key_vault_access_policy" "app_cert_access" {
  key_vault_id = data.azurerm_key_vault.existing_kv.id
  tenant_id    = data.azurerm_linux_web_app.existing_app.identity[0].tenant_id
  object_id    = data.azurerm_linux_web_app.existing_app.identity[0].principal_id

  certificate_permissions = [
    "Get",
    "List"
  ]
}

# 导入证书到App Service
resource "azurerm_app_service_certificate" "imported_cert" {
  name                = "导入后的证书名称"
  resource_group_name = data.azurerm_linux_web_app.existing_app.resource_group_name
  location            = data.azurerm_linux_web_app.existing_app.location
  key_vault_secret_id = data.azurerm_key_vault_certificate.existing_cert.secret_id

  depends_on = [azurerm_key_vault_access_policy.app_cert_access]
}

如果是Function App或者Windows Web App,把azurerm_linux_web_app替换为对应数据源即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:27:04