检索集成在 httptrigger/queuetrigger -Python 中的 Keyvault 秘密

Retrieving Keyvault Secret Integrated in a httptrigger/queuetrigger -Python

我已经成功地在 httptrigger 中集成了一个秘密。我需要检索并解析 python 代码中的秘密。

以下代码 returns 保险库 ID 而不是秘密。

  1. 如何让它输出秘密值?
  2. 队列触发器也可以这样做吗?

HTTP 触发器

import logging
import os
import azure.functions as func


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

    test = os.environ["testkeyvault"]
    return func.HttpResponse(
             "This" + test,
             status_code=200
        )

local.settings.json

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "",
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "testkeyvault": "@Microsoft.KeyVault(SecretUri=https://jjjjj.vault.azure.net/secrets/AzureAuthUrl/xxxxxx)"
  }
}

function.json

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "$return"
    }
  ]
}

对于这个问题,我在身边测试了一下。你只需要将你的函数部署到 azure,然后它就可以正常工作了。如果你 运行 你的函数在本地,它无法获取密钥库。

将函数部署到 Azure 后,还需要将其添加到函数应用程序的应用程序设置中。

另外不要忘记启用函数应用程序的“身份”。

然后在密钥库中添加访问策略以允许您的函数可以访问密钥库。

顺便说一句,看来你的所有步骤都是正确的。所以请注意,上面的所有步骤都会获取存储在我的密钥库中的秘密值,如下图所示。 所以请检查您是否误解了azure函数中get keyvault的功能。

How do I get it to output a secret values?

1,创建一个secret,设置值,获取'secret identifier',将这个@Microsoft.KeyVault(SecretUri=<secret identifier>)设置为你的函数应用程序的设置。

2、创建函数app身份,让函数身份访问对keyvault有相应的访问策略。

Can the same be done for a queuetrigger?

是的,你可以。基本上你可以从环境变量中获取它,就像你在 httptrigger 中所做的那样。存储在函数应用配置中的值将作为应用内环境变量读取。如果有keystore引用,只要引用成功,就会返回secret。否则,将返回原来的url