我在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'])
谢谢
答案 0 :(得分:2)
如果要在本地运行DefaultAzureCredential
时运行该功能,我们需要在local.settings.json
中添加这些设置。 json文件用于存储应用程序设置,连接字符串和本地开发工具使用的设置。有关更多详细信息,请参阅here和here
例如
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",)