在 Azure DevOps 中从 bash 访问 Azure KV 变量

Access to Azure KV variables from bash in Azure DevOps

我正在构建一个由不同团队主管道触发的 azure devops 模板。 在发布阶段,我们使用 AzureKeyVault@1 任务从 Azure Keyvault 中获取机密,所有机密都根据日志输出下载并存储为当前阶段的输出变量:

##[debug]set secretKey-blabla-password=********
##[debug]Processed: ##vso[task.setvariable variable=secretKey-blabla-password;issecret=true;]***

此任务完成后,我想在后续的 bash 任务中枚举所有以特定名称开头的变量(因为秘密的数量会因团队而异,但会遵循特定的命名约定).

然后我尝试使用以下方法检索下一个任务中的所有变量:

 - task: Bash@3
          displayName: Generate deployment secrets
          inputs:
            targetType: "inline"
            script: |
                  env | sort ##Tried also with compgen -v

当我 运行 管道正确获取 KV 机密时,当下一个任务启动时,调试显示从机密中检索到的所有变量都已加载

##[debug]loading SECRET_SECRETKEY-BLABLA-PASSWORD

但是当我尝试打印代理中的所有变量时,我只得到环境变量或生成的任何其他任务输出变量,而不是来自 KV 的变量。

我知道它适用于 bash 任务中此变量的显式输入定义,但我的问题是秘密变量的名称和数量将取决于执行模板的团队。这就是为什么我想获取所有秘密导出的变量,然后基于模式过滤将这些值转储到特定的 k8s 秘密部署文件中

是否可以像这样完成或使用替代方法,有什么想法吗?

谢谢

KV 中的所有变量都被视为机密,因此您无法将它们作为环境变量使用。要将它们用作环境变量,您必须将它们显式映射为:

- task: PowerShell@2
  env:
   PIPELINE_SCOPED_SECRET_VAR: $(secret1FromKV) 
   SECRET_VAR_IN_VARIABLE_GROUP: $(secret2FromKV) 

因此,如果您有不同的变量集,将很难完成您的任务。我宁愿建议不要那样做,因为你泄露了本应保密的东西。但是,如果您需要这个,请考虑使用 azure cli 和 azure cli task 来获取您的变量。

而且这是不可能定义的globally