无法通过NodeJ获取MSI凭据

时间:2019-03-28 15:18:50

标签: node.js azure-functions identity

我正在使用NodeJs Azure Function V2,并且想从Key-Vault中获取秘密。 我尝试了以下参考。 Here's a link

我正在使用ms-rest-azure NPM库软件包。

我的代码如下:

import java.io.*;

class myCode
{
public static void main (String[] args) throws java.lang.Exception {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String input = br.readLine();
    System.out.println(input);

    //Array for storing period objects
    Period[] array = new Period[];

    //12 20 14 23 08 19

}

public static class Period{

    public int start;
    public int end;

    public Period(int start, int end) {
        this.start = start;
        this.end = end;
    }

    void printPeriod(){
        System.out.println("Start: " + start);
        System.out.println("End: " + start);
    }

  }
}

函数调用成功执行,但从未获得凭据。

注意 :     我已经启用了MSI身份,并为该Azure功能授予了对kevault的访问权限。

我得到的错误如下:      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); });

我可能会做一些愚蠢的事情-请帮忙!

1 个答案:

答案 0 :(得分:1)

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

  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;
  });