首页 > 解决方案 > 无法在发布管道中打印 Azure-Keyvault 机密

问题描述

我正在尝试使用以下代码从发布管道中检索 Azure-Key 保管库机密。但我无法使用下面的代码打印确切的字符串

(Get-AzKeyVaultSecret -vaultName "keyvalultname" -name "Password").SecretValueText
$Password= (Get-AzKeyVaultSecret -vaultName "keyvalultname" -name "Password").SecretValueText
$Password
Write-Output 'DBPassword is $Password'
Write-Host 'DBPassword is $Password'

if ($Password-eq "Password01")
{
   Write-Host "1"
}
else
{
   Write-Host "0"
}

Write-Host $($Password.Username)

在上面的代码中,我得到的值是“Password01”。但我可以在 IF 条件下打印 1 。

我得到的输出如下

2019-12-09T14:01:45.9967410Z ***
2019-12-09T14:01:45.9972871Z DBPassword is $Password
2019-12-09T14:01:45.9984181Z DBPassword is $Password
2019-12-09T14:01:45.9992966Z 1
2019-12-09T14:01:46.0026811Z 
2019-12-09T14:01:46.0030953Z 

标签: powershellazure-devopsazure-pipelinesazure-pipelines-release-pipelineazure-devops-rest-api

解决方案


这是 Azure DevOps 行为,用于屏蔽秘密变量而不打印日志中的值,请参见此处

我们努力掩盖秘密出现在 Azure Pipelines 输出中,但这并不是万无一失的。永远不要将秘密作为输出回显。一些操作系统记录命令行参数。永远不要在命令行上传递秘密。相反,我们建议您将您的秘密映射到环境变量中。

我们永远不会掩盖秘密的子串。例如,如果将“abc123”设置为机密,则不会从日志中屏蔽“abc”。这是为了避免在太细的级别上掩盖秘密,使日志不可读。因此,机密不应包含结构化数据。例如,如果将 "{ "foo": "bar" }" 设置为机密,则不会从日志中屏蔽 "bar"。

如果将它们打印为字符,则可以垂直打印值:

$Password.ToCharArray()

推荐阅读