Почему Azure DevOps маскирует некоторые несекретные переменные в выводе журнала? - PullRequest
0 голосов
/ 20 июня 2020

Я регистрирую несколько руководств в выходных данных Azure DevOps, обратите внимание: введите описание изображения здесь

Итак, *** (секрет) *** - это мой результат, потому что я знаю, что конкретное поле является секретом. Однако ClientId и TenantId маскируются Azure DevOps сами по себе, и я не понимаю, как Azure DevOps решил, что их нужно замаскировать.

Это не переменные сборки, просто некоторые операторы Write-Host.

Мы используем предварительный Azure DevOps Server 2019.

EDIT 1

Вот сценарий Powershell, который запускается:

function Initialize-AzureSqlDB(
    [parameter(Mandatory)][ValidateScript({ Test-Path -LiteralPath $_ -PathType Container })]$DBScriptsSource,    
    [parameter(Mandatory)][string]$SqlServerName,
    [Parameter(Mandatory)][string]$SqlServerResourceGroup,
    [Parameter(Mandatory)][string]$SubscriptionId,
    [Parameter(Mandatory)][string]$ClientId,
    [Parameter(Mandatory)][string]$ClientSecret,
    [Parameter(Mandatory)][string]$TenantId,
    [string]$DBNamePrefix = "${env:UserName}_"
)
{
    # Some code that does Write-Host for all the script parameters
    ...

Сценарий вызывается из шаблона сборки YAML. Фактические учетные данные участника службы находятся в переменных среды ARM _.... Вот код YAML:

- powershell: Initialize-AzureSqlDB -DBScriptsSource ${{ parameters.dbScriptLocation }} -DBNamePrefix ${{ parameters.dbNamePrefix }} -TenantId $env:ARM_TENANT_ID -SubscriptionId $env:ARM_SUBSCRIPTION_ID -ClientId $env:ARM_CLIENT_ID -ClientSecret $env:ARM_CLIENT_SECRET -SqlServerName $env:SqlServerName -SqlServerResourceGroup $env:SqlServerResourceGroup 
  displayName: Initializing Database(s).
  condition: eq(variables['RunDBUpgrade'],true)

Теперь ни ClientId, ни TenantId не определены как переменные сборки. Их фактические значения исходят из существующей конечной точки подключения службы в Azure DevOps, но даже там нет ни одного секрета.

Так что мне неясно, как Azure DevOps решает их маскировать, а не SubscriptionId, например. Я, со своей стороны, не хочу, чтобы ни один из них был замаскирован.

Кто-нибудь может объяснить, как Azure DevOps решает, что здесь маскировать?

EDIT 2

Итак, я проверил наше расширение, и оно содержит следующий код:

Write-Host "##vso[task.setvariable variable=ARM_SUBSCRIPTION_ID;]$($se.data.subscriptionId)"
Write-Host "##vso[task.setvariable variable=ARM_SUBSCRIPTION_NAME;]$($se.data.subscriptionName)"
Write-Host "##vso[task.setvariable variable=ARM_TENANT_ID;]$($se.auth.parameters.tenantid)"
Write-Host "##vso[task.setvariable variable=ARM_CLIENT_ID;isSecret=true]$($se.auth.parameters.serviceprincipalid)"
Write-Host "##vso[task.setvariable variable=ARM_CLIENT_SECRET;isSecret=true]$($se.auth.parameters.serviceprincipalkey)"

Это может объяснить, как маскируется ClientId, но не TenantId. Теперь есть вероятность, что код в главной ветке не совсем соответствует тому, который установлен на сервере. Я позабочусь о том, чтобы задача была перенесена, и тогда мы узнаем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...