У меня есть хранилище ключей Azure с разными ключами (например, Key1, Key2, Key3). В некоторых настройках, которые динамически считываются в одной задаче конвейера, у меня есть значение, указывающее, какой ключ использовать (позволяет переменной KeyName быть «Key2»). Как я могу прочитать секретное значение Key2 в конвейере?
Я пробовал разные комбинации, но ни одна из них не работает.
Тестовый конвейер № 1 - с использованием групповой переменной, связанной с Key Vault (для упрощения, KeyName здесь статическое, но на самом деле оно устанавливается через сценарий PowerShell во время конвейера):
jobs:
- job: JobA
variables:
- group: KeyVaultGroup #Key vault have secret values "Key1,Key2,Key3..."
- name: KeyName
value: Key2
- name: MyValue
value: $[ variables[variables.KeyName] ]
steps:
- powershell: |
Write-Host "Var1 $($env:VARENV1)"
Write-Host "Var2 $($env:VARENV2)"
env:
VarEnv1: $(MyValue)
VarEnv2: $($(KeyName))
Результат:
Var1
Var2 $(Key2)
MyValue не работает, потому что переменная оценивается до загрузки переменных хранилища ключей. И когда KeyName устанавливается во время конвейера, он не будет работать, потому что это тоже (но это можно решить, используя отдельное задание и используя выходные переменные для установки KeyName - как в тестовом примере № 2). Выражение $ ($ (KeyName)) не работает, потому что оно не будет рекурсивно расширять переменную (ошибка?).
Та же проблема возникает, когда задача AzureKeyVault используется для чтения значений Key Vault, потому что она запускается слишком поздно.
№ теста 2 - два отдельных задания: я использовал 2 задания - одно для чтения хранилища ключей и имени ключа (задание A), а второе для остальных (задание B). Проблема в том, что нет способа получить доступ к секретным значениям хранилища ключей, загруженным в задание A, из задания B. Я могу использовать только выходные переменные из задания A в задании B через зависимости.JobA ... но задание AzureKeyVault не экспортирует значения как выходные переменные. Для этого мне нужно будет использовать, например, Задача Powershell, но в этом случае мне нужно будет сопоставить секретные значения как переменные среды с задачей Powershell, но это означает, что я потеряю нужную динамическую часть, потому что она будет статически сопоставлена (мне нужно иметь возможность добавить / удалить значения в хранилище ключей без изменения конвейера). Это не годится, или я не знаю, как получить доступ к секретным переменным между заданиями без использования выходных переменных.
Вопрос: Как прочитать безопасное значение из ключа Key2, когда Key2 сохраняется как значение переменной KeyName и загружается во время конвейера?