我正在使用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);
});
我可能会做一些愚蠢的事情-请帮忙!
答案 0 :(得分:1)
您的代码需要一些细微的修正
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;
});