azure Web 应用程序配置设置中的“Key Vault 引用错误”

问题描述 投票:0回答:5

我有一个由 azure 为 Linux 容器的 Web 应用程序生成的私有证书。我想通过 azure 门户中的 Web 应用程序配置设置将此值传递给我的 .net core 应用程序。这是管道 CI-CD 流程的一部分,在应用程序配置中指定 Identity Server 键值的能力有助于将这些值排除在源代码之外。

问题

我通过设置不断收到以下错误

❌密钥保管库参考

还显示在这里:

我正在尝试使用此处微软文档建议的格式的秘密值 我尝试过以下格式:

@Microsoft.KeyVault(https://myvault.vault.azure.net/secrets/myCertName/versionGUID)

@Microsoft.KeyVault(VaultName=myvault;SecretName=myCertName;SecretVersion=versionGUID)

另外,我已将 Web 应用程序添加到 azure Key Vault 的访问策略中

编辑1:

存在格式错误,并且我的秘密名称错误,因此以下格式有效:

@Microsoft.KeyVault(https://myvault.vault.azure.net/secrets/myCertName/versionGUID)

但是我遇到了一个新错误:

无法解析 Key Vault 参考,因为站点托管 身份未启用 MSINotEnabled

所以我转到 Web 应用程序的“身份”选项卡,并打开该应用程序的托管身份。

我现在遇到以下错误:

无法解析 Key Vault 参考,因为站点已关闭 拒绝访问 Key Vault 参考的保管库。

我发现多个网站表示,如果您刚刚删除设置并保存,然后将设置添加回来,它应该可以解决。这对我不起作用。

我还尝试在 Azure Key Vault 访问策略中授予对 Web 应用程序的“完全访问权限”。

azure ssl-certificate identityserver4 azure-keyvault azure-webapps
5个回答
29
投票

首先,参考格式

@Microsoft.KeyVault(https://myvault.vault.azure.net/secrets/myCertName/versionGUID)
错误,应该是
@Microsoft.KeyVault(SecretUri=https://myvault.vault.azure.net/secrets/myCertName/versionGUID)

其次,我认为您没有正确授予网络应用程序的 MSI 权限。

根据您的原帖中的描述:

另外,我已将 Web 应用程序添加到 azure Key Vault 的访问策略中

然后在您的编辑1中:

所以我转到网络应用程序的身份选项卡,并打开应用程序的托管身份。

显然顺序是错误的,如果你之前没有启用应用程序的MSI,你如何将其添加到访问策略中?我想你可能加错了。

因此,就您的情况而言,请确保您已将 Web 应用程序的 MSI 正确添加到访问策略中。

1.导航到网络应用程序 ->

Identity
-> 复制
Object ID
(另请确保您使用的是系统分配的 MSI,keyvault 参考功能不支持用户分配的 MSI)

2.然后在密钥库的

Access policies
中 ->
Add Access Policy
-> 在步骤 1 中搜索
Object ID
并使用
Get
Secret 权限添加它,如下所示 -> 选择并保存。

3.导航到应用程序并检查它,它工作正常。


8
投票

您的应用程序应该能够访问 Key Vault 以成功解析引用。如果其他所有内容(例如访问策略和语法)似乎都正常,但您的引用无法解析,请尝试检查您的 Key Vault 是否有任何网络限制。

如果您在 Vault 的访问策略设置页面上看到与“网络访问控制”相关的警告,则需要允许应用程序的 IP 通过 Key Vault 防火墙。

将应用程序的 IP(在自定义域下可用)添加到 Key Vault 的防火墙(在网络下)。

参考:https://medium.com/geekculture/troubleshooting-azure-key-vault-references-in-azure-function-apps-b228c1216f63


2
投票

如果是用户管理的身份,我们需要打补丁才能使其正常工作

userAssignedIdentityResourceId=$(az identity show -g MyResourceGroupName -n MyUserAssignedIdentityName --query id -o tsv)
appResourceId=$(az webapp show -g MyResourceGroupName -n MyAppName --query id -o tsv)
az rest --method PATCH --uri "${appResourceId}?api-version=2021-01-01" --body "{'properties':{'keyVaultReferenceIdentity':'${userAssignedIdentityResourceId}'}}"

文档链接


0
投票

我在通过 terraform 创建资源时面临同样的问题。

我还为 azure 功能应用程序添加了密钥保管库访问策略,问题就消失了。

以下部分仅适用于正在做 terraform 的人。

我的配置看起来像这样,

resource "azurerm_key_vault_access_policy" "resource_group_manager" { 
    key_vault_id = module.key_vault_info.key_vault_id 
    tenant_id = data.azurerm_client_config.current.tenant_id 
    object_id = data.azuread_group.manager.id 
    key_permissions = [ "Get", "List", "Create", "Update", "Delete", ] 
    secret_permissions = [ "Get", "List", "Set", "Delete", ] 
}

我仅针对 azure 资源组 添加了密钥保管库访问策略 但不适用于天蓝色功能。

为了解决这个问题,

我还为 azure 功能应用程序添加了密钥保管库访问策略

像下面这样,

resource "azurerm_key_vault_access_policy" "resource_group_manager" { 
    key_vault_id = module.key_vault_info.key_vault_id 
    tenant_id = data.azurerm_client_config.current.tenant_id 
    object_id = data.azuread_group.manager.id 
    key_permissions = [ "Get", "List", "Create", "Update", "Delete", ] 
    secret_permissions = [ "Get", "List", "Set", "Delete", ] 
}

resource "azurerm_key_vault_access_policy" "this" {
    key_vault_id = module.key_vault_info.key_vault_id 
    tenant_id = data.azurerm_client_config.current.tenant_id 
    object_id = azurerm_function_app.this.identity.0.principal_id 
    key_permissions = [ "Get", "List", "Create", "Update", "Delete", ] 
    secret_permissions = [ "Get", "List", "Set", "Delete", ] 
}

0
投票

从 azurerm terraform 提供程序版本 3.100.0 开始,不要忘记设置属性

key_vault_reference_identity_id
:

resource "azurerm_windows_web_app" "main" {
  
  key_vault_reference_identity_id = azurerm_user_assigned_identity.main.id

  app_settings = {
    "MySecretSetting" = "@Microsoft.KeyVault(VaultName=${local.vault_name};SecretName=${local.secret_name})"
  }

  identity {
    type         = "UserAssigned"
    identity_ids = [azurerm_user_assigned_identity.main.id]
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.