访问在 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 客户端获取实际秘密。
对于 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 客户端获取实际秘密。