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

如何通过YAML动态从Azure KeyVault获取带指定前缀的多个密钥

可行,具体实现方案如下

核心思路

用Azure CLI的az keyvault secret list命令筛选指定前缀的密钥,再把结果转成字典格式,注入到部署阶段的环境变量里,就能动态传递给代码了,完全不用管每个阶段的密钥数量差异。

分步实现

1. 在部署YAML中添加密钥查询步骤

每个部署阶段单独做密钥查询(毕竟每个阶段的KeyVault是独立的),示例YAML代码:

stages:
- stage: Dev_Deployment
  variables:
    keyvaultName: "dev-keyvault"
    secretPrefix: "app-config-"
  jobs:
  - job: Fetch_Secrets
    steps:
    - script: |
        # 查询指定前缀的密钥,返回包含名称和值的JSON数组
        secrets=$(az keyvault secret list --vault-name $(keyvaultName) --query "[?starts_with(name, '$(secretPrefix)')].{key:name, value:value}" -o json)
        # 用jq把JSON数组转成键值对字典,写入环境变量
        echo "APP_SECRETS=$(echo $secrets | jq -c 'from_entries')" >> $GITHUB_ENV
      displayName: "拉取Dev环境密钥"
      # 提前安装jq工具处理JSON
      pre: |
        sudo apt-get update && sudo apt-get install -y jq

2. 代码中读取密钥

在后续执行代码的步骤里,直接读取环境变量APP_SECRETS,解析成字典就能用。比如Python代码示例:

import os
import json

# 从环境变量读取并解析密钥字典
app_secrets = json.loads(os.getenv("APP_SECRETS", "{}"))
# 示例:访问指定前缀的密钥
print(app_secrets.get("app-config-db-password"))

3. 多阶段适配

其他阶段只要复制上述步骤,修改keyvaultName和secretPrefix这两个变量就行,不管每个阶段有多少个密钥,都会自动全部拉取。

注意事项

  • 执行Azure CLI的服务主体必须有目标KeyVault的Secrets List和Secrets Get权限
  • 如果用Azure Pipelines,也可以结合AzureKeyVault@2任务,但CLI方式更灵活支持前缀筛选
  • jq是处理JSON的必要工具,要是部署环境没预装,得提前安装

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:10:04