访问在 nodejs 中引用 Key Vault 的 Azure 应用程序配置设置

Access Azure App Configuration Settings that Reference Key Vault in nodejs

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

我的同事使用 C# 编写,正在 AzureAppConfigurationOptions 上使用 ConfigureKeyVault 方法来配置 Azure App Configuration SDK 以自动解析、获取和解码来自其连接字符串的秘密。

我想在nodejs中做同样的事情,但是在API docs

中没有找到类似的方法

我必须做这样的事情吗?

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;
}

以下代码可以工作:

导入模块:

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>)

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

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

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