如何在GitHub Actions中使用Azure Key Vault替代set-output获取密钥
解决GitHub Actions中Azure Key Vault密钥写入appsettings.json的空值与明文泄露问题
问题根源
你尝试用$GITHUB_OUTPUT替代set-output时出现两个核心问题:
- 输出变量为空:
$GITHUB_OUTPUT要求每行必须是key=value的格式,你之前的name=ApiKeyName::add-mask::value写法不符合规范,导致无法正确识别输出变量。 - 密钥明文泄露:
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
相关产品推荐
相关产品推荐

