在本地开发中使用azure KeyVault

evo*_*ter 6 azure azure-keyvault azure-functions

我看过其他关于此问题的帖子,但似乎没有一个答案有效。我有一个正在本地开发的天蓝色功能应用程序。它使用应用程序设置从密钥保管库获取用户名/密码。当部署到azure时,它可以完美运行。但在本地开发时,它并​​不是从金库中抓取数据。

所以在代码中,我有这个:

var password = System.Environment.GetEnvironmentVariable("PASSWORD", EnvironmentVariableTarget.Process);
Run Code Online (Sandbox Code Playgroud)

我已将我的用户添加到保管库访问策略中,并在其中添加了应用程序标识。这就是它在天蓝色中工作的原因。我看到这篇文章提到设置环境变量: https://github.com/Azure/azure-functions-host/issues/3907 我尝试过,但仍然没有骰子。每当我调用上面的代码时,我都会返回设置键,如下所示:

@Microsoft.KeyVault(SecretUri=https://mykeyvault.vault.azure.net/secrets/PASSWORD/e97ba4bf3e2e4919b1899384ea349999)
Run Code Online (Sandbox Code Playgroud)

Joy*_*ang 9

当然不行,keyvault引用只是function app或web app的特性,不适用于本地开发。

在本地,您的选择是通过SDK手动获取密钥。

var client = new SecretClient(vaultUri: new Uri(keyVaultUrl), credential: new DefaultAzureCredential());    
secret = client.GetSecret("secret-name");
Run Code Online (Sandbox Code Playgroud)

上面的代码使用DefaultAzureCredentialAzure.Identity进行身份验证,它会按顺序尝试几种凭证类型进行身份验证,其中之一是VisualStudioCredential,表示它将使用登录VS的用户帐户进行身份验证,您也可以在代码中直接使用VisualStudioCredential而不是使用。DefaultAzureCredential

此外,当您将其部署到Azure时,该代码也将起作用,因为DefaultAzureCredential将用于ManagedIdentityCredential身份验证,即使用MSI来获取秘密(本质上keyvault参考功能也使用MSI来获取秘密),所以您也可以直接使用它,而不是使用它这个功能,全靠你自己了。