我看过其他关于此的帖子,但似乎没有一个答案有效。 我有一个正在本地开发的 azure 函数应用程序。它使用应用程序设置从密钥库中获取用户名/密码。当部署到 Azure 时,它可以完美运行。但是在本地开发,并不是从vault中抓取数据
所以在代码中,我有这个:
var password = System.Environment.GetEnvironmentVariable("PASSWORD", EnvironmentVariableTarget.Process);
我已将我的用户添加到保险库访问策略中,并在那里也添加了应用程序身份。这就是它在天蓝色中工作的原因。 我看到这篇文章提到设置环境变量: https://github.com/Azure/azure-functions-host/issues/3907 我试过了,但仍然没有骰子。每当我调用上面的代码时,我只会取回设置键,如下所示:
@Microsoft.KeyVault(SecretUri=https://mykeyvault.vault.azure.net/secrets/PASSWORD/e97ba4bf3e2e4919b1899384ea349999)
当然不行,keyvault参考只是function app或web app的特性,不适用于本地开发
在本地,您的选择是通过 SDK 手动获取秘密。
var client = new SecretClient(vaultUri: new Uri(keyVaultUrl), credential: new DefaultAzureCredential());
secret = client.GetSecret("secret-name");
DefaultAzureCredential
的Azure.Identity
进行认证,它会依次尝试几种凭证类型进行认证,其中一种是VisualStudioCredential
,意味着它将使用登录的用户帐户VS to auth,也可以直接在代码中使用VisualStudioCredential
代替DefaultAzureCredential
此外,当您将代码部署到 Azure 时,该代码也将起作用,因为
DefaultAzureCredential
将使用 ManagedIdentityCredential
进行身份验证,即使用 MSI 获取秘密(本质上,keyvault 引用功能也使用 MSI 获取秘密),因此您也可以直接使用它而不是这个功能,它们都取决于你自己。
Azure Functions 本地开发允许通过
local.settings.json
使用 KeyVault 引用。所有应用程序配置变量都可以在'Values'
下设置。功能工具将处理对@Microsoft.KeyVault(<password-secret-path>)
的引用,应用程序将在运行时获取值。
AFAIK 这对 Azure 应用服务的作用不同
参见: