You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地从Azure Key Vault获取密钥作为环境变量(C#)

本地访问Azure Key Vault密钥并用作测试环境变量的方案

你没法直接在Settings.runsettings里引用Azure Key Vault密钥,得通过本地身份验证 + 代码/命令行预加载密钥的方式实现,具体步骤如下:

1. 配置本地访问Key Vault的权限

  • 先确保本地已登录Azure:用Azure CLI执行az login,或者在Visual Studio/Azure PowerShell里登录你的Azure账号。
  • 在Azure Portal的目标Key Vault中,给当前登录的用户分配Key Vault Secrets User角色(至少要有secrets/get权限),确保能读取密钥。

2. 修改Settings.runsettings文件

把硬编码的密钥值替换为空占位符,避免敏感信息进代码仓库:

<RunSettings>
  <RunConfiguration>
    <!-- 其他配置 -->
    <EnvironmentVariables>
      <MySecret></MySecret>
    </EnvironmentVariables>
    <!-- 其他配置 -->
  </RunConfiguration>
</RunSettings>

3. 两种加载密钥的方法

方法一:在测试初始化代码中读取密钥并设置环境变量

这种方法不需要手动执行命令,测试启动时自动拉取密钥:

  1. 给测试项目安装两个NuGet包:
    dotnet add package Azure.Security.KeyVault.Secrets
    dotnet add package Azure.Identity
    
  2. 创建测试初始化类(以xUnit为例,NUnit可对应使用[SetUpFixture]):
    using Azure.Identity;
    using Azure.Security.KeyVault.Secrets;
    using System;
    
    public class TestSetupFixture : IDisposable
    {
        public TestSetupFixture()
        {
            // 替换成你的Key Vault地址
            var keyVaultUri = new Uri("https://你的密钥保管库名称.vault.azure.net/");
            // DefaultAzureCredential会自动用本地已登录的身份验证
            var secretClient = new SecretClient(keyVaultUri, new DefaultAzureCredential());
    
            // 读取Key Vault中的目标密钥(替换成你的密钥名称)
            var secret = secretClient.GetSecret("MySecretName");
            // 设置环境变量,覆盖runsettings中的空值
            Environment.SetEnvironmentVariable("MySecret", secret.Value.Value);
        }
    
        public void Dispose()
        {
            // 清理逻辑(如果需要)
        }
    }
    
  3. 在测试集合中引用这个初始化类,确保测试运行前执行:
    [CollectionDefinition("TestCollection")]
    public class TestCollection : ICollectionFixture<TestSetupFixture>
    {
        // 无需额外代码,仅用于标记集合
    }
    
  4. 给测试类添加[Collection("TestCollection")]特性,启动时自动触发初始化。

方法二:用Azure CLI预加载环境变量后运行测试

适合不想修改测试代码的场景,手动执行命令加载密钥:

  1. 在Windows PowerShell中执行:
    # 从Key Vault读取密钥值
    $secretValue = az keyvault secret show --name MySecretName --vault-name 你的密钥保管库名称 --query value -o tsv
    # 设置环境变量
    $env:MySecret = $secretValue
    # 运行测试
    dotnet test
    
  2. 在Linux/macOS终端中执行:
    # 读取密钥并设置环境变量,然后运行测试
    export MySecret=$(az keyvault secret show --name MySecretName --vault-name 你的密钥保管库名称 --query value -o tsv)
    dotnet test
    

这样就能彻底把敏感密钥从代码仓库中移除,本地测试时安全地从Key Vault拉取密钥作为环境变量使用。

内容的提问来源于stack exchange,提问作者kdeez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 05:53:07