繁体   English   中英

在 Azure DevOps Powershell 脚本中动态获取 KeyVault 机密

[英]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 代码。

https://docs.microsoft.com/en-us/azure/devops/pipelines/library/variable-groups?view=azure-devops&tabs=yaml#link-secrets-from-an-azure-key-vault

解决此问题的一种方法是为您的脚本添加一个参数,以便在您调用它时传递发布变量,例如-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM