我的kv带有秘密 dbname =“ DatabaseName” 。
在Azure DevOps中,我使用两项任务,一项是从Key Vault读取机密,第二项是Azure Powershell,这是我的代码行Write-Host $(dbname)
。
日志中的输出为***
。
我想获得DatabaseName
作为输出。
我唯一发现的是
$DWH = "$(dbname)"
Write-Host "$($DWH.ToCharArray() -join ' ' )"
输出为D a t a b a s e N a m e
。
是否有可能获得DatabaseName
而不是***
或D a t a b a s e N a m e
?
答案 0 :(得分:1)
恐怕您无法获得想要的东西。
出于安全原因,您不能直接在日志中显示机密。它就是这样设计的。
但是它不会影响您的使用。例如,我刚刚从Azure Keyvault下载了机密,然后可以在下一个PowerShell任务中检查它们:
结果
答案 1 :(得分:1)
根据docs,Microsoft屏蔽了日志中的秘密变量,因此您无法正常打印它。
您可以安装Read Secrets from Key Vault扩展名,该扩展名从Key Vault读取机密并将其存储在常规变量中(而不是存储在Microsoft内置任务之类的机密变量中)。 / p>
答案 2 :(得分:0)
根据documentation,可以拆分secrets并输出子串:
<块引用>我们努力掩盖秘密,以免出现在 Azure Pipelines 中 输出,但您仍然需要采取预防措施。永远不要把秘密作为 输出。一些操作系统记录命令行参数。永不通过 命令行上的秘密。相反,我们建议您映射您的 环境变量中的秘密。
我们从不掩盖秘密的子串。例如,如果设置了“abc123” 作为一个秘密,“abc”不会从日志中屏蔽。这是为了避免 以过于精细的级别掩盖秘密,使日志 不可读。出于这个原因,秘密不应该包含结构化的 数据。例如,如果将 "{ "foo": "bar" }" 设置为机密,则 "bar" 未从日志中屏蔽。
这是一个 bash 的例子,它可能被转移到 Powershell:
- task: Bash@3
inputs:
targetType: inline
script: |
# let's say the secret is Passw0rd
# Direct output is masked:
echo $MYSECRET
# OUTPUTS "***"
# Concatenated output is masked:
echo "ABC$MYSECRET DDD"
# outputs "ABC*** DDD"
# Experimenting with substrings:
firstPart=${MYSECRET::-2}
secondPart=${MYSECRET: -2}
# Substrings are displayed:
echo $firstPart
# outputs "Passw0"
echo $secondPart
# outputs "rd"
# Substrings concatenated with other strings are displayed:
echo "$firstPart-$secondPart"
# outputs "Passw0-rd"
# Directly concatenated substrings are masked:
echo "$firstPart$secondPart"
# outputs "***"
# Secrets can be written to a file:
echo "$MYSECRET" > test.txt
# Secrets are even masked when being displayed as part of a file:
cat test.txt
# outputs "***"
env:
MYSECRET: $(my_secret) # This is defined in a variable group
- task: PublishPipelineArtifact@1
inputs:
targetPath: 'test.txt' # This pipeline artifact contains the secret unmasked
artifact: 'TestArtifact'
publishLocation: 'pipeline'
displayName: 'Publish PipelineRunData artifact'
因此,我们有两个选择来获取秘密:
从安全角度来看可能并不理想,但了解系统的局限性非常重要:任何有权修改管道的人都有可能访问管道使用的机密。