【问题标题】:How to use Azure Key Vault in npmrc file?如何在 npmrc 文件中使用 Azure Key Vault?
【发布时间】:2021-02-23 18:29:47
【问题描述】:

我的 .npmrc 文件中有一个秘密的个人访问令牌(仅用于构建目的)。由于这个秘密被暴露,我想用 Azure Key Vault 替换它。我还没有找到任何关于它的文档。当我之前创建个人令牌时,我只给它打包/构建访问权限。我怎样才能做到这一点,请帮我解决这个问题?或者有没有更好的方法在 .npmrc 文件中包含个人访问令牌?

【问题讨论】:

  • 您是否使用 Azure DevOps 管道进行构建?
  • @krishg 是的,我就是这样

标签: node.js access-token azure-keyvault .npmrc


【解决方案1】:

由于您确认使用 Azure DevOps 进行构建,因此无需在 .npmrc 文件中维护 PAT。只需将您的 npm 注册表 URL 保留在那里(我假设私有 npm 注册表也在 Azure DevOps 中),如下所示:

registry={your npm registry URL}

always-auth=false

现在,在构建管道中,添加 npm Authenticate taskbefore npm install。

- task: npmAuthenticate@0
  inputs:
    workingFile: <relative path to your .npmrc file>

【讨论】:

  • 谢谢,我试过这个而不是 Azure Key Vault,它成功了!
【解决方案2】:

可以通过多种方式为您的资源提供秘密。

Azure 中的某些资源允许您通过 Azure CLI 指定环境变量。这是 Azure 容器实例的示例:link

在 Azure 上,一旦拥有 Key Vault 实例,就可以使用 Key Vault 为应用服务和 Azure Function 实例提供机密。这在此处进行了记录:link,重点关注 Azure 资源管理器模板,这对于自动化部署特别有用。

尽管上面的文档链接中解释了以下内容,但有关如何使用来自其他 Azure 资源的 Key Vault 机密的一般情况需要以下内容:

  • 创建用户分配的标识或 Azure Active Directory 应用程序。
  • 通过转到您的 Key Vault 的访问策略(当然,这可以通过门户完成)授予对此身份(或 AAD 应用程序)的访问权限,并授予您的身份至少对您的 Key Vault 的读取权限。
  • 之后,在您的 Key Vault 上创建一个机密,转到机密详细信息并复制“机密标识符”。这将是一个类似于:https://myvault.vault.azure.net/secrets/mysecret/ 的 URI。
  • 这是可用于将 Key Vault 机密带到其他资源的 URI。
  • 您将能够从其他资源访问此密钥,方法是确保资源可以访问相同的身份,并通过类似于@Microsoft.KeyVault(SecretUri=https://myvault.vault.azure.net/secrets/mysecret/) 的语法提供 URI。

例如,如果将 Azure 函数链接到授予对 Key Vault 的读取访问权限的同一标识,则可以通过在资源中设置配置属性来通过环境变量提供机密。通过转到 Azure 门户,找到您的资源,然后转到配置,然后转到应用程序设置,如果您继续添加环境变量的名称,并且值类似于:@Microsoft.KeyVault(SecretUri=https://myvault.vault.azure.net/secrets/mysecret/),您将提供预期的环境变量和资源的预期秘密值。

我能想到的最后一种方法是使用@azure/keyvault-secrets 客户端。如果使用 NPM 库检索 Key Vault 机密听起来很有趣,那么这就是您的依赖项。使用此库所需的所有信息都应在 NPM 上提供:same link。但无论如何,使用此客户端的示例如下所示:

const { DefaultAzureCredential } = require("@azure/identity");
const { SecretClient } = require("@azure/keyvault-secrets");
 
const credential = new DefaultAzureCredential();
 
const client = new SecretClient(`https://my-key-vault.vault.azure.net`, credential);
  
async function main() {
  const secretName = "MySecretName";
  const latestSecret = await client.getSecret(secretName);
  console.log(`Latest version of the secret ${secretName}: `, latestSecret);
}
 
main();

您可以在服务或程序运行时随时使用此库加载您的机密。

如果此信息对您有用,请告诉我。我是来帮忙的!

【讨论】:

    猜你喜欢
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    相关资源
    最近更新 更多