我正在使用 NodeJs Azure Function V2,我想从 Key-Vault 获取 secret 。 我尝试了以下引用。 Here's a link。
我正在使用 ms-rest-azure NPM 库包。
我的代码如下:
function getKeyVaultCredentials(){
return msRestAzure.loginWithAppServiceMSI({resource: "https://my-keyvault-DNS-url.vault.azure.net",msiEndpoint: process.env["MSI_ENDPOINT"],msiSecret:process.env["MSI_SECRET"]});
}
function getKeyVaultSecret(credentials) {
var keyVaultClient = new KeyVault.KeyVaultClient(credentials);
return keyVaultClient.getSecret("https://my-keyvault-DNS-url.vault.azure.net", 'secret', "mySecretName");
}
getKeyVaultCredentials().then(
getKeyVaultSecret
).then(function (secret){
console.log(`Your secret value is: ${secret.value}.`);
}).catch(function (err) {
throw (err);
});
函数调用成功执行,但从未获取凭据。
注意: 我已启用 MSI 身份并授予该 Azure 功能对 kevault 的访问权限。
我收到的错误如下:
MSI:无法从“http://127.0.0.1:410056/MSI/token/?resource=https://my-keyvault-DNS-url.vault.azure.net&api-version=2017-09-01”检索 token ,并出现错误:{“ExceptionMessage”:“AADSTS500011:找不到名为 https://my-keyvault-DNS-url.vault.azure.net 的资源主体在名为 6620834b-d11e-44cb-9931-2e08b6ee81cc00 的租户中。如果应用程序尚未由租户管理员安装或未经租户中的任何用户同意,则可能会发生这种情况。您可能已将身份验证请求发送到错误的租户。\r\n跟踪 ID: 1f25ac6c-01e0-40d8-8146-269f22d49f 001\r\n相关 ID: 4beede0c-2e83-4bcc-944d-ba4e8ec2c6834\r\n时间戳: 2019-03-29 02:54:40Z","ErrorCode":"invalid_resource","ServiceErrorCodes":["500011"],"StatusCode":400,"Message":null ,"CorrelationId":"e6e8108d-e605-456b-8fb6-473962dcd5d678"}
我可能会犯一些愚蠢/错误 - 请帮忙!!
最佳答案
您的代码需要一些细微的修复
resource
应设置为https://vault.azure.net
。这基本上必须是一般资源,而不是您的实例。方法其实是
getSecret('<KEYVAULT_URI>', '<SECRET_NAME>', '<SECRET_VERSION>')
这是您的代码最后的样子
function getKeyVaultCredentials() {
return msRestAzure.loginWithAppServiceMSI({
resource: 'https://vault.azure.net'
});
}
function getKeyVaultSecret(credentials) {
var keyVaultClient = new KeyVault.KeyVaultClient(credentials);
return keyVaultClient.getSecret(
'https://my-keyvault-DNS-url.vault.azure.net',
'mySecretName',
''
);
}
getKeyVaultCredentials()
.then(getKeyVaultSecret)
.then(function(secret) {
console.log(`Your secret value is: ${secret.value}.`);
})
.catch(function(err) {
throw err;
});
关于node.js - 无法使用 NodeJs 获取 MSI 凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55401190/