繁体   English   中英

使用 nodejs 从 Azure Keyvault 获取秘密

[英]Get Secret from Azure Keyvault using nodejs

我需要阅读 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(ie application id)client secret(ie application secret) ,设置环境变量AZURE_CLIENT_IDAZURE_CLIENT_SECRETAZURE_TENANT_ID

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

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

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

const retrievedSecret = await client.getSecret(secretName);

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

有关更多详细信息,请参阅快速入门:Azure Key Vault 客户端库,用于 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#authenticating-as-a-service-principal

您需要做的就是按照以下步骤操作:

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

另一种方法是动态获取 Key Vault 令牌并使用该令牌从 Key Vault 获取机密 - https://docs.microsoft.com/en-us/samples/azure-samples/app-service-msi-keyvault-节点/应用服务-msi-keyvault-node/

有用的参考:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM