![](/img/trans.png)
[英]Getting a secret from azure keyvault with node from a linux vm with MSI
[英]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 id
、 client id(ie application id)
、 client secret(ie application secret)
,设置环境变量、 AZURE_CLIENT_ID
、 AZURE_CLIENT_SECRET
和AZURE_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_CLIENT_ID
、 AZURE_TENANT_ID
和AZURE_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.