如何防止Azure DevOps Pipeline脚本中的Tenant ID被自动审查
解决Azure DevOps Pipeline中Tenant ID被日志审查屏蔽的问题
我之前也碰到过一模一样的情况——Azure DevOps的日志系统会自动识别Azure相关的敏感标识符(比如Tenant ID、订阅ID这类格式的字符串),并自动替换成***,哪怕这些内容是从Key Vault获取的Secret的一部分。既然你暂时不考虑安全问题,这里有几个可以绕过这个审查的方法:
方法1:拆分字符串后分段输出
把包含Tenant ID的URL拆成多个部分,分别用Write-Host输出(配合-NoNewline参数保证内容连贯),这样日志审查器就不会识别出完整的Tenant ID字符串:
$var = Get-AzKeyVaultSecret -VaultName $(vaultname) -Name $(secretname) -AsPlainText # 按Tenant ID所在的位置拆分字符串 $urlParts = $var -split 'online.com/' # 分段输出 Write-Host $urlParts[0] -NoNewline Write-Host 'online.com/' -NoNewline Write-Host $urlParts[1]
方法2:对Tenant ID进行微小字符干扰
在Tenant ID字符串中插入一个不可见的空白字符(比如零宽空格),让审查器无法匹配到标准的Tenant ID格式,同时不影响内容的可读性:
$var = Get-AzKeyVaultSecret -VaultName $(vaultname) -Name $(secretname) -AsPlainText # 在Tenant ID中插入零宽空格 $unredactedVar = $var -replace "([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})", '$1`u{200B}' Write-Host $unredactedVar
注:零宽空格在日志里是不可见的,只会让审查器的匹配逻辑失效。
方法3:通过字符数组重组输出
将字符串转换为字符数组后再重新拼接,绕过审查器的字符串匹配逻辑:
$var = Get-AzKeyVaultSecret -VaultName $(vaultname) -Name $(secretname) -AsPlainText # 转成字符数组再重组 $output = -join $var.ToCharArray() Write-Host $output
补充说明
Azure DevOps的这个自动审查是内置的安全机制,它会扫描日志中符合Azure敏感标识符格式的字符串并自动屏蔽。上面的方法都是利用审查逻辑的局限性来绕过屏蔽,再次提醒你注意:这种做法会将敏感的Tenant ID暴露在公开日志中,存在安全风险,请谨慎使用。
内容的提问来源于stack exchange,提问作者Dustin Sollick
相关产品推荐
相关产品推荐

