如何在 npmrc 文件中使用 Azure Key Vault?

How to use Azure Key Vault in npmrc file?

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

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

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

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

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

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

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

我能想到的最后一个方法是使用@azure/keyvault-secrets client. If using an NPM library to retrieve Key Vault secrets sounds interesting, this is the dependency for you. All the information needed to work with this library should be available on 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();

当您的服务或程序 运行。

时,您可以随时使用此库加载您的机密信息

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

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

registry={your npm registry URL}

always-auth=false

现在,在构建管道中,在 npm install 之前添加 npm Authenticate task

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