首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从带有MSI的linux从带有节点的azure密钥库中获取一个秘密

从带有MSI的linux从带有节点的azure密钥库中获取一个秘密
EN

Stack Overflow用户
提问于 2019-04-08 14:55:39
回答 3查看 825关注 0票数 1

我在从azure上的linux上运行的节点应用程序中获取azure密钥库的密钥库时遇到了问题。

我使用以下代码:

代码语言:javascript
复制
import * as KeyVault from 'azure-keyvault';
import * as msRestAzure from 'ms-rest-azure'

function getKeyVaultCredentials(){
    return msRestAzure.loginWithVmMSI();
}

function getKeyVaultSecret(credentials) {
    let keyVaultClient = new KeyVault.KeyVaultClient(credentials,null);
    return keyVaultClient.getSecret("my keyvault url here", 'my keyvault secret name here', "", null,null);
}

getKeyVaultCredentials().then(
    getKeyVaultSecret
).then(function (secret){
    //not getting here....
}).catch(function (err) {
    //...error handling...
});

当我打电话给getSecret时,我得到了一个401的响应。密钥库和MSI上的机器都有权限设置。在错误中,我得到的似乎没有任何身份验证头或标记,虽然我确实看到了一个标题,它看起来像响应上的身份验证头。

在我的实施过程中有什么遗漏吗?

编辑:--我在这里共享的示例如果我使用

代码语言:javascript
复制
msRestAzure.loginWithVmMSI({resource: 'https://vault.azure.net' });

而不是叫它没有对角线。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-04-09 02:30:55

在您的密钥库中,确保使用正确的秘密权限在Access policies中添加了服务主体(通过启用MSI自动创建)。然后尝试单击Click to show advanced access policies->,选择Enable access to Azure Virtual Machines for deployment选项-> Save。

下面是一个代码示例,您可以检查检索秘密值的部分。

代码语言:javascript
复制
var http = require('http');
const KeyVault = require('azure-keyvault');
const msRestAzure = require('ms-rest-azure');


var server = http.createServer(function(request, response) {
    response.writeHead(200, {"Content-Type": "text/plain"});
});

// The ms-rest-azure library allows us to login with MSI by providing the resource name. In this case the resource is Key Vault.
// For public regions the resource name is Key Vault
msRestAzure.loginWithAppServiceMSI({resource: 'https://vault.azure.net'}).then( (credentials) => {
    const keyVaultClient = new KeyVault.KeyVaultClient(credentials);

    var vaultUri = "https://" + "<YourVaultName>" + ".vault.azure.net/";

    // We're setting the Secret value here and retrieving the secret value
    keyVaultClient.setSecret(vaultUri, 'my-secret', 'test-secret-value', {})
        .then( (kvSecretBundle, httpReq, httpResponse) => {
            console.log("Secret id: '" + kvSecretBundle.id + "'.");
            return keyVaultClient.getSecret(kvSecretBundle.id, {});
        })
        .then( (bundle) => {
            console.log("Successfully retrieved 'test-secret'");
            console.log(bundle);
        })
        .catch( (err) => {
            console.log(err);
        });

    // Below code demonstrates how to retrieve a secret value

    // keyVaultClient.getSecret(vaultUri, "AppSecret", "").then(function(response){
    //     console.log(response);    
    // })
});

有关更多细节,您可以参考:使用Node应用程序从Azure密钥库中设置和检索一个秘密

票数 2
EN

Stack Overflow用户

发布于 2020-12-22 02:24:14

现在,这在新的@azure/keyvault-secrets包中得到了简化,SecretClient可以从@azure/identity包中提取DefaultAzureCredential,后者足够聪明,可以在VM中运行时使用MSI详细信息,以及在本地开发环境中使用VS或Azure之类的开发人员凭据。您可以在@azure/identity自述中了解更多这方面的信息。

这样,您的代码将简化为

代码语言:javascript
复制
const { SecretClient } = require("@azure/keyvault-secrets");
const { DefaultAzureCredential } = require("@azure/identity");

async function getValue(secretName, secretVersion) {
  const credential = new DefaultAzureCredential();
  const client = new SecretClient(KEY_VAULT_URI, credential);
  const secret = await client.getSecret(secretName);
  return secret.value;
}

要将应用程序从旧的azure-keyvault包中移出(现在已不再推荐),您可以看到新@azure/密钥库迁移指南-秘密

票数 1
EN

Stack Overflow用户

发布于 2019-07-25 13:40:02

您可以使用阅读-天蓝色-秘密,它将从天蓝色密钥库中检索所有的秘密。

例如

代码语言:javascript
复制
let secretClient = require('read-azure-secrets');

async function loadKeyVaultValues() {

    let applicationID = '';
    let applicationSecret = '';
    let vaultURL = 'https://<your-key-vault-name>.vault.azure.net/';
    let secrets = await secretClient.getSecrets(applicationID, applicationSecret, vaultURL);

    secrets.forEach(secret => {
        console.log(secret);
    });

}

loadKeyVaultValues();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55576242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档