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

Terraform部署azurerm_app_service_certificate失败,错误码59716

解决Terraform部署App Service证书时的Key Vault权限错误

问题场景

尝试通过Terraform的azurerm_app_service_certificate资源部署Azure App Service证书,配置代码如下:

resource "azurerm_app_service_certificate" "cert" {
  name                = "testcert"
  resource_group_name = var.resource_group_name
  location            = "eastus"
  key_vault_id        = data.azurerm_key_vault.cert_keyvault.id
  key_vault_secret_id = "https://Test- KV.vault.azure.net/secrets/Testcert/3d10d62bc5da4f31b09a9a90e8189bca"
}

执行terraform apply时操作失败,报错信息:

creating/updating Certificate: (Name "testcert" / Resource Group "Test-RG"):
web.CertificatesClient#CreateOrUpdate: Failure responding to request: StatusCode=400 --
Original Error: autorest/azure: Service returned an error. Status=400 Code="BadRequest"
Message="服务无权访问Key Vault '/subscriptions/XXXXXX-XXX-XXXX-XXXX-XXXXXXXXXX/resourcegroups/Test-RG/providers/microsoft.keyvault/vaults/Test-KV'。请确保已为服务授予执行请求操作所需的必要权限。" Details=[{"Message":"服务无权访问Key Vault '/subscriptions/XXXXXX-XXX-XXXX-XXXX-XXXXXXXXXX/resourcegroups/Test-RG/providers/microsoft.keyvault/vaults/Test-KV'。请确保已为服务授予执行请求操作所需的必要权限。"}, {"Code":"BadRequest"},{"ErrorEntity": {"Code":"BadRequest","ExtendedCode":"59716","Message":"服务无权访问Key Vault '/subscriptions/XXXXXX-XXX-XXXX-XXXX-XXXXXXXXXX/resourcegroups/Test-RG/providers/microsoft.keyvault/vaults/Test-KV'。请确保已为服务授予执行请求操作所需的必要权限。","MessageTemplate":"服务无权访问'{0}' Key Vault。请确保已为服务授予执行请求操作所需的必要权限。","Parameters":["/subscriptions/XXXXXX-XXX-XXXX-XXXX-XXXXXXXXXX/resourcegroups/Test-RG/providers/microsoft.keyvault/vaults/Test-KV"]}}]

解决方案

该错误是由于Azure App Service后台服务未获得目标Key Vault的访问权限,按以下步骤修复:

1. 获取Azure Web Apps全局服务主体ID

Azure Web Apps使用固定的全局服务主体(适用于公共区域),ID为:abfa0a7c-a6b6-4736-8310-5855508787cd

2. 为服务主体配置Key Vault访问策略

需要授予该服务主体Key Vault的密钥、机密、证书的Get和List权限,可通过两种方式配置:

方式一:Azure CLI命令

az keyvault set-policy --name Test-KV --resource-group Test-RG --object-id abfa0a7c-a6b6-4736-8310-5855508787cd --secret-permissions get list --key-permissions get list --certificate-permissions get list

方式二:Terraform集成配置

若要通过Terraform统一管理权限,在Key Vault资源中添加访问策略块:

resource "azurerm_key_vault" "cert_keyvault" {
  # 保留原有Key Vault配置
  name                = "Test-KV"
  resource_group_name = var.resource_group_name
  location            = var.location
  tenant_id           = data.azurerm_client_config.current.tenant_id

  access_policy {
    object_id = "abfa0a7c-a6b6-4736-8310-5855508787cd" # Web Apps服务主体ID
    secret_permissions = ["Get", "List"]
    key_permissions    = ["Get", "List"]
    certificate_permissions = ["Get", "List"]
  }

  # 其他原有配置...
}

3. 检查Key Vault网络访问限制

如果Key Vault启用了防火墙或虚拟网络隔离:

  • 进入Key Vault的「网络」设置,开启「允许受信任的Microsoft服务访问此密钥保管库」
  • 若Terraform执行环境是固定IP,需将该IP加入Key Vault的允许列表

4. 重新执行部署

完成以上配置后,重新运行terraform apply即可完成证书部署。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:28:12