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

时间:2019-09-25 19:29:57

标签: azure azure-functions python-3.6 azure-keyvault

我已经建立了一个单独的测试环境,以尝试从天蓝色的密钥库中检索应用程序的机密。当运行测试函数返回环境变量时,“应用程序设置”中的@ Microsoft.KeyVault(...)引用无法解析为引用的秘密或文本。

按照this文档创建应用服务并针对密钥库进行身份验证之后,我为我的功能创建了一个托管身份,并将其添加到AAD中,并使用Get为该托管身份创建了特定的访问策略我的密钥库中的秘密作用域,并尝试在有/无启用应用程序的情况下以用户身份启用读取作用域。

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

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

似乎没有改变任何东西。我已经等了半个小时了,设置的更改才能在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
        )

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

1 个答案:

答案 0 :(得分:1)

我和您有同样的问题,我为我的功能启用了MSI,并在azure密钥保管库中授予了访问策略的所有权限,但是它拒绝了我的访问: enter image description here enter image description here

我在appsettings中删除了“ CLIENTID”项,保存了更新,并再次创建了“ CLINETID”项,并保存了更新。成功更新appsettings后,单击“编辑”按钮,即可看到其状态已解决: enter image description here 测试结果 : enter image description here 希望对您有所帮助。