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

如何在GitHub Actions中使用Azure Key Vault替代set-output获取密钥

解决GitHub Actions中Azure Key Vault密钥写入appsettings.json的空值与明文泄露问题

问题根源

你尝试用$GITHUB_OUTPUT替代set-output时出现两个核心问题:

  1. 输出变量为空:$GITHUB_OUTPUT要求每行必须是key=value的格式,你之前的name=ApiKeyName::add-mask::value写法不符合规范,导致无法正确识别输出变量。
  2. 密钥明文泄露:add-mask需要单独通过echo "::add-mask::<密钥内容>"触发,不能和输出变量写在同一行。

修正方案

调整Get Appsettings Key Vault Secrets步骤的脚本,先掩码密钥再写入输出变量:

- name: Get Appsettings Key Vault Secrets
  uses: azure/CLI@v1
  with:
    azcliversion: 2.30.0
    inlineScript: |
      # 获取密钥并暂存到变量
      API_KEY=$(az keyvault secret show --vault-name keyvaultname --name ApiKeyName --query value -o tsv)
      # 掩码密钥,避免明文出现在日志中
      echo "::add-mask::$API_KEY"
      # 正确写入GITHUB_OUTPUT,格式为key=value
      echo "ApiKeyName=$API_KEY" >> $GITHUB_OUTPUT
  id: azKeyVaultAppSettings

完整修正后的工作流代码

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Login to Azure
      uses: azure/login@v1
      with:
        creds: ${{ secrets.AZURE_CREDENTIALS }}
    - name: Get Appsettings Key Vault Secrets
      uses: azure/CLI@v1
      with:
        azcliversion: 2.30.0
        inlineScript: |
          API_KEY=$(az keyvault secret show --vault-name keyvaultname --name ApiKeyName --query value -o tsv)
          echo "::add-mask::$API_KEY"
          echo "ApiKeyName=$API_KEY" >> $GITHUB_OUTPUT
      id: azKeyVaultAppSettings
    - name: Setup .NET
      uses: actions/setup-dotnet@v2
      with:
        dotnet-version: 5.x
    - name: Restore dependencies
      run: dotnet restore
    - name: Build
      run: dotnet build --configuration Release --no-restore
    - name: Swap appsettings vals
      uses: microsoft/variable-substitution@v1
      with: 
        files: 'UI/appsettings.json'
      env:
        ApiKeyName: ${{ steps.azKeyVaultAppSettings.outputs.ApiKeyName }}  

额外注意事项

  • 确保Azure登录账号拥有目标Key Vault的Secret Get权限,否则无法读取密钥。
  • 变量名必须完全匹配:输出变量名(ApiKeyName)、env中的变量名、appsettings.json中的键名三者要一致,否则替换会失败。
  • 多密钥场景可重复掩码和输出步骤,例如:
    DB_PWD=$(az keyvault secret show --vault-name keyvaultname --name DbPassword --query value -o tsv)
    echo "::add-mask::$DB_PWD"
    echo "DbPassword=$DB_PWD" >> $GITHUB_OUTPUT
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 21:24:55