[英]Add/get secret to Azure Keyvault with Azure powershell task in Azure devops
[英]Dynamicallly get KeyVault secret in Azure DevOps Powershell script
我们的发布管道中有一个 Azure Key Vault 任务,该任务下载一些机密以在阶段使用。
在一个内联 Azure PowerShell 脚本中,您可以使用以下命令获取秘密值:
$secretValue = $(nameOfTheSecretInKeyVault)
这工作正常。
但是,我们想在 repo 中使用脚本,即将 DevOps 任务指向文件路径,即 /somePath/myScript.ps1
所以我需要参数化上面的代码行,因为我不能像我目前正在做的那样更改内联脚本中的名称,但我无法让它工作。
我努力了:
$compositeName = "${someParameter}-Application"
$secretValue1 = $($compositeName)
$secretValue2 = $("${compositeName}")
$secretValue3 = env:$compositeName
$secretValue4 = $(${compositeName})
最重要的是建立它需要寻找的秘密的名称。 不幸的是,这些都不起作用。 尝试 #1、#2 和 #4 仅返回字符串名称,实际上并没有得到秘密值,并且 #3 错误说它不存在。
有没有办法实现这一点,还是我只需要参数化秘密并将其从 ADO 任务传递到脚本中?
在 PowerShell 脚本之前先运行 KeyVault 任务,或者在 PowerShell 中完成所有操作。
您需要从 Azure DevOps 创建到您的 Azure 订阅的服务连接。 允许服务连接访问 KeyVault。 从 PowerShell 或 Azure CLI 访问 KeyVault。
例如对于 PowerShell:
(Get-AzKeyVaultSecret -vaultName "Contosokeyvault" -name "ExamplePassword").SecretValueText
这是详细的演练。
和你一样,我想不出一种方法来访问日志提到的变量,这些变量加载到作业的“下载机密”任务中。 它确实在内联模式下工作,但不是一个脚本文件的机会。
因此,我利用现有的接线(链接到我的 KeyVault 的变量组)并在我的脚本开始时自己运行命令:
$mySecretValue = (Get-AzKeyVaultSecret -VaultName "myVault" -Name "mySecret").SecretValueText
从那里我可以将它用作任何其他变量。
现在还有本机密钥库集成,因此您可以将密钥作为变量组透明地读入,不需要特定于 Keyvault 的 powershell 代码。
解决此问题的一种方法是为您的脚本添加一个参数,以便在您调用它时传递发布变量,例如-secretValue $(nameOfTheSecretInKeyVault)
您应该可以使用$env:nameOfTheSecretInKeyVault
,但请记住.
成为_
编辑:如果您使用env:$nameOfTheSecretInKeyVault
再次查看您的问题,您会遇到问题。 它是$env:<variable_name>
如果将来有人遇到此问题并正在寻找 bash 替代品,我最终可以使用以下命令执行此操作
$(az keyvault secret show --name "${secret_name}" --vault-name "${vault_name} --query "value" | sed "s/\"//g")
这让您可以获取保管库机密的值并在任何地方使用它。 最后的sed
需要删除从查询中提取的"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.