0

对于在 Linux 上运行、使用 Node.js 运行时 v14 的 Azure 函数,
我想使用读取应用程序配置@azure/app-configuration
某些配置值是明文时,而其他配置值是到 keyvault 的连接字符串。

我的同事用 C# 编写,正在使用ConfigureKeyVaulton 方法AzureAppConfigurationOptions配置 Azure 应用程序配置 SDK,以自动解析、获取和解码连接字符串中的秘密。

我想在 nodejs 中做同样的事情,但在API 文档中没有找到类似的方法

我必须做这样的事情吗?

async function getConfig(key: string): Promise<string> {
  const maybeConnectionString = await appConfigurationClient.getConfigurationSetting({ key });
  if (maybeConnectionString.startsWith('@Microsoft.KeyVault'))
    return await keyVaultClient.getSecret(maybeConnectionString);
  else
    return maybeConnectionString;
}
4

2 回答 2

1

Benny Powers,是的,你是对的。要在 Node.js 中使用 Key Vault 引用,您必须获取键值,解析密钥标识符的值,然后从 Key Vault 中检索实际密钥。正如您所提到的,这已作为 .NET 配置提供程序的一部分实现,但如果您使用的是 JS SDK,则必须这样做。

在实现方面,首先要检查 key-value 是否有content -typeapplication/vnd.microsoft.appconfig.keyvaultref+json;charset=utf-8如果是这样,则表示此键值是 Key Vault 引用。然后您可以解析该值。该值采用 JSON 格式,类似于{"uri":"https://xxxxxx.vault.azure.net/secrets/....."}. uri指向的是秘密标识符。获得机密标识符后,您可以像以前一样使用 Key Valut 客户端获取实际机密。

于 2021-02-02T22:01:45.890 回答
-1

下面的代码可以工作:

导入模块:

import { SecretClient } from "@azure/keyvault-secrets";
import { DefaultAzureCredential } from "@azure/identity";

获取秘密的逻辑:

let vaultUrl = `https://yourkeyvaultname.vault.azure.net/`;
let credentials = new DefaultAzureCredential();

let client = new SecretClient(vaultUrl, credentials);
let secret_value = (await client.getSecret("yoursecretname")).value

而且我注意到您提到了标签“azure-function”,因此无需使用 key-vault SDK。您可以将此添加到函数应用的配置设置中(仅在函数应用部署到 azure 后才有效。):

@Microsoft.KeyVault(SecretUri=<secret identifier>)

然后创建一个函数应用身份,并让函数身份访问对keyvault有相应的访问策略。之后,您只需访问环境变量即可获取秘密。

于 2021-01-28T02:51:05.310 回答