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

Hel*_*und 1 azure azure-keyvault python-3.6 azure-functions

我已经设置了一个单独的测试环境来尝试从 azure 密钥保管库中检索应用程序机密。当测试函数运行以返回环境变量时,应用程序设置中的 @Microsoft.KeyVault(...) 引用未解析为引用的机密或文本。

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

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

或者

@Microsoft.KeyVault(VaultName=myvault;SecretName=mysecret;SecretVersion={version})
Run Code Online (Sandbox Code Playgroud)

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

这是我返回环境变量的函数应用程序(用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
        )
Run Code Online (Sandbox Code Playgroud)

我希望能够提取环境变量 CLIENTID。相反,获取该变量失败并返回所有环境变量。如果我无法返回单一变量,我会故意返回所有环境变量,因为我想确保在变量重命名或存在键入/区分大小写问题时捕获了它。

Sta*_*ong 6

我和你有同样的问题,我为我的功能启用了 MSI 并在 azure key Vault 中授予访问策略的所有权限,但它拒绝了我的访问: 在此处输入图片说明 在此处输入图片说明

我在 appsettings 中删除了“CLIENTID”项目,保存更新并再次创建“CLINETID”项目,保存更新。appsettings更新成功后,点击编辑按钮,可以看到它的状态是已解决: 在此处输入图片说明 测试结果 : 在此处输入图片说明 希望能帮助到你 。