node.js - 无法使用 NodeJs 获取 MSI 凭据

标签 node.js azure-functions identity

我正在使用 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"}

我可能会犯一些愚蠢/错误 - 请帮忙!!

最佳答案

您的代码需要一些细微的修复

  1. resource应设置为https://vault.azure.net 。这基本上必须是一般资源,而不是您的实例。

  2. 方法其实是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/

相关文章:

node.js - 缓存后如何处理 MongoDB 客户端连接错误 Mongo 关闭?

node.js - Meteor Node 进程 CPU 使用率接近 100%

node.js - express.js 带或不带参数的路由

node.js - Sequelize object.add 不返回 id?

azure - v2 Azure Function with Service Bus 触发器未触发

Azure函数: Old code still running after a deployment

azure-functions - Dotnet Core Azure Function(隔离进程)如何加载每个环境的 appsettings.json

asp.net-core - DotNet Core Identity - 用户表与自定义表的关系

arrays - 数组标识 - 是

sql - 将主键用作身份字段是否很好