使用VS Code调试本地Azure功能时无法验证

时间:2020-07-28 15:19:54

标签: python azure visual-studio-code

我在Python中有一个 Azure函数,在其中我从 Key Vault 得到了秘密。 Azure功能是配置了受管身份应用服务的一部分,因此我没有服务主体。要访问Key Vault,我正在使用azure身份库和 DefaultAzureCredential 类。

我的问题是通过该功能的本地调试,未检测到凭据。我知道调试器使用其他外壳程序,因此未设置登录环境变量。我尝试在launch.json中指定“ env”属性,但收到警告,不允许我添加它,如果将其重命名为“ environment”,则同样。我还尝试使用InteractiveBrowserCredential类使用我的用户帐户登录,这是一种解决方法,但是随后由于没有正确的凭据访问Key Vault而取消了凭据。

如何设置VS Code本地调试环境以与App Service的托管身份一起使用?

这是我代码的例外:

import os
import logging
import azure.functions as func
from azure.storage.blob import BlobServiceClient
from azure.identity import DefaultAzureCredential, UsernamePasswordCredential
from azure.keyvault.secrets import SecretClient

def main(req: func.HttpRequest) -> func.HttpResponse:
    vault_url = os.environ['KeyVaultUrl']
    credential = DefaultAzureCredential()
    secret_client = SecretClient(vault_url=vault_url, credential=credential)
    access_key = secret_client.get_secret(os.environ['StorageSecretName'])

谢谢

1 个答案:

答案 0 :(得分:2)

如果要在本地运行DefaultAzureCredential时运行该功能,我们需要在local.settings.json中添加这些设置。 json文件用于存储应用程序设置,连接字符串和本地开发工具使用的设置。有关更多详细信息,请参阅herehere

例如

local.settings.json

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "",
    "FUNCTIONS_WORKER_RUNTIME": "python",  
    "AZURE_CLIENT_ID": "42e***522d988c4",
    "AZURE_CLIENT_SECRET": "Gbx2eK***ClJDfQpIjoae:",
    "AZURE_TENANT_ID": "e4c9ab4e-b***230ba2a757fb"
  }
}

代码

import logging
import azure.functions as func
import os
from azure.keyvault.secrets import SecretClient
from azure.identity import DefaultAzureCredential

async def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')
    
    vault_url = 'https://testsql.vault.azure.net/'
    credential = DefaultAzureCredential()
    secret_client = SecretClient(vault_url=vault_url, credential=credential)
    access_key = secret_client.get_secret('DBConnectionString')
    return func.HttpResponse(access_key.value,
        mimetype="application/json",)
    

enter image description here enter image description here