我们的发布管道中有一个Azure Key Vault任务,该任务会下载一些秘密供舞台使用。
在嵌入式Azure PowerShell脚本中,您可以使用以下命令获取机密值:
$secretValue = $(nameOfTheSecretInKeyVault)
这很好。
但是,我们要转向在回购中使用脚本,即将DevOps任务添加到文件路径,即/somePath/myScript.ps1
所以我需要对上面的代码行进行参数化,因为我不能像现在正在做的那样直接更改内联脚本中的名称,但是我无法使它正常工作。
我尝试过:
$compositeName = "${someParameter}-Application"
$secretValue1 = $($compositeName)
$secretValue2 = $("${compositeName}")
$secretValue3 = env:$compositeName
$secretValue4 = $(${compositeName})
最上面一行只是建立它需要查找的秘密的名称。不幸的是,这些都不起作用。尝试#1,#2和#4仅返回字符串名称,而实际上没有获得秘密值,并且#3错误说它不存在。
是否有实现此目标的方法,还是仅需要对机密进行参数化并将其从ADO任务传递到脚本中?
答案 0 :(得分:2)
要么先运行您的KeyVault任务,然后再运行PowerShell脚本,要么全部在PowerShell中执行。
您需要从Azure DevOps创建到Azure订阅的服务连接。允许服务连接访问KeyVault。从PowerShell或Azure CLI访问KeyVault。
例如对于PowerShell:
(Get-AzKeyVaultSecret -vaultName "Contosokeyvault" -name "ExamplePassword").SecretValueText
Here是详细的演练。
答案 1 :(得分:1)
像您一样,我想不出一种方法来访问在工作的 Download secrets 任务中加载日志提及的变量。它确实以内联模式工作,但没有脚本文件的机会。
因此,我改为利用现有的连线(链接到KeyVault的变量组),然后在脚本的开头自己运行命令:
$mySecretValue = (Get-AzKeyVaultSecret -VaultName "myVault" -Name "mySecret").SecretValueText
从那里,我可以将其用作任何其他变量。
答案 2 :(得分:0)
现在还集成了本地密钥库,因此您可以透明地将密钥作为变量组读取,而无需特定于Keyvault的Powershell代码。
答案 3 :(得分:0)
解决此问题的一种方法是为脚本添加参数,以在调用它时传递release变量,例如vadd.spv
您应该可以使用-secretValue $(nameOfTheSecretInKeyVault)
,但请记住$env:nameOfTheSecretInKeyVault
成为.
编辑:如果您使用_
,请再次查看您的问题,您会遇到问题。是env:$nameOfTheSecretInKeyVault
答案 4 :(得分:0)
如果将来有人遇到这种情况,并且正在寻找一种bash替代方法,那么我最终可以使用以下命令来做到这一点
$(az keyvault secret show --name "${secret_name}" --vault-name "${vault_name} --query "value" | sed "s/\"//g")
这使您可以获取保管库秘密的值,并在任何地方使用它。最后需要使用sed
来删除从查询中拉出的"