如何通过函数应用程序中的应用程序设置解析 KeyVault 对机密的引用?

How to resolve KeyVault references to secrets via application settings in function apps?

我已经设置了一个单独的测试环境来尝试从 Azure Key Vault 中检索应用程序机密。当测试函数是 运行 return 环境变量时,应用程序设置中的 @Microsoft.KeyVault(...) 引用未解析为引用的秘密或文本。

按照 this 文档创建应用服务并根据密钥保管库对其进行身份验证,我为我的函数创建了一个托管标识,将其添加到 AAD,为此托管标识创建了一个特定的访问策略我的密钥保管库中的 Get Secret 范围,并尝试 with/without 以用户身份使用应用程序启用读取范围。

运行 解决函数应用程序设置引用的诊断工具未产生任何错误。输入应用程序设置 @Microsoft.KeyVault(SecretUri=SecretUri)

@Microsoft.KeyVault(VaultName=myvault;SecretName=mysecret;SecretVersion={version})

似乎没有任何改变。我已经等待了长达半小时,以便在 Azure 中复制设置更改,并确保我所做的更改是持久的。

这是我对 return 环境变量的函数应用(写在 python 中):

import json
import logging
import os
import azure.functions as func


def main(req=None) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    try:
        name = [os.environ["CLIENTID"]]
    except:
        name=dict()

        for d in os.environ:
            name[d]=os.environ[d]
    if name:
        return func.HttpResponse("Params\n{}".format(json.dumps(name, sort_keys=True, indent=4)))
    else:
        return func.HttpResponse(
             "Please pass a name on the query string or in the request body",
             status_code=400
        )

我希望能够拉取环境变量 CLIENTID。相反,获取该变量失败并且所有环境变量都被 returned。如果我不能 return 单个变量,我会故意 return 所有环境变量,因为我想确保在重命名变量或存在 typing/case 敏感性问题时捕获它。

我和你有同样的问题,我为我的功能启用了 MSI 并在 azure key vault 中授予访问策略的所有权限,但它拒绝了我的访问:

我删除了 appsettings 中的 "CLIENTID" 项目,保存更新并再次创建 "CLINETID" 项目,保存更新。 appsettings 更新成功后,点击 edit 按钮,你可以看到它的状态是 has been solved : 测试结果 : 希望对你有帮助。