我正在Azure Devops的Azure Powershell任务中执行以下代码:
$secret="<<SecretValue>>"
$AppId="<<ClientId>>"
$tenantid="<<TenantId>>"
$cred = New-Object System.Management.Automation.PSCredential ($AppId, (ConvertTo-SecureString $secret –ASPlainText –Force))
Connect-AzureRMAccount -ServicePrincipal -Credential $cred -Tenant $tenantId
$KeyVaultSecret= (Get-AzureKeyVaultSecret -vaultName '<<KVName>>' -name '<<SecretName>>').SecretValueText
write-host " Value: $KeyVaultSecret"在作业执行之后,该值不会在作业执行中显示,但是在通过本地系统powershell执行时,相同的代码会显示该值。
Devops输出:

本地系统输出:

为什么Azure Devops中没有值的原因?
发布于 2021-03-09 18:20:45
在Azure DevOps管道中,默认情况下,根据this documentation (“重要”注释部分)尝试删除输出提要中的秘密。
这可能是没有显示在输出中的原因。
还有另一种通过变量组从KeyVault获取秘密的方法。Here is the documentation for how to set that up。
发布于 2021-03-10 11:23:54
我认为这是一种正确的行为。Azure DevOps有自己的安全策略,旨在保护您的秘密和敏感信息。
如果Azure DevOps允许从密钥库在控制台日志中打印机密的实际值,则任何有权查看管道日志的人都可以获得机密。显然,这会使你的秘密面临被轻易泄露的风险。
当你直接在你的本地系统上执行脚本时,Azure DevOps的安全策略不会应用到你的本地系统,也可能没有任何其他安全策略,因为Azure会应用到你的本地系统,所以你可以将秘密值打印到输出日志中。
你可以尝试在你的系统上安装自托管代理,以在Azure DevOps上的管道中运行脚本。如果保密值仍然是隐藏的,就像我上面提到的,这是Azure DevOps的安全策略。
https://stackoverflow.com/questions/66544626
复制相似问题