使用nodejs从Azure Keyvault获取秘密



我需要读取Azure活动目录中的用户列表。客户端创建了Graph API应用程序,但他们不想共享应用程序的客户端机密,而是要求我们使用密钥保管库。如何从node.js应用程序访问密钥以检索用户列表?

我尝试了下面的一个,但出现了错误,我不确定如何进行身份验证。

const { DefaultAzureCredential } = require("@azure/identity");
const { SecretClient } = require("@azure/keyvault-secrets");
const credential = new DefaultAzureCredential();
const vaultName = "lsm-keyvault";
const url = `https://${vaultName}.vault.azure.net`;
const client = new SecretClient(url, credential);
const secretName = "Demo";
async function main() {
const result = await client.setSecret(secretName, "MySecretValue", {
enabled: false
});
console.log(result)
}

如果在本地运行代码,DefaultAzureCredential将自动使用环境变量。

因此,在您的情况下,您需要向Azure AD注册一个应用程序,并获取tenant idclient id(i.e. application id)client secret(i.e. application secret),设置环境变量AZURE_CLIENT_IDAZURE_CLIENT_SECRETAZURE_TENANT_ID

对于您收到的403错误,我注意到您说的是It added as a compound entity,根据我的经验,您没有将与AD应用程序相关的正确服务主体正确添加到密钥库的Access policies中。如果添加正确,它将显示为APPLICATION,而不是COMPOUND IDENTITY

所以当你添加它时,你可以直接搜索client Id(i.e. application Id)the name of your App Registration,确保你添加了正确的。我在这个类似的问题上给出了详细信息,你可以参考

要检索机密,Get权限就足够了,代码应该是

const retrievedSecret = await client.getSecret(secretName);

我注意到您在代码中使用了client.setSecret,它用于保存机密,要使用它,您可能需要Set权限。

有关更多详细信息,请参阅Quickstart:Azure Key Vault客户端库For Node.js(v4(。

更新:

我最终需要部署它,但不是在azure中,而是在另一个环境中。如何设置环境变量并访问它。

如果是这样,您需要更改代码以进行身份验证,请直接在代码中使用这三个值。

更改线路

const { DefaultAzureCredential } = require("@azure/identity");
const credential = new DefaultAzureCredential();

const { ClientSecretCredential } = require("@azure/identity");
const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);

请参阅-https://www.npmjs.com/package/@azure/identity/v/1.0.3#认证即服务-主要

您只需要按照以下步骤操作:

  • 通过应用程序注册在Azure Active Directory(服务主体(中创建应用程序
  • 转到密钥保管库资源,访问策略刀片,将读取访问权限分配给我们在上述步骤中创建的此Azure AD应用程序(服务主体(
  • 在应用程序服务中设置这3个环境变量AZURE_CLIENT_IDAZURE_TENANT_IDAZURE_CLIENT_SECRET。从我们在步骤1中创建的应用程序中获取这些变量的值
  • 使用我们现在已经在使用的DefaultAzureCredential。这将自动从我们在应用程序服务中为身份验证定义的环境变量中选择凭据

另一种方法是动态获取密钥库令牌,并使用该令牌从密钥库中获取机密-https://learn.microsoft.com/en-us/samples/azure-samples/app-service-msi-keyvault-node/app-service-msi-keyvault-node/

有用参考:

  • https://www.rahulpnath.com/blog/defaultazurecredential_from_azure_sdk/

最新更新